Autor | Zpráva | ||
---|---|---|---|
foboss Profil * |
#1 · Zasláno: 3. 9. 2008, 12:44:03
cavte, mam registracny formular, registrujem sa , hodim heslo , znova potvrdim (koli spravnosti) , vsetko ok, pokial nenastavim heslo ako nuly (ci uz 000 , alebo 0000 , 0000000), ak sa registrujem s takymto heslom , tak pri prihlaseni zadam meno co som sa registroval, ale ak dam heslo napr len jednu 0 (nulu, nie O), tak sa uzivatel prihlasi aj tak ,napriek tomu ze do DB som pri registracii zapisal heslo pozostavujuce zo 6 nul (000000) . Ak je helslo retazec znakov alebo rozne cislice vsetko ide ok, len pri nulach to robi.
Datovy typ pre pole heslo v DB mam varchar, skusal som aj char, neuspesne Dik za rady ak viete co s tym , s pozdraom Andrej :) |
||
trinitrochleba Profil * |
#2 · Zasláno: 3. 9. 2008, 12:54:49
určitě se to heslo ukládá jako string? převedl bych ho na string hnedle po obdržení z POSTu. A urcite je v DB ulozeno vsech sest nul? ne jen jedna?
|
||
foboss Profil * |
#3 · Zasláno: 3. 9. 2008, 12:56:48
jj, uklada sa ako strnig a v DB je zapisanych 000000 ( ako som zadal pri registracii)
|
||
foboss Profil * |
#4 · Zasláno: 3. 9. 2008, 12:58:53
tu je overovaci kod:
@$meno_l=$_POST["menoL"]; @$heslo_l=$_POST["hesloL"]; $vytiahni="SELECT nick,heslo FROM uzivatelia WHERE nick='$meno_l'"; $vysledok=mysql_query($vytiahni,$pripoj); if(!$vysledok) die("nastala chyba v DB, opakujte prosim poziadavku"); while ($riadok_l=mysql_fetch_array($vysledok)) { if($heslo_l != $riadok_l["heslo"]) { echo "<p align=\"center\">zadali ste neplatné meno alebo heslo , skúste prihlásenie zopakovať.</p>"; } else { $_SESSION['prihlaseny']='ano'; $_SESSION['nick']=$meno_l; echo "<p align=\"center\">boli ste úspešne prihlásený pod menom: <b>$meno_l</b></p> "; } } mysql_free_result($vysledok); |
||
trinitrochleba Profil * |
#5 · Zasláno: 3. 9. 2008, 12:59:15
aha, tak pozor, zkusil jsem si porovnat tyhle dve promenny
$dbheslo="000000"; $heslo="0"; a oni se opravdu shoduji :-o takze reseni: pri kontrole, jestli heslo z DB sedi se zadanym heslem pouzij i typovou kontrolu, tzn ze misto if($heslo_z_db == $zadane_heslo) ... pouzij if($heslo_z_db === $zadane_heslo) { ..... } |
||
foboss Profil * |
#6 · Zasláno: 3. 9. 2008, 13:06:13
trinitrochleba mas u mna pivecko :) diky moc, funguje
|
||
BetaCam Profil |
#7 · Zasláno: 3. 9. 2008, 13:25:12
trinitrochleba
„ převedl bych ho na string hnedle po obdržení z POSTu“ Data z formuláře ti zždy přijdou jako string. trinitrochleba „takze reseni: pri kontrole, jestli heslo z DB sedi se zadanym heslem pouzij i typovou kontrolu“ a nebo trochu lepší nápad je ukládat do DB pouze hash hesla čož je dnes celkem běžná a zažitá praxe. |
||
trinitrochleba Profil * |
#8 · Zasláno: 3. 9. 2008, 13:33:04
BetaCam: Že data přes POST přijdou vždycky jako string je pro mě novinka. Díky. Jinak ten nápad ohledně ukládání hashe je samozřejmě lepší. Mě jen stále udivuje, že pro PHP je "000000" to samé jako "0"
|
||
foboss Profil * |
#9 · Zasláno: 3. 9. 2008, 13:38:26
akurat som tie hesla zahashoval , takze tento problem defacto odpadol, ale aj tak diky, pre mna to bolo tiez divne , ze php vyhodnotilo "0 == 000000"
|
||
trinitrochleba Profil * |
#10 · Zasláno: 3. 9. 2008, 13:44:46
jj, teď mi o tom kamarád poreferoval. Říká se tomu automatické přetypování.
Stejně tak by prošlo, že "0" == 0 (string == integer). Protože nejdřív neprojde "0" == 0 tak ono si php automaticky přetypuje oboje na integer a zjistií, že uz to prochází. Což je podle mě ale docela drzost, takhle si přetypovávat proměnný, když to pro mě není žádoucí. Možná mi někdo ale řekně, k čemu je to dobrý (pokud k něčemu tedy je). |
||
BetaCam Profil |
#11 · Zasláno: 3. 9. 2008, 14:18:17 · Upravil/a: BetaCam
trinitrochleba
„Mě jen stále udivuje, že pro PHP je "000000" to samé jako "0"“ No udivovat tě to může, ale prostě to tak je. Klasický příklad tohoto chování je kontrola boolean kde se se musej používat === jinak ti projde v podstatě všechno. <?php $a = array('bool' => TRUE, 'stringbool' => 'TRUE', 'stringboolfalse' => 'FALSE', 'int' => 1, 'intrand' => 6546413, 'stringnum' => '1', 'stringrand' => 'akshjgdakjsgdkajsd'); var_dump($a); echo 'Bez kontroly typu<br /><br />'; foreach($a as $k => $v){ if ($v == TRUE){ echo '<b>'.$k.'</b> prosel <br />'; }else{ echo '<b>'.$k.'</b> neprosel<br />'; } } echo '<br /><br />S kontrolou typu<br /><br />'; foreach($a as $k => $v){ if ($v === TRUE){ echo '<b>'.$k.'</b> prosel<br />'; }else{ echo '<b>'.$k.'</b> neprosel<br />'; } } ?> |
||
Časová prodleva: 16 let
|
0