Autor Zpráva
Krewetta
Profil *
Ahoj,
v PHP mám skript, který obsahuje
$select_user = mysqli_query($mysql_connect, 'SELECT * FROM users WHERE username="'.$login_username.'"');
Cílem je zjistit, jestli hodnota proměnné login_username v databázi je. Proto se ptám, jak toho dosáhnout? Díky moc za odpovědi
pcmanik
Profil
Krewetta:
SELECT COUNT(*) ... Vráti 1 ak už v DB dané meno je, inak vráti 0.
Krewetta
Profil *
díky moc


Skript jsem si upravila, ale pořád mi to nepracuje správně.
$result = mysqli_query($mysql_connect, 'SELECT COUNT(*) FROM users WHERE username="$login_username"');
if($result == '0') {
    $login_error = 'Uživatel neexistuje!';
} else {
    $login_error = 'Uživatel existuje!!';    
}

Pokaždé to vrátí hlášku "Uživatel existuje". Můžu se zeptat, kde dělám chybu? :)
Joker
Profil
Krewetta:
Můžu se zeptat, kde dělám chybu?
Funkce mysqli_query nevrací to číslo, ale objekt mysqli_result. Ještě je pak nutné zavolat mysqli_fetch_row, to vrátí pole a v něm na indexu 0 bude ta hodnota.
aDAm
Profil
No a ještě bych upravil ten query string:
$result = mysqli_query($mysql_connect, 'SELECT COUNT(*) FROM users WHERE username="'.$login_username.'"')
juriad
Profil
Krewetta:
mysqli_query vrací mysqli_result, nikoli hodnotu. Musíš si z resultu vytáhnout ještě řádek a v něm najít hodnotu výsledku.
Jednodušší je však "SELECT 1 FROM users WHERE username='$login_username'". Pozor na uvozovky a apostrofy, máš je tam blbě.
Pak se stačí zeptat, kolik řádek dotaz vrátil.

Mimochodem, pokud jde o ověření před vytvořením uživatele, pak je toto ověření jen informační. V případě dvou požadavků zároveň a shodě náhod se může provést kontrola prvního, kontrola druhého, a pak vložení prvního, a následně vložení druhého, což buď vytvoří duplicitu nebo selže na chybu (záleží podle schématu databáze). Jedná se o problém atomicity operace. Toto tě ale asi bude trápit jen v případě, že se registruje více než málo uživatelů zároveň.
Krewetta
Profil *
Ať se snažím jakkoliv, nedaří se mi to rozchodit. A z dokumentace na PHP nejsem zrovna moudrá :/ Zkoušela jsem mysqli_fetch_row, bez účinku. Stále vyhazuje, že uživatel neexistuje. Je ještě nějaká jiná možnost, jak ověřit, jestli uživatel v databázi existuje? Protože já se s tímhle patlám už několik hodin a pořád to nefunguje. Práci mi navíc stěžuje i webový server, jelikož nevyhazuje chybový hlášky a já nevím, co se děje, když se zobrazí jen bílá stránka.
jenikkozak
Profil
Na dobu vývoje si chybové hlášky zapni.
Krewetta
Profil *
Tak jsem se v tom hrabala a zjistila jsem, že problém byl ve zvolení databáze MySQL, což mi samozřejmě do teď nevyhodilo žádnou hlášku. Už to mám. Díky všem za pomoc :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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