Autor | Zpráva | ||
---|---|---|---|
Rico Profil |
#1 · Zasláno: 26. 12. 2011, 00:38:22
Ahoj, mám menší problém s antispamem, co jsem si napsal. Není jenom proti botům, spíše proti lidem...
Tohle je kód ( je trochu delší, protože pracuje s db a stylama ): <?php $text = htmlspecialchars(@$_POST["text"]); $email = htmlspecialchars(@$_POST["email"]); $akce = @$_POST["formular"]; $odpoved = @$_POST["napis_vysledek"]; $soucet = @$_POST["soucet"]; $cislo1 = rand(1, 9); $cislo2 = rand(1, 9); ?> <form action="index.php?p=03&al=03" method="post" class="form"> <label for="e_mail">E-mail:</label> <input name="email" type="text" id="e_mail" style="margin-right: 150px;" class="input" value=""> <br /> <label for="text" style="margin-right: 312px;">Vzkaz:</label> <br /> <textarea name="text" wrap="off" cols="50" rows="5" class="textarea"> </textarea> <br /> <label for="odpoved"><?php echo "".$cislo1." + ".$cislo2." = "; ?></label> <input type="text" id="odpoved" name="napis_vysledek" class="number"> <input type="hidden" value="<?php echo($cislo1 + $cislo2); ?>" name="soucet" class="input"> <input type="hidden" value="antispam" name="formular" class="input"> <input name="send" type="submit" style="margin-left: 208px;" value="Odeslat" class="button"> </form> <?php include "./config.php"; mysql_connect ($host, $user, $pass); mysql_select_db ($db); mysql_query("SET NAMES 'utf8'"); ?> <?php if ($akce=="") { echo ""; } elseif ($akce!="" and $odpoved == $soucet) { if ($email=="") { echo " <div class='error_warning'> Nezadal jste e-mail a proto nebyl vzkaz uložen. <br /> <div class='error_solution'> Řešení problému: <span> Zadejte svůj e-mail. </span> </div> </div> "; } elseif ($email!="") { mysql_query("INSERT INTO `vzkaznik` (`datum`,`email`, `text`) VALUES (NOW(),'".mysql_real_escape_string($email)."','".mysql_real_escape_string($text)."')"); echo " <div class='error_successful'> Vzkaz byl uložen <br /> </div> "; unset ($_POST["soucet"]); } } else { echo " <div class='error_failed'> Nesouhlasí antispamová odpověď <br /> <div class='error_solution'> Řešení problému: <span> Zadejte ji správně :-) </span> </div> </div> "; } ?> Problém je takový, že když správně vyplním formulář, odešlu ( z db se mi pak vzkaz vypíše pod formulářem ) a začnu stránku aktualizovat, tak se mi začne "spamovat" ten vzkaz, který jsem napsal. I přes to, že se změní proměnné, které v podmínce porovnávám. Tak jsem to zkoušel při úspěšném přidáním, vynulovat.. Nejdříve takto $odpoved==""; pak přes unset, ale pořád stejný problém..
Už nevím co s tím dál, nechci žádné složité obrázkové antispamy, prostě jen takovýto jednoduchý součtový. Předem díky |
||
BuGeR Profil |
#2 · Zasláno: 26. 12. 2011, 01:24:46 · Upravil/a: BuGeR
Ty vygenerované hodnoty sečteš totíž hned ve formuláři, a jakmile ho odešleš, a poté aktualizuješ tak se ti nové čísla nevygenerujou znovu, ale zůstanou stejná - z toho POST.
Po přidání řádku do databáze (v tvém kódu řádek 57) přesměruj uživatele (pomocí header() ) znovu na stránku z formulářem.
Pokud to chceš mít i s tím textem "Vzkaz byl uložen", tak použij $_GET - přesměruješ uživatele znovu na formulář, a za adresu přidáš např. ?pridano=ano, a na formuláři pomocí isset() zkontroluješ zda ten GET existuje, pokud ano, vypíšeš text.
Mimochodem, to obcházení chyb přes zavináče je pěkná prasárna. Použij funkci isset() .
|
||
Časová prodleva: 12 let
|
0