Autor Zpráva
10messi10
Profil *
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 *
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 *
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']."')");
    }
}
Tak to i tak pošle ten nick :D
Monkeys
Profil *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: