NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Nefunkční algoritmus v OOP

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
pgarsky
Člen
Avatar
pgarsky:8.11.2016 18:13

Ahoj, mám problém. Chtěl jsem si nastavit výpis údaje o uživatelích z DB pomocí OOP (wrapper z této sítě), avšak nic mi to nevypíše. (Ani žádnou chybovou hlášku). Díky za pomoc.
Zdrojáky:
index.php:

<?php
session_start();
require('Db.php');
require_once('tridy/Kontroly.php');
Db::connect('127.0.0.1', 'uzivatele', 'root', '');
$kontrola = new Kontrola();
$kontrola->zkontrolujSess();
echo ('
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="Pavel Gárský">
<meta name="keywords" content="surfování, reklama, peníze, zábava, viditelnost, čas, investice, dobrý, návštěvnost, wwwpoints">
<meta name="description" content="Reklama">
<title>Administrace</title>
<link rel="stylesheet" href="bootstrap.min.css">
<script src="jquery-3.1.0.min.js"></script>
<script src="bootstrap.min.js"></script>
<style>
#layout {
background: white;
border: 1px solid lightgray;
margin-top: 8%;
width: 1150px;
box-shadow: 3px 1px 3px lightgray;
</style>
</head>
<body style="background: lightcyan;">
<div class="container">
<div id="layout">
<img src="logo.png" class="col-lg-1">
<h1 class="col-lg-1" style="font-size: 50px;">Administrace</h1>
<h4 class="col-lg-offset-9" style="border-bottom: 1px solid black; width: 150px;">Vítejte, ' . '<strong>' . htmlspecialchars($kontrola->nactiUdaje("jmeno")) . '</strong>' . '</h4>
<h4 class="col-lg-offset-9" style="width: 150px;">Ads-kredity: ' . htmlspecialchars() . '</h4>
<h4 class="col-lg-offset-9" style="width: 150px;">Eshop-kredity: ' . htmlspecialchars() . '</h4>
</div>
</div>
</body>
</html>
');
?>

Kontroly.php:

<?php
class Kontrola
{
    public $udaj;

    public function zkontrolujSess() {
        if (!isset($_SESSION['id']))
        {
            header('Location: /webfun/index.php');
            exit();
        }
        if (isset($_GET['odhlasit']))
        {
            session_destroy();
            header('Location: /webfun/index.php?odhlaseno');
            exit();
        }
    }
    public function nactiUdaje($udaj) {
        $this->udaj = Db::queryOne('
        SELECT ?
        FROM uzivatele
        WHERE id=?
        ', $udaj, $_SESSION['id']);
    }
}
?>
Odpovědět
8.11.2016 18:13
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Marek Hlavčo:8.11.2016 18:37

nemáš vypisovanie chýb

ini_set('displa­y_errors', 1);
ini_set('displa­y_startup_error­s', 1);
error_reportin­g(E_ALL);

prípadne v php.ini

display_errors = on

 
Nahoru Odpovědět
8.11.2016 18:37
Avatar
Michal
Člen
Avatar
Odpovídá na pgarsky
Michal:8.11.2016 19:56

Není problém v tom, že metoda nactiUdaje() nic nevrací? Pouze uloží výsledek do jakési veřejné proměnné $this->udaj. Navrhuji proto upravit metodu na:

public function nactiUdaje($udaj) {
    return Db::queryOne('
    SELECT ?
    FROM uzivatele
    WHERE id=?
    ', $udaj, $_SESSION['id']);
}
Editováno 8.11.2016 19:56
 
Nahoru Odpovědět
8.11.2016 19:56
Avatar
pgarsky
Člen
Avatar
Odpovídá na Michal
pgarsky:8.11.2016 21:24

"Notice: Array to string conversion in C:\Users\Pavel\Des­ktop\webfun\ad­ministrace\ad­ministrace\tri­dy\Kontroly.php on line 25
Array"

Nahoru Odpovědět
8.11.2016 21:24
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Dominik Gavrecký:8.11.2016 21:44

Niekde využívas pole ako string

Nahoru Odpovědět
8.11.2016 21:44
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
pgarsky
Člen
Avatar
Odpovídá na Dominik Gavrecký
pgarsky:8.11.2016 21:49

No jasně, z DB se to načítá jako array. Ale jak to převést na string ?

Nahoru Odpovědět
8.11.2016 21:49
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Michal
Člen
Avatar
Odpovídá na pgarsky
Michal:8.11.2016 21:50

Metoda queryOne nejspíš vrací pole, tudíž ve výpisu přidej ješte příslušný index:

$kontrola->nactiUdaje("jmeno")[0]

// Pokud by nefungovalo
$kontrola->nactiUdaje("jmeno")["jmeno"]
Editováno 8.11.2016 21:51
 
Nahoru Odpovědět
8.11.2016 21:50
Avatar
pgarsky
Člen
Avatar
Odpovídá na Michal
pgarsky:8.11.2016 21:55

To první nejde vůbec, tu druhý vypisuje:
"
Notice: Undefined index: jmeno in C:\Users\Pavel\Des­ktop\webfun\ad­ministrace\ad­ministrace\in­dex.php on line 34
"

Nahoru Odpovědět
8.11.2016 21:55
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Dominik Gavrecký:8.11.2016 22:12

Niekedy je lepšie skúšať a nie písať sem každú jednú chybu ktorú ti to vráti. Kód vymaž napíš ho znova dump premenných a určite prídeš na to kde je problém.

Nahoru Odpovědět
8.11.2016 22:12
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
pgarsky
Člen
Avatar
Odpovídá na Dominik Gavrecký
pgarsky:8.11.2016 22:17

Ale já jsem student, a nemám tolik času, abych mohl 3 hodiny programovat nějakou malou blbost..

Nahoru Odpovědět
8.11.2016 22:17
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
pospec
Člen
Avatar
pospec:8.11.2016 22:26

To ze jsi student je naprosto spatny argument. Kazdy zacinal jako student a protoze chtel, cas si nasel. Tim ze to prepises se nejvic naucis. A za SELECT bych nedaval otaznik

 
Nahoru Odpovědět
8.11.2016 22:26
Avatar
Odpovídá na pgarsky
Dominik Gavrecký:8.11.2016 22:42

A ja som študent a riešim omnoho "ťažšie veci" ako select z DB a cez to vsetko si to rad vždy spravím sám a neotravujem všetkých na okolo ... z vlastných chýb sa učí najlepšie

Nahoru Odpovědět
8.11.2016 22:42
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na pgarsky
Adam Ježek:8.11.2016 23:36

Když na to nemáš čas, tak se na to vykašli a jdi na brigádu do McDonalds...

Už předchozími komentáři ve mě budíš dojem toho, že tomu vůbec nerozumíš a je to úkol co musíš odevzdat. V tom případě bude potřeba sednout k počítači, pročíst si tutoriály, všechno vyzkoušet, nastudovat,... to je práce na X dní, zapomeň na 3 hodiny. A nebo na tom předmětu nemáš co dělat.

Pokud si to ale děláš pro sebe, ze své vlastní vůle, tak nic jako "nemám čas" neexistuje. Čas se vždycky najde, pokud ne, není problém to odložit. U programování musí člověk umět i chtít, což tvůj přístup rozhodně není.

Nahoru Odpovědět
8.11.2016 23:36
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na pgarsky
Neaktivní uživatel:9.11.2016 0:34

Metoda queryOne v místním wrapperu vrací první řádek sql dotazu jako asociativní pole, tedy pole ve tvaru [název sloupce] => "hodnota".
Ta chyba ti říká, že nemáš definovaný index "jmeno" takže buďto tvá tabulka v databázi nemá sloupec "jmeno" nebo ti dotaz nevrací žádný výsledek a proto neexistuje index v poli.

Nahoru Odpovědět
9.11.2016 0:34
Neaktivní uživatelský účet
Avatar
Jan Bezdíček
Tvůrce
Avatar
Odpovídá na pgarsky
Jan Bezdíček:9.11.2016 6:02

To fakt ? Ja teda mel na uceni programovani cas hlavne jako student :D

 
Nahoru Odpovědět
9.11.2016 6:02
Avatar
pgarsky
Člen
Avatar
Odpovídá na Jan Bezdíček
pgarsky:9.11.2016 6:38

Jako mám čas, ale tenhle týden píšeme spoustu testů + 2 čtvrtletky, a já tohle potřebuji dodělat do dneska do večera :D

Nahoru Odpovědět
9.11.2016 6:38
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
pgarsky
Člen
Avatar
Odpovídá na Adam Ježek
pgarsky:9.11.2016 7:07

To na Tebe fakt jenom působí. Jen tady na Itnetworku jsem dal do programování asi tak 3500 Kč. Já dělám, co můžu, ale prostě občas mě něco nenapadne. Nejsem tak pokročilý.
PS: Je mi 14, takže žádné brigády.

Nahoru Odpovědět
9.11.2016 7:07
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.