Eigen anti spam maken..
Scythen - 19/01/2007 19:55
PHP gevorderde
Ik zou graag een eigen anti-spam willen maken, Captcha is me iets te moeilijk, dadelijk zal je begrijpen waarom:P. Ik wou dus eigenlijk een array maken, met daarin sommen. Bijv. $som1=4+5, etc. Maar ik heb al een beetje geprobeerd, maar het lukt niet.. ik begrijp niet hoe je ze erin moet doen, en hoe je ze eruit moet halen.. kan iemand mij helpen? En als het goed is moet ik rand(); gebruiken.. toch?
38 antwoorden
Gesponsorde links
Stijn - 19/01/2007 20:07
PHP expert
Ik gebruik ook zoiets bij contact formulieren. Eigenlijk is zo'n som ding enkel voor bots tegen te gaan. Anti-spam kan je doen met sessie of cookie. Maar voor zo'n som moet je het volgende doen (vereenvoudigde code:
<input type="hidden" name="som1" value="<?php echo rand(0,10); ?>">
<input type="hidden" name="som2" value="<?php echo rand(0,10); ?>">
<input type="text" name="som">
<? //php
if( $_POST['som'] == $_POST['som1'] + $_POST['som2'] ) {
echo "de som is verkeerd!";
} else {
//verstuur mail
echo "correct!";
}
?>
<input type="hidden" name="som1" value="
<?php echo rand ( 0 , 10 ) ; ?> ">
<input type="hidden" name="som2" value="
<?php echo rand ( 0 , 10 ) ; ?> ">
<input type="text" name="som">
<? //php
if ( $_POST [ 'som' ] == $_POST [ 'som1' ] + $_POST [ 'som2' ] ) {
echo "de som is verkeerd!" ; } else {
//verstuur mail
}
?>
stijn
Scythen - 19/01/2007 20:11
PHP gevorderde
En, wat zijn precies die inputs? Moet ik een maken van som: <input type="text" name ="som1"> en dat voor 2 en 3 ook of.. ?
webstab - 19/01/2007 20:17
PHP ver gevorderde
Zo kan je het doen, maar ik denk dat de "spambot" dat wel zal kunnen oplossen.
Zeker als het gewoon in de broncode staat.
som1,som2 zijn hidden fields en "ziet" de gebruiker niet (tenzij in broncode)
som is hetgeen wat hij moet invullen
timo - 19/01/2007 20:23
PHP ver gevorderde
maar als ik mijn spambot file_get_contents() laat doen en a/d hand daarvan mijn POST gegevens opmaak, dan zie ik 2 hidden inputs met iets wat ik in moet vullen dus dan geef ik zo de som ervan mee..
Scythen - 19/01/2007 20:23 (laatste wijziging 19/01/2007 20:23)
PHP gevorderde
Ik heb even zitten knutselen ik heb dit nu:
<?
$rand1 = rand(0,10);
$rand2 = rand(0,20);
$som = $rand1 + $rand2;
echo "".$rand1." + ".$rand2."";
?>
<?
$som = $rand1 + $rand2 ;
echo "" . $rand1 . " + " . $rand2 . "" ;
?>
Dat is mijn 'verify' dan, dat is x + x, daarna komt html input met antwoord:
maar hoe ga ik verder met de verificatie in de php..
Kr4nKz1n - 19/01/2007 20:25 (laatste wijziging 19/01/2007 20:30)
Onbekend
Als je een echo begint en/of eindigt hoef je geen "". en/of ."" te typen.
<?
echo $rand1." + ".$rand2;
<?
echo $rand1 . " + " . $rand2 ;
-Edit-
Ik zou het zo doen:
<?
$rand = array(rand(0,10), rand(0,20));
echo $rand[0]." + ".$rand[1]." = ".($rand[0] + $rand[1]);
<?
echo $rand [ 0 ] . " + " . $rand [ 1 ] . " = " . ( $rand [ 0 ] + $rand [ 1 ] ) ;
Geen onnodige variabelen etc.
Scythen - 19/01/2007 20:31
PHP gevorderde
Dankjewel, ziet er beter uit ja. En nu de verificatie in mijn script dan.. misschien dat nog ff samen doen?:)
Kr4nKz1n - 19/01/2007 20:35
Onbekend
Dit moet je dus niet met HIDDEN fields doen.
1: Opslaan in de DB en ophalen via IP,
2: Een session of cookie aanmaken met de waardes erin en deze controleren,
Scythen - 19/01/2007 20:38
PHP gevorderde
Kr4nKz1n, ik denk niet dat je begrijpt waar ik op doel...
het is gewoon een simpel sommetje, waarin je het antwoord invullen moet in een input type="text" .. en dan moet je het controleren, of dat klopt met de opgegeven som.. maar dat weet ik niet hoe dat moet.
Kr4nKz1n - 19/01/2007 20:42
Onbekend
Ja dit doe je om BOT`s tegen te gaan toch? Zodat de actie niet 100x wordt uitgevoerd.
Dat bedoel ik ook
<?php
session_start();
if($_SERVER['REQUEST_METHOD'] == "POST")
{
if($_POST['answer'] == ($_SESSION['int1'] + $_SESSION['int2']))
echo "Goed";
else
echo "Fout";
}
else
{
$rand = array(rand(0,10), rand(0,20));
$_SESSION['int1'] = $rand[0];
$_SESSION['int2'] = $rand[1];
echo "<form method=\"post\">
".$rand[0]." + ".$rand[1]."
<input type=\"text\" name=\"answer\" /><br />
<input type=\"submit\" value=\"Register\" />
</form>";
}
?>
<?php
if ( $_SERVER [ 'REQUEST_METHOD' ] == "POST" )
{
if ( $_POST [ 'answer' ] == ( $_SESSION [ 'int1' ] + $_SESSION [ 'int2' ] ) )
else
}
else
{
$_SESSION [ 'int1' ] = $rand [ 0 ] ;
$_SESSION [ 'int2' ] = $rand [ 1 ] ;
echo "<form method=\" post\" > " . $rand [ 0 ] . " + " . $rand [ 1 ] . "
<input type=\" text\" name=\" answer\" /><br />
<input type=\" submit\" value=\" Register\" />
</form>" ;
}
?>
Al getest.
Scythen - 19/01/2007 20:44
PHP gevorderde
Is het goed als ik jouw ff mijn script geef? Want dit erin verwerken gaat toch echt boven mijn kunnen...
-> http://www.plaatscode.be/3883 /
Scythen - 19/01/2007 20:51
PHP gevorderde
Ben een echte perfectionist hoor, maar vind het goed doen beter dan netjes doen.. als het maar af komt, dan kan ik het nog wel ordenen.
Kr4nKz1n - 19/01/2007 20:52
Onbekend
Hoezo?
Gewoon gelijk ordenen.
Geen gezeik achteraf.
Scythen - 19/01/2007 20:54
PHP gevorderde
Het werkt niet hoor Krankzin, als ik op submit druk gebeurt er niks..
Kr4nKz1n - 19/01/2007 21:05
Onbekend
Gebruik even allemaal quotes " << bij HTML.
Anders zou ik het niet weten.
Of verander
$_SERVER['REQUEST_METHOD'] == "POST"
in
IsSet($_POST['post'])
zoals je het had.
Kr4nKz1n - 19/01/2007 21:07
Onbekend
stijn1989, wat lach je? Dat is toch ook de reden waarom we dit doen?
Scythen - 19/01/2007 21:08
PHP gevorderde
Kan iemand me helpen, want dit schiet namelijk niet op.
Scythen - 19/01/2007 21:15
PHP gevorderde
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at d:\easyphp1-8\www\index.php:6) in d:\easyphp1-8\www\toevoegen.php on line 3
Krijgen we dat weer...
Kr4nKz1n - 19/01/2007 21:16
Onbekend
ik gebruik nooit sessions, dus kweenie of je ob_start en session_start tegelijk mag gebruiken.
Scythen - 19/01/2007 21:19
PHP gevorderde
Grappig zeg, nu laat die gwoon t uitkomst van de som zien.. lol
Kr4nKz1n - 19/01/2007 21:20
Onbekend
Dan haal je dat toch weg.
Scythen - 19/01/2007 21:21
PHP gevorderde
wat weg halen? ff duidelijker zijn aub.. want dit is totaal vreemd voor mij.
Kr4nKz1n - 19/01/2007 21:23
Onbekend
Hallo!! Als dit vreemd voor je is ga dan snel even tutorials lezen. gewoon dat gene weg halen wat je niet wilt zien.
(het antworod dus)
Scythen - 19/01/2007 21:25
PHP gevorderde
^_- Erm, normaal gaf hij het niet aan, ik weet niet wat jij hebt toegevoegd.. maar dat klopt dus gewoon niet.
nielsvdwal - 19/01/2007 21:26
PHP gevorderde
Scythen.. wat ben jij serieus een ondankbaar mens zeg.. hij probeert je te helpen en dan ga je hem nog beschuldigen dat hij iets fout heeft gedaan.. serieus goed bezig jij..
Scythen - 19/01/2007 21:28
PHP gevorderde
Ik beschuldig hem nergens van, maar ik zeg alleen dat er iets fout is in de code.. wát? .. dat weet ik ook niet, daarom vraag ik hier om hulp. Maar jij bent er toch ook, jij zegt ook niks.. je staat er bij en kijkt ernaar .. dus.
Gesponsorde links
Dit onderwerp is gesloten .