Autor Zpráva
mindrak
Profil *
Mám problém s tímto kusem kódu:
 	if($drax->passwdcheck($_POST['username'],$_POST['password']) == $_POST['username']) {
              echo "<script>window.alert('".$drax->passwdcheck($_POST['username'],$_POST['password'])."--".$_POST['username']."')</script>";

	}

Pokud je username třeba dada a heslo ada, tak na mě vyskočí okno "0--dada", což znamená, že funkce passwdcheck vrací nulu, username je dada, ale přesto je podmínka splněna, proč???
Majkl578
Profil
----
Leo
Profil
"že funkce passwdcheck vrací nulu, username je dada"

Protože v PHP třeba platí

"ahoj" == 0 (string vs. intereger)

ale už ne

"5" == 0

ani

"ahoj" === 0 (operátor identity místo ==)

Leo
mindrak
Profil *
V passwdcheck je jen zatím "return 0".
Leo:
Nějak to nechápu. Já myslel, že php automaticky převádí při porovnání dva rozdílné datové typy na jeden. Při použití === by se porovnávaly dva stejné datové typy, což by asi fungovalo, nicméně nechápu proč nefunguje tohle. Nemělo by to fungovat tak, že se všechno převede na string?
Leo
Profil
Ne, převede se to na číslo - z "ahoj" se stane 0 a ta je rovna 0, Leo
Alphard
Profil
mindrak:
Nemělo by to fungovat tak, že se všechno převede na string?
To by v manuálu nebyla tabulka všech možných kombinací a jak se to převede :-)
ninja
Profil
mindrak: nebylo by lepší, aby metoda passwdcheck vracela při neúspěchu false? Případně při vůbec nenalezení uživatele null?
AM_
Profil
ninja:
spíš hlavně při úspěchu by měla vracet true, a ne username. Vůbec nějak logicky nechápu, proč passwdcheck, což bych volně přeložil jako "má tento uživatel toto heslo?" odpoví "tento uživatel".

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:

0