Autor Zpráva
Matej Ševčík
Profil
Čaute, mám problém. Robím neobjektový rs podľa tohoto návodu http://www.itnetwork.cz/ners-editor-clanku-v-php-tutorial . Konkrétne s prihlasovaním užívateľov. Tam je to urobené pomocou databázového wrapperu. Ale ja to chcem urobiť cez PDO. Nevie niekto ako? :)
lionel messi
Profil
Matej Ševčík:
Ale ja to chcem urobiť cez PDO.
Preletel som pár dielov uvedeného seriálu a hneď v druhom dieli sa píše:

[…] Wrapper by se dal přeložit jako obal. Někdo pro vás obalí objektové funkce ovladače PDO tak, abyste jim rozuměli a mohli je používat bez toho, aniž byste vůbec tušili co to objekt je. Právě tento přístup zvolíme v našem seriálu.

Čiže príklad de facto už PDO používa. Ak je však otázka mierená na PDO bez použitia wrapperu, odporúčam tento návod v češtine: MySQL přes PDO.
Matej Ševčík
Profil
Presne to som pozeral. Len fakt neviem ako to urobiť. Konkrétne tento kód:
if ($_POST)
{
        $uzivatel = Db::queryOne('
                SELECT uzivatele_id, admin
                FROM uzivatele
                WHERE jmeno=? AND heslo=SHA1(?)
        ', $_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh");
        if (!$uzivatel)
                $zprava = 'Neplatné uživatelské jméno nebo heslo';
        else
        {
                $_SESSION['uzivatel_id'] = $uzivatel['uzivatele_id'];
                $_SESSION['uzivatel_jmeno'] = $_POST['jmeno'];
                $_SESSION['uzivatel_admin'] = $uzivatel['admin'];
                header('Location: administrace.php');
                exit();
        }
}

.......
Ako toho istého výsledku dosiahnuť v "čistom" PDO?
lionel messi
Profil
Matej Ševčík:
Ako toho istého výsledku dosiahnuť v "čistom" PDO?
Najprv sa musíš pripojiť. To môžeš obstarať kódom z odkázaného návodu: http://jecas.cz/pdo#pripojeni.

Keďže príklad v seriáli používa prepared statements, budeme sa ho držať aj v čistom PDO (samozrejme je nutné sa najprv pripojiť):
$dotaz = $pdo->prepare("SELECT uzivatele_id, admin FROM uzivatele WHERE jmeno = ? AND heslo = SHA1(?)");
$vysledok = $dotaz->execute(array($_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh"));
Matej Ševčík
Profil
Jasné .. pripojiť sa viem :). Okej tomuto kódu ešte rozumiem ale ako skontrolovať či existuje ako je to v tom kóde čo som poslal? Konkrétne táto časť:
if (!$uzivatel)
                $zprava = 'Neplatné uživatelské jméno nebo heslo';
Matej Ševčík
Profil
Skúšal som to tak ako si napísal. Tu je kód:

//najprv som sa pripojil.

$dotaz = $pdo->prepare("SELECT uzivatele_id, admin FROM uzivatele WHERE jmeno = ? AND heslo = SHA1(?)");
$vysledok = $dotaz->execute(array($_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh"));

if (!$vysledok)
{
    echo "Error...";
}
lionel messi
Profil
Matej Ševčík:
ako skontrolovať či existuje ako je to v tom kóde čo som poslal? Konkrétne táto časť:
Možných ciest je niekoľko, ide to napr. takto:
$dotaz = $pdo->prepare("SELECT COUNT(*) FROM uzivatele WHERE jmeno = ? AND heslo = SHA1(?)");
$vysledok = $dotaz->execute(array($_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh"));
$data = $vysledok->fetchColumn();
if (!$data) {
  echo "Neplatné užívateľské meno alebo heslo!";
}
Matej Ševčík
Profil
Ďakujem :) toto funguje. A mohol by si mi vysvetliť čo robí to fetchColumn? :)
lionel messi
Profil
Matej Ševčík:
A mohol by si mi vysvetliť čo robí to fetchColumn?
Pre istotu ťa radšej odkážem na oficiálnu dokumentáciu: php.net/manual/en/pdostatement.fetchcolumn.php (nerád by som to doplietol).
Matej Ševčík
Profil
ďakujem moc :) ..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: