Ik gebruik voor mijn gastenboek wel gewoon een emailactivatie. Het is simpeler dan een captcha (hou rekening met het feit dat niet iedereen dat begrijpt/kan gebruiken) en zodoende weet ik zeker dat het emailadres correct is als ik wil reageren.
En als iemand iets in het gastenboek zet maar geen geldig emailadres wil opgeven.. tja, dan zal zijn bericht ook niet zoveel voorstellen..
Misschien kan je hier wat uit gebruiken. Dit heb ik een tijdje geleden op dit forum vrij snel in elkaar geknutseld, in dit geval moet de gebruiker een bericht activeren, maar een beheerder moet het bericht eerst accepteren.
<?php
error_reporting(E_ALL);
//Persoonlijke gegevens.
define("naamwebmaster", "Arjan Kapteijn");
define("emailwebmaster", "
[email protected]");
define("locatiebestand", "http://test.i-cey.net/test.php");
//Database gegevens.
$db_host = ''; // je eigen server
$db_user = ''; // je eigen gebruikersnaam
$db_pass = ''; // je eigen password
$db_name = ''; // je eigen database naam
mysql_connect($db_host, $db_user, $db_pass) or die('Er kon geen verbinding met de server worden gemaakt.');
mysql_select_db($db_name) or die('Ik kon de juiste database niet vinden.');
//Functie om random nummers te genereren.
function randomgenerator($aantaltekens)
{
//Eerst maken we 3 arrays met gegevens.
$kleineletters = range('a','z');
$groteletters = range('A','Z');
$cijfers = range(0,9);
//Prop ze bij elkaar en tel ze.
$karakters = array_merge($kleineletters, $groteletters, $cijfers);
$aantal = count($karakters)-1;
$random = null;
//Voor ieder teken dat we willen maken pakken we een random nummertje.
for($i=0; $i < $aantaltekens; $i++) {
$random .= $karakters[mt_rand(0, $aantal)];
}
return $random;
}
//Datum omzetten in iets netters.
function datumomzetten($datum)
{
//We trekken eerst de datum uit elkaar.
$datumarray = explode(" ", $datum);
$dag = $datumarray[0];
$maand = $datumarray[1];
$jaar = $datumarray[2];
$maand_array = array("januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");
//Halen de juiste maand uit de maandenarray.
$maand = $maand_array[$maand - 1];
//Vormen een nieuwe datum en stuur die terug!
$datum = "$dag $maand $jaar";
return $datum;
}
//Versturen van een emailtje
function emailsturen($email, $bericht)
{
$titel = 'Activatie Registratie';
$headers = 'MIME-Version: 1.0'. "\r\n";
$headers .= 'Content-type: text/plain; charset=iso-8859-1'. "\r\n";
$headers .= 'X-Priority: 3'. "\r\n";
$headers .= 'X-MSMail-Priority: Normal'. "\r\n";
$headers .= 'X-Mailer: PHP/'.phpversion().''."\r\n";
$headers .= 'From: '.naamwebmaster.' <'.emailwebmaster.'>'."\r\n";
$verstuur = mail($email, $titel, $bericht, $headers);
if($verstuur)
{
return TRUE;
}else{
return FALSE;
}
}
//De gebruiker moet zijn eigen account activeren
function activeren($email,$activatiecode)
{
$activatiecode = mysql_real_escape_string($activatiecode);
$email = mysql_real_escape_string($email);
$wachtwoord = randomgenerator(8);
$query = "UPDATE gebruikerstabel SET geactiveerd = 'Y', activatiecode = '', wachtwoord = '".sha1($wachtwoord)."' WHERE email = '".$email."' AND activatiecode = '".$activatiecode."' AND geaccepteerd = 'Y'";
$resultaat = mysql_query($query);
if (mysql_affected_rows() == 1)
{
$bericht = "Beste, \r\n \r\nUw account is geactiveerd! U kunt nu inloggen met het volgende wachtwoord:\r\n \r\n".$wachtwoord.".";
$verstuur = emailsturen($email,$bericht);
if($verstuur)
{
echo 'U heeft zojuist uw account succesvol geactiveerd! Uw wachtwoord word naar u toegezonden.';
}
}else{
echo 'Sorry, er gaat iets mis!';
}
}
//Jij als beheerder moet een account eerst accepteren
function accepteren($email,$activatiecode)
{
$activatiecode = mysql_real_escape_string($activatiecode);
$email = mysql_real_escape_string($email);
$activatiecode2 = sha1(randomgenerator(10));
$query = "UPDATE gebruikerstabel SET geaccepteerd = 'Y', activatiecode = '".$activatiecode2."' WHERE email = '".$email."' AND activatiecode = '".$activatiecode."' AND geaccepteerd = 'N'";
$resultaat = mysql_query($query);
if (mysql_affected_rows() == 1)
{
$bericht = "Beste, \r\n \r\nUw account is geaccepteerd!\r\n \r\nDoor de onderstaande link te volgen kunt uwzelf activeren: \r\n \r\n".locatiebestand."?actie=activeren&email=".$email."&activatiecode=".$activatiecode2."";
$verstuur = emailsturen($email,$bericht);
if($verstuur)
{
echo 'U heeft zojuist de account succesvol geaccepteerd!';
}
}else{
echo 'Sorry, er gaat iets mis!';
}
}
if($_SERVER['REQUEST_METHOD'] == "POST")
{
if((!empty($_POST['txtnaam'])) && (!empty($_POST['txtemail'])))
{
$naam = mysql_real_escape_string($_POST['txtnaam']);
$email = mysql_real_escape_string($_POST['txtemail']);
$datum = datumomzetten(date("d m Y"));
$activatiecode = sha1(randomgenerator(10));
$query = "INSERT INTO gebruikerstabel (naam, email, activatiecode) VALUES ('".$naam."', '".$email."', '".$activatiecode."')";
$resultaat = mysql_query($query);
if($resultaat)
{
$bericht = "Beste ".naamwebmaster.", \r\n \r\nOp ".$datum." heeft op jou website ".$naam." (".$email.") zich geregistreerd.\r\n \r\nDoor de onderstaande link te volgen kunt u deze persoon activeren: \r\n \r\n".locatiebestand."?actie=accepteren&email=".$email."&activatiecode=".$activatiecode."";
$verstuur = emailsturen(emailwebmaster,$bericht);
if($verstuur)
{
echo 'Uw account is geregistreerd maar nog niet geactiveerd door de beheerder. Nadat de beheerder uw account geactiveerd heeft krijgt u een emailtje waarin u uw account kunt activeren.';
}
}else{
echo 'Sorry, er gaat hier iets mis!';
echo $query;
}
}else{
echo 'Sorry, ik verwacht wel wat input!';
}
}
if(isset($_GET['actie']))
{
$actie = $_GET['actie'];
$acties = array("activeren","accepteren");
if(in_array($actie, $acties))
{
switch ($actie)
{
case "activeren":
if((isset($_GET['activatiecode'])) && (isset($_GET['email'])))
{
$activatiecode = $_GET['activatiecode'];
$email = $_GET['email'];
activeren($email,$activatiecode);
}else{
echo 'Sorry, maar ik verwacht op ze minst een activatiecode en emailadres!';
}
break;
case "accepteren":
if((isset($_GET['activatiecode'])) && (isset($_GET['email'])))
{
$activatiecode = $_GET['activatiecode'];
$email = $_GET['email'];
accepteren($email,$activatiecode);
}else{
echo 'Sorry, maar ik verwacht op ze minst een activatiecode en emailadres!';
}
break;
}
}else{
echo 'Sorry, dit accepteer ik niet!';
}
}else{
echo '<form method="post" name="formulier" action="'.$_SERVER['PHP_SELF'].'">';
echo '<p><label for="txtnaam">Naam:</label><br><input type="text" title="Vul hier uw naam in." name="txtnaam" size="40"></p>';
echo '<p><label for="txtemail">Email:</label><br><input type="text" title="Vul hier uw naam in." name="txtemail" size="40"></p>';
echo '<p><label title="Verstuur uw bericht."><input type="submit" value="Verstuur" name="verstuur"></p>';
}
?>