Autor | Zpráva | ||
---|---|---|---|
10messi10 Profil * |
#1 · Zasláno: 24. 11. 2014, 19:51:08
Zdravím chtěl bych vás poprosit o radu, zde mám formulář na registraci do jedné soutěže, ovšem naskytl se mi problém. Jakmile odešlu registraci tak vše proběhne tak jak má, pokud se registruji po 2. a uvedu stejný email který jsem uvedl v 1. registraci pustí mě to dál a tím to odešle data do databáze i když by to poslat nemělo.
if (isset($_GET['register'])) { if (isset($_POST['_register'])) { $result = mysql_query("SELECT * FROM registrace WHERE nick ='".$_POST['nick']."'"); $result2 = mysql_fetch_array($result); $pocet = mysql_result(mysql_query("SELECT COUNT(*) FROM ceny WHERE pouzita='1'"), 0); $pocet2 = mysql_result(mysql_query("SELECT COUNT(*) FROM ceny"), 0); if (empty($_POST['nick']) || empty($_POST['email'])) { echo "<div class='chyba'>"; echo "<center>Vyplň povinné údaje!</center>"; echo "</div>"; } else if (!preg_check("/^[-0-9A-Z_\.]{1,50}@([-0-9A-Z_\.]+\.){1,50}([0-9A-Z]){2,4}$/i", $_POST['email'])) { echo "<div class='chyba'>"; echo "<center>Email neexistuje</center>"; echo "</div>"; } else if ($result2['email'] == $_POST['email']) { echo "<div class='chyba'>"; echo "<center>Tento email je již zaregistrován</center>"; echo "</div>"; } else if ($result2['nick'] == $_POST['nick']) { echo "<div class='chyba'>"; echo "<center>tento nick je již zaregistrován</center>"; echo "</div>"; } else if ($_SERVER['REMOTE_ADDR'] == $result2['ip']) { echo "<div class='chyba'>"; echo "<center>Z této IP adresy jsi se již registroval.</center>"; echo "</div>"; } else if($pocet == $pocet2) { echo "<div class='chyba'>"; echo "<center>Všechny výhry byly rozdány, byl jsi moc pomaly, již neni možné se přihlásit o volné klíče.</center>"; echo "</div>"; } else { echo "<div class='registered'>"; echo "<center>Tvá registrace je téměř u konce na tvůj email, ".$_POST['email'].", byl odeslán klíč.<BR> Tento klíč slouží k ověření výhry, výhra se přidělí automaticky. Pokud už nejsou dostupné výhry, tak bohužel, byl jsi moc pomaly. :D"; echo "<BR><a href='?activate'>Klíč již mám a chci ho aktivovat!</a></center>"; echo "</div>"; mysql_query("INSERT INTO registrace(nick, email, klic, pouzit, ip) VALUES('".$_POST['nick']."', '".$_POST['email']."', '".$key."', '0','".$_SERVER['REMOTE_ADDR']."')"); } } echo "<form method='POST'>"; echo "<table width='30%' align='center'>"; echo "<tr>"; echo "<td>Uživatelské jméno</td><td><input type='text' name='nick' placeholder='Herní nick'></td>"; echo "</tr>"; echo "<tr>"; echo "<td>Email</td><td><input type='text' name='email' placeholder='Emailová adresa'></td>"; echo "</tr>"; echo "<tr>"; echo "<td><input type='submit' name='_register' value='Registrovat'></td>"; echo "</tr>"; echo "</table>"; echo "</form>"; } Další věc na kterou bych se chtěl zeptat je že pokud cci aktivovat klíč, tak mi to na stránce píše toto: Notice: Undefined index: klic in index.php on line 110 Na řádku 110 je toto... $result = mysql_query("SELECT * FROM registrace WHERE klic='".$_POST['klic']."'"); Předem děkuji za pomoc. |
||
Monkeys Profil * |
#2 · Zasláno: 24. 11. 2014, 20:11:17
10messi10:
Pred zapisanim udajov do tabulky skontroluj ci uz email neexistuje napr cez mysql_num_rows. Tato funcia vracia pole a teda ty to mozes testovat naprikald cez count: priklad: $row = "dotaz do databazi s mysql_num_rows" if(count($row) > 0){ // zastavit registraciu error hlaska }else{ //zapisat a zaregistrovat { M. |
||
lionel messi Profil |
10messi10:
> Další věc na kterou bych se chtěl zeptat je že pokud cci aktivovat klíč, tak mi to na stránce píše toto: > Notice: Undefined index: klic in index.php on line 110 Znamená to, že premenná $_POST['klic'] nebola inicializovaná, napr. ti niekto vo formulári nevyplnil pole s atribútom name="klic" .
Monkeys: > Pred zapisanim udajov do tabulky skontroluj ci uz email neexistuje napr cez mysql_num_rows. > Tato funcia vracia pole a teda ty to mozes testovat naprikald cez count: Nápad je to dobrý, ale funkcia mysql_num_rows podľa dokumentácie vracia int, rozhodne nie pole, čiže použitie funkcie count nebude fungovať. Radšej takto: $result = mysql_query("SELECT email FROM registrace WHERE email = '". mysql_real_escape_string($_POST['email']) ."'"); $row = mysql_num_rows($result); if($row) { //zastaviť registráciu } else { //pokračovať a zaregistrovať } |
||
10messi10 Profil * |
#4 · Zasláno: 24. 11. 2014, 20:56:10
Funguje to krásně, akorát když jsem udělal tohle
$result = mysql_query("SELECT * FROM registrace WHERE email = '". mysql_real_escape_string($_POST['email']) ."' and nick = '". mysql_real_escape_string($_POST['nick']) ."'"); $row = mysql_num_rows($result); if (empty($_POST['nick']) || empty($_POST['email'])) { echo "<div class='chyba'>"; echo "<center>Vyplň povinné údaje!</center>"; echo "</div>"; } else if($row) { echo "<div class='chyba'>"; echo "<center>Tyto informace jsou již zaregistrovány</center>"; echo "</div>"; } else if (!preg_check("/^[-0-9A-Z_\.]{1,50}@([-0-9A-Z_\.]+\.){1,50}([0-9A-Z]){2,4}$/i", $_POST['email'])) { echo "<div class='chyba'>"; echo "<center>Email neexistuje</center>"; echo "</div>"; } else if($pocet == $pocet2) { echo "<div class='chyba'>"; echo "<center>Všechny výhry byly rozdány, byl jsi moc pomaly, již neni možné se přihlásit o volné klíče.</center>"; echo "</div>"; } else { echo "<div class='registered'>"; echo "<center>Tvá registrace je téměř u konce na tvůj email, ".$_POST['email'].", byl odeslán klíč.<BR> Tento klíč slouží k ověření výhry, výhra se přidělí automaticky. Pokud už nejsou dostupné výhry, tak bohužel, byl jsi moc pomaly. :D"; echo "<BR><a href='?activate'>Klíč již mám a chci ho aktivovat!</a></center>"; echo "</div>"; mysql_query("INSERT INTO registrace(nick, email, klic, pouzit, ip) VALUES('".$_POST['nick']."', '".$_POST['email']."', '".$key."', '0','".$_SERVER['REMOTE_ADDR']."')"); } } |
||
Monkeys Profil * |
#5 · Zasláno: 24. 11. 2014, 21:09:21
10messi10:
Ano prepac mas pravdu, ja to mam riesene inac tak preto ma to zmylilo ... Najprv ries duplicitu zaznamu az potom drobnosti okolo toho ci je vyplnene nick a email skus takto: pred to vsetko daj jeden if if(mysql_num_rows($result) == 0) { //tvoj kod pre korekciu }else{ // chyba duplicita } M. |
||
Časová prodleva: 9 let
|
0