jakto, že si funkce nepředávají proměnné

3 příspěvky

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. 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,
  2. 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 :)
  3. 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.

← Zpět na všechna témata