pakestok
Gebruiker
- Lid geworden
- 16 jun 2007
- Berichten
- 330
Ik heb een php contact script gevonden op internet. en heb het er nu 2 dagen opstaan en heb nu al 73spam mailtjes gekregen. Er zit helemaal niks van een anti-spam ding op het contact script, dus ik dacht ik doe er een captcha op.( voorbeel op www.webco.nl/spam.php )
NU is mijn vraag: hieronder zie je het contact script en het antispam script (captcha)
Kan iemand dit voor mij samenvoegen?
1. het kan dat je eerst naar de captcha gaat en die goed invoert, en dan dat je het contactscript ziet. (maar wel allemaal op dezelfde pagina dus nog steeds op http://www.webco.nl/spam.php
2. Of je vult het contactformulier in en daar onder de captcha en dan op verzenden klikt dat die de captcha ook goedkeurd.
Voor andere oplossingen is ook goed, bovenstaande was mijn idee
:
Contact script:
Captcha:
NU is mijn vraag: hieronder zie je het contact script en het antispam script (captcha)
Kan iemand dit voor mij samenvoegen?
1. het kan dat je eerst naar de captcha gaat en die goed invoert, en dan dat je het contactscript ziet. (maar wel allemaal op dezelfde pagina dus nog steeds op http://www.webco.nl/spam.php
2. Of je vult het contactformulier in en daar onder de captcha en dan op verzenden klikt dat die de captcha ook goedkeurd.
Voor andere oplossingen is ook goed, bovenstaande was mijn idee

Contact script:
PHP:
<?
// geef e-mail adres op van ontvanger
$mail_ontv = "info@webco.nl";
// is niet 100% !!!
function checkmail($mail)
{
$email_host = explode("@", $mail);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
$valid = 1;
return $valid;
}
// als er niet op submit is gedrukt, of als er wel op is gedrukt maar niet alles ingevoerd is
if (!$_POST['submit'] || $_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp']))
{
if ($_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp']))
{
echo "Je bent je naam, e-mail adres, onderwerp of bericht vergeten in te vullen. Ook kan het zijn ";
echo "dat je een verkeerd e-mail adres hebt ingevuld.<p>";
}
// form + tabel
echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<form method=\"POST\" ACTION=\"" . $_SERVER['PHP_SELF'] . "\">";
// naam
echo "<tr><td>Naam:</td></tr>";
echo "<tr><td><input type=\"text\" name=\"naam\" value=\"" . $_POST['naam'] . "\"></td></tr>";
// space
echo "<tr><td> </td></tr>";
// mail
echo "<tr><td>E-mail adres:</td></tr>";
echo "<tr><td><input type=\"text\" name=\"mail\" value=\"" . $_POST['mail'] . "\"></td></tr>";
// space
echo "<tr><td> </td></tr>";
// mail
echo "<tr><td>Onderwerp:</td></tr>";
echo "<tr><td><input type=\"text\" name=\"onderwerp\" value=\"" . $_POST['onderwerp'] . "\"></td></tr>";
// space
echo "<tr><td> </td></tr>";
// mail
echo "<tr><td>Bericht:</td></tr>";
echo "<tr><td><TEXTAREA name=\"msggs\" ROWS=\"6\" COLS=\"45\">" . htmlentities($_POST['msggs']) . "</TEXTAREA></td></tr>";
// space
echo "<tr><td> </td></tr>";
// button
echo "<tr><td> </td></tr>";
echo "<tr><td><input type=\"submit\" name=\"submit\" value=\"Versturen\"></td></tr>";
// sluit form + tabel
echo "</form>";
echo "</table>";
}
// versturen naar
else
{
// set datum
$datum = date("d.m.Y H:i");
// set ip
$ip = $_SERVER['REMOTE_ADDR'];
$inhoud_mail = "===================================================\n";
$inhoud_mail .= "Ingevulde contact formulier\n";
$inhoud_mail .= "===================================================\n\n";
$inhoud_mail .= $_SERVER['SCRIPT_URI'] . "\n\n";
$inhoud_mail .= "Naam: " . $_POST['naam'] . "\n";
$inhoud_mail .= "E-mail adres: " . $_POST['mail'] . "\n";
$inhoud_mail .= "Bericht:\n";
$inhoud_mail .= $_POST['msggs'] . "\n\n";
$inhoud_mail .= "Verstuurd op " . $datum . " via het ip " . $ip . "\n\n";
$inhoud_mail .= "===================================================\n\n";
$headers = "From: " . $_POST['naam'] . " <" . $_POST['mail'] . ">";
$headers = stripslashes($headers);
$headers = str_replace("\n", "", $headers); // Verwijder \n
$headers = str_replace("\r", "", $headers); // Verwijder \r
$headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
$_POST['onderwerp'] = str_replace("\n", "", $_POST['onderwerp']); // Verwijder \n
$_POST['onderwerp'] = str_replace("\r", "", $_POST['onderwerp']); // Verwijder \r
$_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers);
echo "<h1>Je e-mail is verstuurd</h1>";
echo "<p>Bedankt voor het versturen van een e-mail. Je zult zo spoedig mogelijk een antwoord ";
echo "krijgen indien dit nodig is.</p>";
echo "<p>We nemen alles serieus en zullen vertrouwelijk omgaan met de informatie ";
echo "die we binnen krijgen. Je e-mail adres zal nooit aan derden worden verstrekt.</p>";
}
?>
Captcha:
PHP:
<?php
/********************************************************\
* *
* © Herjan Treurniet *
* [email]herjan@treurniet.com[/email] *
* Mag vrij gebruikt worden mits dit blokje blijf staan *
* en je je aan de GNU/GPL-regels houdt *
* *
\********************************************************/
/********************************************************\
* *
* Config *
* *
\********************************************************/
$margin = 15; // Hoe groot moeten de figuurtjes zijn?
$rows = 2; // Hoeveel rijen wil je onder elkaar?
$space = 6; // Hoeveel ruimte wil je tussen de figuurtjes?
$blocks = 6; // Hoeveel figuurtjes wil je per rij?
//Alle waarden zijn in pixels!!
/********************************************************\
* *
* Einde config *
* *
\********************************************************/
if(isset($_GET['image'])) //Kijk of het plaatje gemaakt moet worden
{
header("Content-type: image/gif"); //Vertel de browser dat het een plaatje is
session_start(); //Start de sessie
$space = floor($space/2); //Bereken de ruimte tussen de blokjes
$width = $blocks * ($margin+(2*$space)); //Bereken de totale breedte van het plaatje
$height = $rows * ($margin+(2*$space)); //Bereken de totale hoogte van het plaatje
$img = imagecreatetruecolor($width, $height); //Maak een plaatje
$white = imagecolorallocate($img, 255, 255, 255); //Maak de kleur wit
$colors['red'] = imagecolorallocate($img, 255, 0, 0); //Maak de kleur rood
$colors['blue'] = imagecolorallocate($img, 0, 0, 255); //Maak de kleur blauw
$colors['green'] = imagecolorallocate($img, 0, 200, 0); //Maak de kleur groen
imagefill($img, 0, 0, $white); //Maak het plaatje helemaal wit
$left = 0; //Zet de margin vanaf de linkerkant op 0
$used = array(); //Maak een array waarin het script kan zetten hoe vaak hij elk figuur heeft gebruikt
$row = 0; //Vertel het script dat hij bij de eerste rij is
$rows--; //Haal 1 van het aantal rijen af, want het script begint bij 0 ipv 1
$blocknr = 0; //Vertel het script dat het het 0de blokje van het geheel is
for($i = 0; $i < $blocks; $i++) //Voer voor alle figuurtjes het volgende script uit
{
$number = $_SESSION['captcha']['touse'][$blocknr]; //Haal uit de sessie wat voor figuurtje hij moet maken
switch($number) //Voer wat expressions uit met $number
{
case 0: //Als $number 0 is
imagefilledrectangle($img, ($left+$space), ($row*($margin+(2*$space))+$space), ($left+$margin+$space), ($row*($margin+(2*$space))+$margin+$space), $colors[array_rand($colors)]); //Maak een vierkantje
$used['vierkantjes']++; //Stop in een variabele dat je vierkantje een keer gebruikt hebt
$last = 'vierkantjes'; //Zeg dat het laatstgebruikte figuurtje een vierkantje is
break; //Einde van "Als $number 0 is"
case 1: //Als $number 1 is
imagefilledellipse($img, ($left+$space+floor($margin/2)), ($row*($margin+(2*$space))+$space+floor($margin/2)), $margin, $margin, $colors[array_rand($colors)]); //Maak een rondje
$used['rondjes']++; //Stop in een variabele dat je rondje een keer gebruikt hebt
$last = 'rondjes'; //Zeg dat het laatstgebruikte figuurtje een rondje is
break; //Einde van "Als $number 1 is"
case 2: //Als $number 2 is
$points = array(
($left+$space), ($row*($margin+(2*$space))+$margin+$space),
($left+$space+floor($margin/2)), ($row*($margin+(2*$space))+$space),
($left+$margin+$space), ($row*($margin+(2*$space))+$margin+$space)
); //Stop alle punten voor de driehoek in een array
imagefilledpolygon($img, $points, 3, $colors[array_rand($colors)]); //Maak een driehoekje
$used['driehoekjes']++; //Stop in een variabele dat je driehoekje een keer gebruikt hebt
$last = 'driehoekjes'; //Zeg dat het laatstgebruikte figuurtje een driehoekje is
break; //Einde van "Als $number 2 is"
} //Einde van de expressions voor $number
$left += $margin+(2*$space); //Zet de left-margin van het plaatje omhoog
if($i == ($blocks-1) && $row < $rows) //Als dit het laatste figuurtje van de rij is
{
$i = -1; //Vertel het script dat het het -1de figuurtje is (geen idee waarom het met 0 niet werkt :S)
$row++; //Vertel het script dat hij bij de volgende rij is
$left = 0; //Zet de margin vanaf de linkerkan weer op 0
}
$blocknr++; //Vertel het script dat hij bij het volgende blokje is
}
//print_r($_SESSION);
imagegif($img); //Output de image naar de browser
imagedestroy($img); //Verwijder het plaatje uit het geheugen
exit(); //Stop het script
}
session_start(); //Start de sessie
if($_SERVER['REQUEST_METHOD'] == "POST") //Als je deze pagina opent door te posten
{
$howmany = $_POST['howmany']; //Stop het gegeven antwoord in een variabele
if(!ctype_digit($_POST['howmany'])) //Kijk of het gegeven antwoord wel een getal is
{
echo 'Hee, wel een getal invoeren!!'; //Zoniet, laat het de client weten...
exit(); //...en beëindig het script!
}
$answer = ''.$_SESSION['captcha']['used'][$_SESSION['captcha']['shape']].''; //Stop het goede antwoord als string in een variabele
if($answer == $howmany) //Als het gegeven antwoord gelijk is aan het goede antwoord
{
echo 'Goed, hier is de link naar het contactscript, om spam te voorkomen: [url]http://www.webco.nl/';[/url] //Laat de client weten dat het antwoord goed is
}
else //Als het gegeven antwoord niet gelijk is aan het goede antwoord
{
echo 'Fout<br />
Je zei: '.$howmany.'<br />
Het was: '.$answer; //Laat de client weten dat het antwoord fout is en vertel hem het goede antwoord
}
}
else //Als je deze pagina niet bereikt door te posten
{
unset($_SESSION['captcha']); //Gooi de oude gegevens weg
for($i = 0; $i < $blocks * $rows; $i++) //Voer voor elk figuurtje dit script uit:
{
$_SESSION['captcha']['touse'][$i] = rand(0, 2); //Bepaal welk figuurtje het wordt
switch($_SESSION['captcha']['touse'][$i]) //Voer wat expressions uit met het figuurtje
{
case 0: //Als figuurtje 0 is
$used['vierkantjes']++; //Stop in een variabele dat er een vierkantje is gebruikt
$lastshape = 'vierkantjes'; //Stop in een variabele dat het laatstgebruikte figuurtje een vierkantje is
break; //Einde van "Als figuurtje 0 is"
case 1: //Als figuurtje 1 is
$lastshape = 'rondjes'; //Stop in een variabele dat er een rondje is gebruikt
$used['rondjes']++; //Stop in een variabele dat het laatstgebruikte figuurtje een rondje is
break; //Einde van "Als figuurtje 1 is"
case 2: //Als figuurtje 2 is
$lastshape = 'driehoekjes'; //Stop in een variabele dat er een driehoekje is gebruikt
$used['driehoekjes']++; //Stop in een variabele dat het laatstgebruikte figuurtje een driehoekje is
break; //Einde van "Als figuurtje 2 is"
} //Einde van de expressions voor het figuurtje
if($i == ($blocks * $rows - 1)) //Als dit het laatste blokje is
{
$_SESSION['captcha']['shape'] = $lastshape; //Stop in de sessie wat het laatste figuurtje is
}
}
$_SESSION['captcha']['used'] = $used; //Stop in de sessie hoe vaak elk figuurtje gebruikt is
echo '
<form method="post" action="'.$_SERVER['PHP_SELF'].'">
<img src="'.$_SERVER['PHP_SELF'].'?image" alt="Plaatje" /><br /><br />
Hoeveel '.$_SESSION['captcha']['shape'].' zie je in het plaatje hierboven?
<input type="text" name="howmany" maxlength="5" size="2" /><br /><br />
<input type="submit" value="Volgende">
</form>
'; //Echo het formulier
}
?>
Laatst bewerkt door een moderator: