Autor | Zpráva | ||
---|---|---|---|
meluzin Profil * |
#1 · Zasláno: 23. 11. 2013, 18:33:40
Ahoj, při registraci mám podmínky, aby heslo neblo moc krátké atd... Přidal jsem podmínku aby se nemohl registrovat jeden nick dvakrát a od té chvíle mi to všechny hlášky vypisuje dvakrát. Nevíte, kde je chyba?
HTML: <? if(IsSet($_POST['registrace'])){ $jmeno = $_POST['jmeno']; $mail = $_POST['mail']; $pass1 = $_POST['pass1']; $pass2 = $_POST['pass2']; $pass = $pass1; $md5pass = md5($pass); include "reg.php"; } ?> <p> <form action="index.php?p=registrace" method="post"> <input type="text" name="jmeno" maxlength="32"/> Nick (minimálně 4 znaky a maximálně 32 znaků)<br /> <input type="text" name="mail" maxlength="64"/> E-mail<br /> <input type="password" name="pass1" maxlength="12"/> Heslo (minimálně 5 znaků a maximálně 12 znaků) <br /> <input type="password" name="pass2" maxlength="12"/> Heslo znovu <br /> <input type="submit" name="registrace" value=" Pošli "/> </form> </p> reg.php: <? $vyber = mysqli_query($con,"SELECT * FROM uzivatele"); while($vypis = mysqli_fetch_array($vyber)) { $username = $vypis['username']; if (empty($jmeno) OR empty($mail) OR empty($pass1) OR empty($pass2)){ echo "<p><span class=\"red\">Nebyly vyplněny všechny údaje!</span></p>"; } elseif ($pass1!=$pass2){ echo "<p><span class=\"red\">Zadaná hesla se neshodují!</span></p>"; } elseif (strlen($pass)>12){ echo "<p><span class=\"red\">Heslo je moc dlouhé!</span></p>"; } elseif (strlen($pass)<5){ echo "<p><span class=\"red\">Heslo je moc krátké!</span></p>"; } elseif ($jmeno==$username){ echo "<p><span class=\"red\">Zadané jméno je již používáno!</span></p>"; } elseif (strlen($jmeno)>32){ echo "<p><span class=\"red\">Jméno je moc dlouhé!</span></p>"; } elseif (strlen($jmeno)<4){ echo "<p><span class=\"red\">Jméno je moc krátké!</span></p>"; } else { $mysqli = new Mysqli("aaa","aaa","aaa","aaa"); $prepare = $mysqli->prepare("INSERT INTO `uzivatele`(`username`,`password`,`mail`) VALUES (?,?,?)"); $prepare->bind_param("sss", $jmeno, $md5pass, $mail); $prepare->execute(); $mysqli->close(); echo "<p><span class=\"green\">Uživatel byl přidán.</span></p>"; } } ?> |
||
Alphard Profil |
#2 · Zasláno: 23. 11. 2013, 18:40:16
Nemáte v databázi právě dva uživatele? Ty hlášky to vypíší třeba 100x, když tam bude víc uživatelů.
Ten dotaz kontrolující unikátnost jména si dejte jen do jedné podmínky a použijte where klauzuli na úrovni SQL.
|
||
meluzin Profil * |
#3 · Zasláno: 23. 11. 2013, 18:41:41 · Upravil/a: meluzin
No ono to vypisuje dvakrát všechno. Když proběhne registrace v pořádku tak se to také vypíše dvakrát.
Tak ono sTak ono se mi to píše za každého uživatele v DB. Když jsou dva tak dvakrát atd. Poradil by mi prosím někdo jak mám tedy zkontrolovat, jestli jméno nění již v DB a vyhnul se tomuto problému? |
||
okolojsoucí Profil * |
#4 · Zasláno: 23. 11. 2013, 19:29:50
Já bych to znal přes dibi, ale přes čisté PHPko to bude dost podobné.
$uzivatel = dibi::query('SELECT `id` FROM [uzivatele] WHERE username = %s', $username); if(count($uzivatel) == 0){ echo "Uživatel neexistuje"; // Dokončíme registraci }else{ echo "Uživatel již existuje, zvolte jiné jméno"; } |
||
meluzin Profil * |
#5 · Zasláno: 24. 11. 2013, 10:53:37
Tak jsem to zkusil předělat přes dibi, ale teď mi to nefunguje vůbec.
<? $vyber = mysqli_query($con,"SELECT * FROM uzivatele"); while($vypis = mysqli_fetch_array($vyber)) { $username = $vypis['username']; $uzivatel = dibi::query('SELECT `id` FROM [uzivatele] WHERE username = %s', $username); if(count($uzivatel) == 0){ if (empty($jmeno) OR empty($mail) OR empty($pass1) OR empty($pass2)){ echo "<p><span class=\"red\">Nebyly vyplněny všechny údaje!</span></p>"; } elseif ($pass1!=$pass2){ echo "<p><span class=\"red\">Zadaná hesla se neshodují!</span></p>"; } elseif (strlen($pass)>12){ echo "<p><span class=\"red\">Heslo je moc dlouhé!</span></p>"; } elseif (strlen($pass)<5){ echo "<p><span class=\"red\">Heslo je moc krátké!</span></p>"; } elseif ($jmeno==$username){ echo "<p><span class=\"red\">Zadané jméno je již používáno!</span></p>"; } elseif (strlen($jmeno)>32){ echo "<p><span class=\"red\">Jméno je moc dlouhé!</span></p>"; } elseif (strlen($jmeno)<4){ echo "<p><span class=\"red\">Jméno je moc krátké!</span></p>"; } else { $mysqli = new Mysqli("aaa","aaa","aaa","aaa"); $prepare = $mysqli->prepare("INSERT INTO `uzivatele`(`username`,`password`,`mail`) VALUES (?,?,?)"); $prepare->bind_param("sss", $jmeno, $md5pass, $mail); $prepare->execute(); $mysqli->close(); echo "<p><span class=\"green\">Uživatel byl přidán.</span></p>"; } } else{ echo "<p><span class=\"red\">Zadané jméno je již používáno!</span></p>"; } } ?> |
||
Magnus123 Profil |
#6 · Zasláno: 24. 11. 2013, 11:12:35
meluzin:
Proč vlastně procházíš všechny uživatele a teprv v cyklu kontroluješ, zda uživatel vyplnil správně formulář? Prvně zjisti, jestli byl správně vyplněn formulář. Pokud ano, zjisti, jestli uživatel s takovým jménem již neexistuje (např. si spočítej počet záznamů, kde jméno = $_POST["jmeno"]). Pokud takový uživatel neexistuje, vlož nový záznam do DB. |
||
Alphard Profil |
#7 · Zasláno: 24. 11. 2013, 11:23:36
meluzin:
Dibi neřeší problém blbého algoritmu, příčinu jsem vám psal hned v [#2]. Na 31. řádku se nesmyslně znovu připojujete k mysql, když už kvůli selectu na 2. řádku musíte být připojený. Zamyslete se nad kódem víc komplexně. |
||
Časová prodleva: 10 let
|
0