Mick Durst
Gebruiker
- Lid geworden
- 21 feb 2004
- Berichten
- 205
Beste lezer,
Ik ben niet heel bekend met php maar ik heb een eenvoudige reactie pagina in elkaar kunnen knutselen met wat hulp van google. Nu krijg ik wel eens spam en wil ik dit voorkomen door een captcha element in te voegen.
Ik heb nu dus een bestaand, werkend systeem en los daarvan een captcha systeem. Hoe koppel ik deze twee? Ik hoop dat jullie me kunnen helpen.
Mijn bestaande systeem bestaat uit drie elementen:
- de pagina met de reacties: gastenboek.php
- de pagina met de invoer: schrijf.php
- een leeg .txt bestand die gevuld wordt door bovenstaand.
De nieuwe bestanden die ik heb van captcha zijn:
- captcha.php
- de html met de captcha, die dus uiteindelijk in schrijf.php moet komen (ga ik vanuit)
- de write.php. deze zou dus samen moeten gaan met het stukje "keer terug naar het gastenboek" in schrijf.php
Ik hoop dat jullie mij kunnen helpen want ik zie door de bomen het bos niet meer. Als mij pogingen falen constant door te weinig kennis.
Alvast vriendelijk bedankt voor de reacties.
Ik ben niet heel bekend met php maar ik heb een eenvoudige reactie pagina in elkaar kunnen knutselen met wat hulp van google. Nu krijg ik wel eens spam en wil ik dit voorkomen door een captcha element in te voegen.
Ik heb nu dus een bestaand, werkend systeem en los daarvan een captcha systeem. Hoe koppel ik deze twee? Ik hoop dat jullie me kunnen helpen.
Mijn bestaande systeem bestaat uit drie elementen:
- de pagina met de reacties: gastenboek.php
Code:
<html>
<head>
<style type="text/css">
<!-- BODY {background:none transparent;}-->
</style>
</head>
<body>
<?php
echo '<BR><BR><a href="schrijf.php"><font face=verdana>Laat een reactie achter</font></a><br><br>';
$aBestand = file('gastenboek.txt');
if($aBestand) {
$aBestand = array_reverse($aBestand);
foreach($aBestand as $sBericht) {
$aBericht = explode('|',$sBericht);
echo '<font face=verdana size=2><b>Naam: '.$aBericht[0].'</b></font>';
echo '<font face=verdana size=2><br>'.$aBericht[4].'</font><br><br><hr>';
}
} else {
echo '<font face=verdana>Er zijn nog geen berichten.</font>';
}
?>
</body>
</html>
- de pagina met de invoer: schrijf.php
Code:
<html>
<head>
<style type="text/css">
<!-- BODY {background:none transparent;}-->
</style>
</head>
<body>
<BR><BR><BR>
<?php
$datum = date("d-m-Y / H:i");
$a=$_GET['a'];
if($a=='s'){
$naam=$_POST['naam'];
$bericht=$_POST['bericht'];
$bestand = fopen("gastenboek.txt", "a");
$bericht = str_replace("\n","<br>",$bericht);
$bericht = str_replace("|","",$bericht);
$naam = str_replace("|","",$naam);
fwrite($bestand, "$naam|$email|$datum|$REMOTE_ADDR|$bericht\n");
fclose($bestand);
echo"<font face=verdana size =2>Bedankt voor uw bericht.<br><br><a href=gastenboek.php>Klik hier om terug te keren naar het gastenboek</font></a>";
} else {
echo"<form method=post action=schrijf.php?a=s>";
echo"<font face=verdana size =2>Naam:</font><br><input type=text name=naam><br>";
$value=$_GET['bericht'];
?>
<BR>
<?
echo"<font face=verdana size =2>Bericht:</font><br><textarea cols=55 rows=10 name=bericht id=bericht>$value</textarea><br>";
echo"<input type=submit value='Verstuur'>";
echo"</form>";
}
?>
</body>
</html>
De nieuwe bestanden die ik heb van captcha zijn:
- captcha.php
Code:
<?php
// het random nr. aanmaken en gecodeerd opslaan in php sessie
session_start();
$randomnr = rand(1000, 9999);
$_SESSION['randomnr2'] = md5($randomnr);
// captcha plaatje met nummer maken - afmetingen kun je aanpassen gebruikte font
$im = imagecreatetruecolor(150, 60);
// Kleurenbepaling
$transparant = imagecolorallocate($im, 51, 80, 124);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
// zwarte rechthoek tekenen - afmetingen kun je aanpassen aan verschillende fonts
imagefilledrectangle($im, 0, 0, 300, 50, $black);
// hier - font.ttf' vervangen met de locatie van je eigen font bestand
$font = dirName(__FILE__).'/font/karate/Karate.ttf';
// schaduw toevoegen
imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
// randomnr. toevoegen
imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
// voorkomen dat afbeelding ge-cached wordt
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// plaatje verzenden naar browser
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
- de html met de captcha, die dus uiteindelijk in schrijf.php moet komen (ga ik vanuit)
Code:
<html>
<head>
<title>html formulier met php captcha</title>
</head>
<body>
<form method="post" action="write.php">
<input class="input" type="text" name="norobot">
<img src="captcha.php"><input type="submit" value="Toevoegen">
</form>
</body>
</html>
- de write.php. deze zou dus samen moeten gaan met het stukje "keer terug naar het gastenboek" in schrijf.php
Code:
<?php
session_start();
if (md5($_POST['norobot']) == $_SESSION['randomnr2'])
{ // plaats hier php code voor geslaagde captcha
echo "goedzo - u bent geen robot";
}
else
{ // plaats hier php code voor gefaalde captcha
echo "U heeft de verkeerde code ingetypt";
}
?>
Ik hoop dat jullie mij kunnen helpen want ik zie door de bomen het bos niet meer. Als mij pogingen falen constant door te weinig kennis.
Alvast vriendelijk bedankt voor de reacties.