Autor | Zpráva | ||
---|---|---|---|
jou222 Profil |
Zdravím,
dělám si na svém webu registraci a teď při kontrole jsem zjístil, že je někde v kódu chyba a podmínky nefungují. Někde je chyba a nemůžu ji najít. Budu rád za pomoc a ochotu děkuji jou222. <?php if(isset($_POST["odeslani_reg"])) { if ($_POST["user_reg"]) { if ((strlen ($_POST["user_reg"])<31) && strlen ($_POST["user_reg"])>2) { if ($_POST["pass_reg"]) { if ((strlen ($_POST["pass_reg"])<31) && strlen ($_POST["pass_reg"])>5) { if ($_POST["mail_reg"]){ $registrace = mysql_query("INSERT INTO uzivatele (id_uziv,user,pass,mail,jmeno,prijmeni,id_skupiny) VALUES (null, \"".$_POST["user_reg"]."\",\"".hashovani($_POST["pass_reg"])."\",\"".$_POST["mail_reg"]."\",\"".$_POST["jmeno_reg"]."\",\"".$_POST["prijmeni_reg"]."\",null)"); if($registrace) { echo ' <meta http-equiv="refresh" content="0;url=index.php?stranka=login"> '; } else echo 'chyba'; } else echo "Není vyplněn E-mail!"; } else echo "Heslo jméno musí obsahovat 6 - 30 znaků!"; } else echo "Není vyplněno heslo!"; } else echo "Uživatelelské jméno musí obsahovat 3 - 30 znaků!"; } else echo "Není vyplněno uživatelelské jméno!"; } ?> <form method="post" action=""> <div class="modul-registrace-uzivatele"> <h3>Formulář - Registrace uživatele</h3> <table> <tr> </tr> <tr> <td><label for="user">*Uživatelské jméno:*</label><br /><span class="label-info">(Délka 3-30 znaků)</span></td><td><input id="input-user" type="text" name="user_reg" ></td></tr> <tr><td><label for="pass">Heslo:*</label><br /><span class="label-info">(Délka 6-30 znaků)</span></td><td><input id="input-pass" type="password" name="pass_reg"></td></tr> <tr><td><label for="mail">E-mail:*</label></td><td><input id="input-mail" type="text" name="mail_reg"></td></tr> <td><label for="jmeno">Jméno:</label><br /><span class="label-info"> </span></td><td><input id="input-user" type="text" name="jmeno_reg" ></td></tr> <tr><td><label for="prijmeni">Příjmení:</label><br /><span class="label-info"> </span></td><td><input id="input-user" type="text" name="prijmeni_reg"></td></tr> </table> </div> <input type="submit" name="odeslani_reg" value="Registrovat se"> <button type="reset">Reset</button> <a href="index.php?stranka=homepage"><button type="button" value="Zrušit">Zrušit</button></a> </form> <font>* Povinné údaje!</font> <!-- kodování hesla pomoci hashu sha1 \"".sha1($_POST["pass"])."\" \"".hashovani($_POST["pass"])."\" --> |
||
Camo Profil |
#2 · Zasláno: 19. 2. 2013, 20:15:57
Čo myslíš pod tým, že podmienky nefungujú? Kedy nefungujú? A aká chyba sa ti zobrazuje?
PS: Dúfam, že to do tej DB neposielaš tak ako si napísal. Bez ošetrenia... |
||
Kubo2 Profil |
#3 · Zasláno: 19. 2. 2013, 23:36:46
jou222:
Ty si teda rozum :D hneď na začiatku v podmienke máš chybu: if ((strlen ($_POST["user_reg"])<31) && strlen ($_POST["user_reg"])>2) { // ... if ((strlen ($_POST["pass_reg"])<31) && strlen ($_POST["pass_reg"])>5) { // a tu tiež a hneď v ďaľšej podmienke znova. načo to tam preboha dávaš? |
||
Someone Profil |
Kubo2:
Navíc je tam sice má, ale to nezapříčiňuje daný problém. jou222: 1) Piš čitelnější kód a snaž se dodržovat nějaké coding standars, chyby se poté budou lépe odhalovat. ad 1) například if(isset($_POST['jmeno'])){ if(isset($_POST['heslo'])){ echo "Ahoj"; } } by se dalo zapsat mnohem přehledněji: (při takto krátkém kódu to ani moc nehraje roli a zabírá to zbytečně moc místa, ale až toho bude víc, tak se to projeví) if (isset($_POST['jmeno'])) if (isset($_POST['heslo'])) { echo 'Ahoj'; } } 3) když při INSERTU vypisuješ názvy sloupců do kterých budeš zapisovat, tak místo uvedení sloupce id a následného zapsání NULL do hodnoty ho můžeš prostě vynechat. 4) nepřesměrovávej pomocí meta tagu, ale pomocí php funkce Header 5) přijde mi zbytečné kontrolovat délku hesla nebo jména a zároveň to jestli byly odeslané. Stačí kontrolvoat tu délku, protože není-li heslo odeslané, dálka bude 0 a nesplní se podmínka o délce hesla. 6) místo uvozovek (") používej v SQL příkazu spíš apostrofy (') 7) V takových případech je nejlepší si zvolit nějaký postup analýzy, kterým se dopátráš toho kde je chyba. Důležité je to, co se po odeslání formuláře vypíše. Vypíše-li se "chyba", tak je to jasné. Nesplnila se podmínka if($registrace) a z toho dojdeme k tomu, že je chyba někde v SQL dotazu. Ten výstup je asi takové klíčové vodítko k tomu, kde ta chyba vlastně nastala. 8) To je asi vše, názorná ukázka toho, že ten kód může vypadat i docela přehledně: <?php // byl formulář odeslán? if (isset($_POST["odeslani_reg"])) { // je jméno dlouhé 3 - 30 znaků? if (strlen($_POST["user_reg"]<31) && strlen($_POST["user_reg"])>2) { // je heslo dlouhé 6-30 znaků? if (strlen($_POST["pass_reg"])<31 && strlen($_POST["pass_reg"])>5) { // byl vyplněn email? if (!empty($_POST["mail_reg"])){ // všechny podmínky splněny: // hodnoty je třeba projet escapovací funkcí mysql_real_Escape_string() $user = $_POST["user_reg"]; $heslo = $_POST["pass_reg"]; $email = $_POST["mail_reg"]; $jmeno = $_POST['jmeno_reg']; $prijmeni = $_POST['prijmeni_reg']; // SQL příkaz do DB $registrace = mysql_query(" INSERT INTO uzivatele (user,pass,mail,jmeno,prijmeni) VALUES ( '" . $user . "', '" . hashovani($heslo) . "', '" . $email . "', '" . $jmeno . "', '" . $prijmeni . "' ) "); // pokud proběhl sql příkaz v pořádku, přesměrujeme if($registrace) { Header("Location: index.php?stranka=login"); exit(); } else { echo 'chyba'; } } else { echo "Není vyplněn E-mail!"; } } else { echo "Heslo jméno musí obsahovat 6 - 30 znaků!"; } } else { echo "Uživatelelské jméno musí obsahovat 3 - 30 znaků!"; } } |
||
Časová prodleva: 12 let
|
0