IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Problém s PDO

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

Aktivity
Avatar

Člen
Avatar
:18.3.2014 20:00

Zdravím, začal jsem tedy překopávat weby a komunikaci s databází už zajišťuje PDO :) Jenomže při přihlašování mi to ukazuje jen hlášku, že jsem zadal blbý údaje ;(
Funkce, která přihlašuje:

function loginUser($nick, $heslo) {
        $heslo = sha1($heslo);
        connectDatabase();
        $dotaz = Db::query("SELECT * FROM uzivatele WHERE nick = ? AND heslo = ?", $nick, $heslo);
        $stav = 0;
        while($udaj == $dotaz) {
            $stav = $stav + 1;
            $id = $udaj['id'];
        }
        if($stav == 1) {
            session_start();
            $_SESSION['id'] = $id;
            Db::query("INSERT INTO log VALUES ('', 'Přihlášení', ?, ?, '" . date("j.n.Y G:o") . "')", $nick, $id);
            echo'<meta http-equiv="refresh" content="0;url=index.php?page=msg&function=login&type=good">';
        } else {
            Db::query("INSERT INTO log VALUES ('', 'Neúspěšné přihlášení', ?, ?, '" . date("j.n.Y G:o") . "')", $nick, $id);
            echo'<meta http-equiv="refresh" content="0;url=index.php?page=msg&function=login&type=bad">';
        }
    }

Je mi samozřejmě jasný, že tam mám někde naprosto dementní chybu, kterou vy najdete během pár vteřin :) Ale já ji prostě nenajdu, PDO je pro mě zatím španělská vesnice.

 
Odpovědět
18.3.2014 20:00
Avatar
Odpovídá na
Martin Konečný (pavelco1998):18.3.2014 21:02

Tím "blbý údaje" máš na mysli špatné přihlašovací jméno nebo heslo?

Nahoru Odpovědět
18.3.2014 21:02
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar

Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
:18.3.2014 21:05

Prostě mě to přesměruje na index.php?page=msg&fun­ction=login&ty­pe=bad, což mi zobrazí chybu. Nic konkrétnějšího :)

 
Nahoru Odpovědět
18.3.2014 21:05
Avatar
Odpovídá na
Martin Konečný (pavelco1998):18.3.2014 21:11

Nějak jsem nepobral tuto část scriptu:

$dotaz = Db::query("SELECT * FROM uzivatele WHERE nick = ? AND heslo = ?", $nick, $heslo);
$stav = 0;
while($udaj == $dotaz) {
   $stav = $stav + 1;
   $id = $udaj['id'];
}

Nevím, co přesně vrací metoda Db::query(), ale ten while je nějaký nesmyslný. Porovnáváš tam proměnnou $udaj (která mimo jiné neexistuje) s proměnnou $dotaz, což je výsledek metody Db::query().
Pak je ten while nesmyslný v tom, že hledáš přece jen jednoho uživatele, tak tam nepotřebuješ cyklus.

Nahoru Odpovědět
18.3.2014 21:11
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar

Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
:18.3.2014 21:12

Ano, je to nesmysl... v bezradnosti vyplodím cokoli :D

 
Nahoru Odpovědět
18.3.2014 21:12
Avatar
Odpovídá na
Martin Konečný (pavelco1998):18.3.2014 21:29

Přemýšlej - prakticky jediné, co potřebuješ, je, aby se z DB vytáhlo ID uživatele podle jeho jména a hesla. Vyhledaný záznam projdeš a pokud se dané ID našlo, uložíš ho do session a přesměruješ. Pokud ne, hodíš error hlášku.

Nepotřebuješ na to cyklus, jen nějakou metodu fetch(). Nevím, jak vypadá struktura třídy Db, ale předpokládám, že tam něco takového je.

Nahoru Odpovědět
18.3.2014 21:29
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
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 6 zpráv z 6.