Autor Zpráva
wimstr
Profil
Ahoj
No, už delší dobu řeším jeden problém, která se nazívá "Antispam", pokus o prohledání netu dopadl neúspěšně, a tak se obracím
na vás... potřeboval bych vytvořit pokudmožno "jednoduchý" antispam pro Knihu návštěv.... (pokud možno nic s CAPTCHA) děkuji
BaTeCzKo
Profil
Antispam založený na počítání příkladu typu tři plus dva....

<?php

/*---kontrola zadani---*/
if(isset($_POST['vysledekr'])){

/*nacteni a zpacovani promennych*/
$vysledekr=$_POST['vysledekr'];
$vysledekr=strrev($vysledekr);
$vysledekr=floatval($vysledekr);

$vysledeko=$_POST['vysledeko'];
$vysledeko=strrev($vysledeko);
$vysledeko=floatval($vysledeko);

$vysledekr=$vysledekr/$vysledeko;
$vysledek=$_POST['vysledek'];
$vylsedek=floatval($vysledek);

/*kontrola a presmerovani*/
if($vysledek==$vysledekr){

/*----------------------------akce pri bezchybnem vysledku*/

}
else{
$bad=true;
}
}

/*---vygenerovani prikladu---*/
$prepis_nazvu=array("1"=>"jedna", "2"=>"dva", "3"=>"tři", "4"=>"čtyři", "5"=>"pět", "6"=>"šest", "7"=>"sedm", "8"=>"osm", "9"=>"devět", "10"=>"deset", "+"=>"plus");

/*vygenerovani clenu a vysledku*/
$prvniclen=mt_rand(1, 10);
$druhyclen=mt_rand(1, 10);
$offset=mt_rand(2,15);
$vysledek=strrev($offset*($prvniclen+$druhyclen));
$offset=strrev($offset);

/*sestaveni*/
$priklad=$prvniclen." + ".$druhyclen;
$priklad=strtr($priklad, $prepis_nazvu);

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title>Registrace - kontrola</title>
</head>

<body>

<?php
if($bad==true){
echo "<p style='color:red;font-weight:bold;>Chybný výsledek!</p>";
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="vysledekr" value="<?php echo $vysledek; ?>">
<input type="hidden" name="vysledeko" value="<?php echo $offset; ?>">
Výsledek příkladu <u><?php echo $priklad; ?></u> je <input type="text" size="4" name="vysledek"><br><br>
<input type="submit" value="Pokračovat &gt;">
</form>



</body>
</html>

wimstr
Profil
Funguje to, ale i když to zadám nebo ne, tak se to odešle :D
BaTeCzKo
Profil
Není možné - musíš tam samozřejmě zadat nějakou akci v případě, že je výsledek správný. V případě chybného zadání se zobrazuje hláška o chybném výsledku. Můžeš si to vyzkoušet zde:

http://webman.profitux.cz/forum/registrace.php
wimstr
Profil
echo "<p style='color:red;font-weight:bold;>Chybný výsledek!</p>"; je tu chyba (ne že by o to šlo.. jen tak)

- jj to sem pochopil, ale prostě se to odešle stejně.... neukončí to ten script
BaTeCzKo
Profil
Ono se to taky kontroluje až po odeslání, žéé?

/*kontrola a presmerovani*/

if($vysledek==$vysledekr){



/*----------------------------akce pri bezchybnem vysledku*/



}

else{

$bad=true;

}
wimstr
Profil
pak je ta kontrola víceméně na nic
wimstr
Profil
trošku jsem si to upravil a vida... zdá se že funguje.... btw: dík
BaTeCzKo
Profil
wimstr
Cože?! Ta kontrola je k tomu, aby zabránila spambotům odesílat příspěvky. A když někdo (třeba spambot) zadá výsledek blbě, tak se tam snad žádný příspěvek nepřidá. Jestli vám jde o javascriptovou kontrolu ještě před odesláním, tak je to dost nepraktické - ale to neznamená, že to nejde udělat (ale je to zbytečné). Skript funguje tak, že v případě, když je zadán chybný výsledek, prostě dál nepokračuje a jenom zobrazí hlášku. A když je ale výsledek správný, tak skript pokračuje. Pokuď tedy není nikdo schopen to pochopit, ať si toho skriptu raději nevšímá... :D
BaTeCzKo
Profil
wimstr
jj
wimstr
Profil
Boužel se tato metoda neosvědčila....
Hooonza
Profil *
Spam mívá spoustu odkazů. Co kontrolovat jejich počet a při nadměrném množství zprávu zahodit? K inspir. viz http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=37 086.

A jinak - http://diskuse.jakpsatweb.cz/index.php?action=search , hledat spam, antispam, řeší se to tu opakovaně, je tam hodně odkazů, více či méně účinných nápadů:-)
BaTeCzKo
Profil
wimstr
Samozřejmě já tento skript nepoužívám jako jedinou ochranu před spamem. Nejlepší je kombinace více řešení.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0