Diskuze: Problém s PDO

PHP PHP Problém s PDO American English version English version

Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Michal Vašíček:

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
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Odpovídá na Michal Vašíček
Martin Konečný (pavelco1998):

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

 
Nahoru Odpovědět 18.3.2014 21:02
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Vašíček:

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
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Odpovídá na Michal Vašíček
Martin Konečný (pavelco1998):

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
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Vašíček:

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

Nahoru Odpovědět 18.3.2014 21:12
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Odpovídá na Michal Vašíček
Martin Konečný (pavelco1998):

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
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.