V úvodu stránky mám kromě session_start(); ještě přepínač povelů (switch($cmd)) a v něm mimo jiné (fungující), také tento :
case "change_pass":
change_pass($chpassuname, $npasa, $npasb);
main();
break;
V tom case volám funkcí change_pass(viz.níže) a předávám jím parametry o jméně uživatele, kterému chci změnit heslo ($chpassuname) heslo ($npasa) a oveření hesla ($npasb).
Proměnné chpassuname, npasa a npasb získávám z formuláře metodou POST.
Tím bych, stejně jako u jiných fungujících funkcí, očekával bezchybné předání proměnných.
Co se ale nestane...Volám funkcí change_pass v následujícím formátu...
function change_pass($komu, $hesloa, $heslob) {
global $conn; //připojení k databázi
if ($hesloa = '') {
hlaska("Nebylo zadáno heslo!");
$zmen = "ne";
}
if ($hesloa != $heslob) {
hlaska("Hesla si neodpovídají!");
$zmen = "ne";
}
else {
$noveheslo = md5($hesloa);
$sqlf = "UPDATE users SET password = '$noveheslo' WHERE username = '$komu'";
$resultf = mysql_query($sqlf, $conn);
if (!$resultf) {
hlaska("Heslo se nepodařilo změnit");
}
else {
hlaska("Heslo bylo úspěšně změněno.");
}
}
}
A výsledkem je mi výsměch ve formě:
Hesla si neodpovídají...(a přitom si odpovídají) a..
Hesla si neodpovídají...(když nezadám žádné heslo.)
funkce hlaska("neco"; je deklarována správně a slouží jen pro zvýraznění chybového hlášení - obdoba echo "<center><h2><font color=red>neco</font></h2></center>";
Pro úplnost ještě dodám výsek z formuláře :
<form action=<? echo $PHP_SELF; ?> method="post">
<table><tr><td>Login:</td><td>
<?
$sql = "SELECT * FROM users";
$result = mysql_query($sql, $conn);
$resulta = mysql_num_rows($result);
if (!$resulta) {
echo "Není žádný uživatel.";
}
else {
echo "<select name=\"chpassuname\">";
while ($row = mysql_fetch_array($result)) {
echo "<option value=\"$row[0]\">$row[0]";
}
}
?>
</select>
<tr><td>Nové heslo:</td><td><input type="text" name="npasa"></td></tr>
<tr><td>Potvrzení: </td><td><input type="text" name="npasb"></td></tr>
<tr><td colspan=2><input type=hidden name=cmd value=change_pass>
<input type="submit" value="Změnit"></td></tr></table></form></fieldset>
</td></tr>
Omlouvám se za delší příspěvěk, ale snad to pomůže i jiným, kteříby rádi měli autentifikaci. Dá se to udělat i jednodušeji, ale pak aby se v tom prase vyznalo. Takhle mám alespoň pro nejčastější operace udělanou funkci. Co s tím, když mi ale jedna z nich nefunguje.
Díky za rady a připomínky,
budes se divit ale je to uplna picovina :)
na druhym radku funkce change_pass() mas v podmince vyraz
$hesloa = ''
coz mel byt asi operator rovnosti.. misto toho se do promene $hesloa priradi prazdy string a totez (po pretypovani false) se vrati ty podmince.
takze proste misto toho napis
$hesloa == ''
a skus to znova.
akorat mi pride divny ze si hesla neodpovidaji ani kdyz nezadas zadny heslo, ale je mozny ze v tom sou naky mezery nebo atk..
hodne stesti :)
Ježiši, to byla blbost. Normálně za takové začátečnické chyby jiné kritizuji a teď se to obrátilo proti mně :))
Problém s tím, že si hesla neodpovídají, když nezadám žádné heslo se tím vyřešilo kupodivu taky, i když souvisloszi nechápu. Každopádně díky.