Autor Zpráva
foboss
Profil *
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 *
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 *
jj, uklada sa ako strnig a v DB je zapisanych 000000 ( ako som zadal pri registracii)
foboss
Profil *
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 *
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) { .....  }
//tri rovnitka
foboss
Profil *
trinitrochleba mas u mna pivecko :) diky moc, funguje
BetaCam
Profil
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 *
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 *
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 *
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
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 />';
	}
}

?>

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