| 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: 12 let
|
|||
0