Autor | Zpráva | ||
---|---|---|---|
zvanec Profil |
Dobrý den mohl by mi prosím někdo poradit kde dělám chybu hláška byl jsi přihlášen jako xxx se prostě neukáže :( děkuji
<?php $tlacitko = $_POST["tlacitko"]; if ($tlacitko) { $nick = $_POST["nick"]; $heslo = $_POST["heslo"]; $heslo = md5(md5($heslo)); mysql_connect("mysql.ic.cz", "ic_xxx", "xxx"); mysql_select_db("ic_xxx"); $dotaz = mysql_query("SELECT * FROM uzivatele WHERE nick='".mysql_real_escape_string($nick)."' AND heslo='$heslo' ;"); while($vystup = mysql_fetch_object($dotaz)) { $id = $vystup->id; $nickDB = $vystup->nick; $hesloDB = $vystup->heslo; $email = $vystup->email; $opravneni = $vystup->opravneni; } if($nick == $nickDB AND $heslo == $hesloDB){ $_SESSION["id"] = $id; $_SESSION["nick"] = $nick; $_SESSION["email"] = $email; $_SESSION["opravneni"] = $opravneni; echo "Byl jsi přihlášen jako $nick"; } } ?> Moderátor panther: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
|
||
Someone Profil |
To není dobré řešení, jednoduše zkontroluj, zda existuje daný řádek s heslem a jménem a na základě toho přihlaš uživatele..:
if (isset($_POST['tlacitko'])) { $nick = mysql_real_escape_string($_POST['nick']); $heslo = md5(md5($_POST['heslo'])); mysql_connect("mysql.ic.cz", "ic_xxx", "xxx"); mysql_select_db("ic_xxx"); $dotaz = mysql_query("SELECT * FROM uzivatele WHERE uzivatele.nick='".$nick."' AND uzivatele.heslo='".$heslo."'"); $pocet_radku = mysql_num_rows($dotaz); if ($pocet_radku == 1) { $vysledek = mysql_fetch_assoc/array/object($dotaz); $_SESSION["id"] = $vysledek['id']; $_SESSION["nick"] = $vysledek['nick']; $_SESSION["email"] = $vysledek['email']; $_SESSION["opravneni"] = $vysledek['opravneni']; echo "Byl jsi přihlášen jako ".$vysledek['nick']; } else { echo "Uživatel s touto kombinací Jméno Heslo neexistuje"; } } |
||
Tori Profil |
Zjistěte si, kde přesně se to začne chovat jinak, než čekáte (např. tím, že si tam nasypete hlášky typu
echo "první podmínka ok, formulář odeslán"; ).
- Chybí session_start(); na začátku skriptu
- Dostane se skript dovnitř podmínky (= možnost překlepu v názvu form.pole nebo metody)? - Vrací dotaz nějaké odpovídající záznamy? viz mysql_num_rows - Je zbytečné tam tahat cyklus, když očekáváte max. jeden odpovídající řádek z DB. Kontrola hesla + nicku už proběhne v dotazu, je zbytečné dělat ji znova na ř.18 (=možnost další chyby). $dotaz = mysql_query("SELECT * FROM uzivatele WHERE nick='".mysql_real_escape_string($nick)."' AND heslo='$heslo'"); if (mysql_num_rows($dotaz) > 0) { $uzivatel = mysql_fetch_object($dotaz); $_SESSION["id"] = $uzivatel->id; $_SESSION["nick"] = $uzivatel->nick; $_SESSION["email"] = $uzivatel->email; $_SESSION["opravneni"] = $uzivatel->opravneni; echo "Byl jsi přihlášen jako $nick."; } else { echo "Špatné jméno nebo heslo, zkus to znova."; } Someone: Jen drobnost: nemělo by se používat mysql_real_escape_string před připojením k databázi. Ta funkce přihlíží k nastavené znak. sadě pro toto DB připojení. Bez existujícího DB připojení sice taky escapuje apostrofy apod., ale mohla by vyhazovat varování. |
||
Časová prodleva: 12 let
|
0