Lid |
|
Ter gelegenheid van een bruiloft ben ik bezig met een simpele 'Save the date' website, waarop de genodigden hun gegevens invullen in een simpel contactformulier. Dit is allemaal gelukt. Echter wil ik het nog een beetje beveiligen. Allereerst wil ik reCAPTCHA toevoegen om te voorkomen dat bots het formulier invullen. Dit is me inmiddels een beetje gelukt, alleen kan ik het formulier nog steeds opsturen zonder reCAPTCHA in te vullen. Kennelijk wordt er eerder verzonden dan gecontroleerd door reCAPTCHA. Volgens mij komt dit omdat de code niet op de goede plaats staat. Hoe los ik dit op? Als leek zie ik dit niet. Hopelijk kunnen jullie me helpen.
Daarnaast wil ik graag een cookie aan de pagina toevoegen, zodat genodigden het formulier niet (per ongeluk) meerdere keren in kunnen vullen. Hoe voeg ik zo'n cookie toe en hoe controleer ik vervolgens op de aanwezigheid ervan? Ik heb hier vandaag al heel veel over gelezen over de functie setcookie() en de superglobal $_COOKIE maar toch kom ik er niet helemaal uit, misschien willen jullie wat voorbeelden plaatsen of concrete suggesties doen. Want ik snap vooral niet goed waar ik de cookie moet aanmaken zodat hij pas aangemaakt wordt nadat het formulier succesvol is verzonden. Ook weet ik niet goed waar ik de controle op een reeds bestaande cookie (en dus een reeds ingevuld formulier) moet uitvoeren.
Dank u! Hieronder mijn script:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
<title>
Mattijs & Willemijn gaan trouwen! - 16 juni 2012
</title>
<meta http-equiv="content-type" content="application/xml; charset=utf-8" />
<meta http-equiv="Author" content="bartcrum.com - Bart Crum" />
<meta name="Language" content="NL" />
<meta name="expires" content="never" />
<meta name="security" content="PUBLIC" />
<meta name="charset" content="ISO-8859-1" />
<meta name="REVISIT-AFTER" content="1 DAY" />
<meta name="distribution" content="Global" />
<meta name="robots" content="ALL,INDEX,FOLLOW" />
<meta name="publisher" content="http://www.bartcrum.com/mattijs&willemijn/" />
<meta name="copyright" content="Copyright ©2012 - www.bartcrum.com" />
<meta name="keywords" content="trouwen, mattijs kaak, willemijn olthoff, 16 juni, 2012, historisch museum, muziek, dans, openingsdans, amsterdam, 020, a'dam, " />
<meta name="description" content="Welkom. Dit is de 'Save the Date' website voor de bruiloft van Mattijs en Willemijn. Ook wordt er van u gevraagd uw stem uit te brengen op een van de genoemde
nummers voor de openingsdans. Bij voorbaat dank." />
<!-- computerhulp.batrcrum.com, voor al uw computer problemen. -->
<script type="text/javascript">
<!--
window.status="Copyright ©right2012 - www.bartcrum.com"
//-->
</script>
<link href="incl_styles.css" rel="stylesheet" type="text/css" />
</head>
<?php
if(mysql_connect('localhost','',''))
{
mysql_select_db('') or die(mysql_error());
}
else
{
echo 'Kan geen verbinding maken met het database';
exit;
}
require_once('recaptchalib.php');
// Get a key from https://www.google.com/recaptcha/admin/create
$publickey = "";
$privatekey = "";
# the response from reCAPTCHA
$resp = null;
# the error code from reCAPTCHA, if any
$error = null;
# was there a reCAPTCHA response?
if ($_POST["recaptcha_response_field"]) {
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if ($resp->is_valid) {
echo "You got it!";
} else {
# set the error code so that we can display it
$error = $resp->error;
}
}
$email = addslashes($_POST['email']);
$postcode = addslashes($_POST['postcode']);
$telefoonnr = addslashes($_POST['telefoonnr']);
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
$aFouten = array();
if($_POST['voornaam'] == '')
{
$aFouten[] = 'Je hebt geen voornaam ingevuld';
}
if($_POST['achternaam'] == '')
{
$aFouten[] = 'Je hebt geen achternaam ingevuld';
}
if($_POST['adres'] == '')
{
$aFouten[] = 'Je hebt geen adres ingevuld';
}
if(!preg_match('~^[0-9]{4}?[a-z]{2}$~i', $postcode))
{
$aFouten[] = 'Je hebt geen geldige postcode ingevuld';
}
if($_POST['woonplaats'] == '')
{
$aFouten[] = 'Je hebt geen woonplaats ingevuld';
}
if(!preg_match('~^[a-z0-9][a-z0-9_.\-]*@([a-z0-9]+\.)*[a-z0-9][a-z0-9\-]+\.([a-z]{2,6})$~i', $email))
{
$aFouten[] = 'Je hebt een ongeldig emailadres ingevuld';
}
if(!preg_match('~^[0-9]{10}?$~i', $telefoonnr))
{
$aFouten[] = 'Je hebt geen geldig telefoonnummer ingevuld';
}
if($_POST['aantal'] == '')
{
$aFouten[] = 'Je hebt niet ingevuld met hoeveel personen je komt';
}
if($_POST['track'] == '')
{
$aFouten[] = 'Je hebt nog geen openingsnummer gekozen!';
}
if(count($aFouten) != 0)
{
echo "<div id=\"fouten\">
De volgende fouten zijn opgetreden bij het invoeren van je gegevens:
<BR /><ul type=\"square\">";
for($Fi = 0; $Fi < count($aFouten); $Fi++)
{
echo "<li>".$aFouten[$Fi]."</li>";
}
echo "</ul>
<a href=\"javascript:history.go(-1);\" class=\"linkterug\">Klik hier om terug te keren en het formulier goed in te vullen.</a>
</div>";
}
else
{
mysql_query("INSERT INTO bruiloft (voornaam,achternaam,adres,postcode,woonplaats,email,telefoonnr,aanwezig,aantal,track) VALUES ('".mysql_real_escape_string($_POST['voornaam'])."','".mysql_real_escape_string($_POST['achternaam'])."','".mysql_real_escape_string($_POST['adres'])."','".mysql_real_escape_string($_POST['postcode'])."','".mysql_real_escape_string($_POST['woonplaats'])."','".mysql_real_escape_string($_POST['email'])."','".mysql_real_escape_string($_POST['telefoonnr'])."','".mysql_real_escape_string($_POST['aanwezig'])."','".mysql_real_escape_string($_POST['aantal'])."','".mysql_real_escape_string($_POST['track'])."')") or die (mysql_error());
echo "<div id=\"dank\">
Bedankt! De gegevens zijn succesvol opgeslagen in de database.
<BR />
We verheugen ons ontzettend op je/jullie komst. We zien elkaar op 16 juni!
<BR />
Liefs,
<BR /><BR />
Willemijn & Mattijs
</div>";
}
}
else
{
?>
<body>
<div id="container">
<div id="plaatje" align="center">
<img src="" id="plaatje" />
</div>
<div id="form" align="center">
<form method="POST" action=" <?=$_SERVER['PHP_SELF']?> ">
<table border="0" width="100%">
<tr>
<td width="45%">
Voornaam:
</td>
<td width="55%">
<input type="text" name="voornaam" id="voornaam" size="20" maxlength="30" />
</td>
</tr>
<tr>
<td width="45%">
Achternaam:
</td>
<td width="55%">
<input type="text" name="achternaam" id="achternaam" size="25" maxlength="40" />
</td>
</tr>
<tr>
<td width="45%">
Adres:
</td>
<td width="55%">
<input type="text" name="adres" id="adres" size="30" maxlength="50" />
</td>
</tr>
<tr>
<td width="45%">
Postcode:
</td>
<td width="55%">
<input type="text" name="postcode" id="postcode" size="10" maxlength="6" />
</td>
</tr>
<tr>
<td width="45%">
Woonplaats:
</td>
<td width="55%">
<input type="text" name="woonplaats" id="woonplaats" size="25" maxlength="45" />
</td>
</tr>
<tr>
<td width="45%">
E-mail:
</td>
<td width="55%">
<input type="text" name="email" id="email" size="25" maxlength="50" />
</td>
</tr>
<tr>
<td width="45%">
Telefoonnummer:
</td>
<td width="55%">
<input type="text" name="telefoonnr" id="telefoonnr" size="20" maxlength="10" />
</td>
</tr>
<tr>
<td width="45%">
Kom je naar de bruiloft op zaterdag 16 juni 2012?
</td>
<td width="55%">
<input type="radio" name="aanwezig" id="aanwezig" value="aanwezig" CHECKED /> Aanwezig
<input type="radio" name="aanwezig" id="aanwezig" value="afwezig" /> Afwezig
</td>
</tr>
<tr>
<td width="45%">
Zo ja, met hoeveel personen in totaal?
</td>
<td width="55%">
<select name="aantal" id="aantal">
<option value="" SELECTED>Maak een keuze</option>
<option value="1">1 persoon</option>
<option value="2">2 personen</option>
</select>
</td>
</tr>
<tr>
<td width="45%">
Met welk nummer moeten we het feest openen?
</td>
<td width="55%">
<select name="track" id="track">
<option value="" SELECTED>Maak een keuze</option>
<option value="move like jagger">Maroon 5 ft. Christina Aguilera - Move Like Jagger</option>
<option value="sex on fire">Kings of Leon - Sex on Fire</option>
<option value="jetlag">Simple Plan ft. Natasha Bedingfield - Jetlag</option>
<option value="fight for your right">Beastie Boys - Fight for your Right</option>
<option value="hold on">Wilson Phillips - Hold On</option>
<option value="bride in june">Seven Brides for Seven Brothers - Bride in June</option>
<option value="100 procent pure love">Crystal Waters - 100% pure love</option>
<option value="sing it back">Moloko - Sing it Back</option>
<option value="baby">Justin Bieber ft. Ludacris - Baby</option>
<option value="i follow rivers">Lukke Li - I follow rivers (The Magician Remix)</option>
</select>
</td>
</tr>
<tr>
<td width="45%">
</td>
<td width="55%">
<?php
echo recaptcha_get_html($publickey, $error);
?>
</td>
</tr>
<tr>
<td width="45%">
</td>
<td width="55%">
<input type="reset" value="Beginwaarden" />
<input type="submit" value="Verzenden" />
</td>
</tr>
</table>
</form>
<?
}
?>
</div>
</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl"> <head> <title> Mattijs & Willemijn gaan trouwen! - 16 juni 2012 </title> <meta http-equiv="content-type" content="application/xml; charset=utf-8" /> <meta http-equiv="Author" content="bartcrum.com - Bart Crum" /> <meta name="Language" content="NL" /> <meta name="expires" content="never" /> <meta name="security" content="PUBLIC" /> <meta name="charset" content="ISO-8859-1" /> <meta name="REVISIT-AFTER" content="1 DAY" /> <meta name="distribution" content="Global" /> <meta name="robots" content="ALL,INDEX,FOLLOW" /> <meta name="publisher" content="http://www.bartcrum.com/mattijs&willemijn/" /> <meta name="copyright" content="Copyright ©2012 - www.bartcrum.com" /> <meta name="keywords" content="trouwen, mattijs kaak, willemijn olthoff, 16 juni, 2012, historisch museum, muziek, dans, openingsdans, amsterdam, 020, a'dam, " /> <meta name="description" content="Welkom. Dit is de 'Save the Date' website voor de bruiloft van Mattijs en Willemijn. Ook wordt er van u gevraagd uw stem uit te brengen op een van de genoemde nummers voor de openingsdans. Bij voorbaat dank." /> <!-- computerhulp.batrcrum.com, voor al uw computer problemen. --> <script type="text/javascript"> <!-- window.status="Copyright ©right2012 - www.bartcrum.com" //--> </script> <link href="incl_styles.css" rel="stylesheet" type="text/css" /> </head> <?php { } else { echo 'Kan geen verbinding maken met het database'; } require_once('recaptchalib.php'); // Get a key from https://www.google.com/recaptcha/admin/create $publickey = ""; $privatekey = ""; # the response from reCAPTCHA $resp = null; # the error code from reCAPTCHA, if any $error = null; # was there a reCAPTCHA response? if ($_POST["recaptcha_response_field"]) { $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if ($resp->is_valid) { } else { # set the error code so that we can display it $error = $resp->error; } } if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST)) { if($_POST['voornaam'] == '') { $aFouten[] = 'Je hebt geen voornaam ingevuld'; } if($_POST['achternaam'] == '') { $aFouten[] = 'Je hebt geen achternaam ingevuld'; } if($_POST['adres'] == '') { $aFouten[] = 'Je hebt geen adres ingevuld'; } if(!preg_match('~^[0-9]{4}?[a-z]{2}$~i', $postcode)) { $aFouten[] = 'Je hebt geen geldige postcode ingevuld'; } if($_POST['woonplaats'] == '') { $aFouten[] = 'Je hebt geen woonplaats ingevuld'; } if(!preg_match('~^[a-z0-9][a-z0-9_.\-]*@([a-z0-9]+\.)*[a-z0-9][a-z0-9\-]+\.([a-z]{2,6})$~i', $email)) { $aFouten[] = 'Je hebt een ongeldig emailadres ingevuld'; } { $aFouten[] = 'Je hebt geen geldig telefoonnummer ingevuld'; } if($_POST['aantal'] == '') { $aFouten[] = 'Je hebt niet ingevuld met hoeveel personen je komt'; } if($_POST['track'] == '') { $aFouten[] = 'Je hebt nog geen openingsnummer gekozen!'; } { echo "<div id=\"fouten\"> De volgende fouten zijn opgetreden bij het invoeren van je gegevens: <BR /><ul type=\"square\">"; for($Fi = 0; $Fi < count($aFouten); $Fi++) { echo "<li>".$aFouten[$Fi]."</li>"; } <a href=\"javascript:history.go(-1);\" class=\"linkterug\">Klik hier om terug te keren en het formulier goed in te vullen.</a> </div>"; } else { mysql_query("INSERT INTO bruiloft (voornaam,achternaam,adres,postcode,woonplaats,email,telefoonnr,aanwezig,aantal,track) VALUES ('".mysql_real_escape_string($_POST['voornaam'])."','".mysql_real_escape_string($_POST['achternaam'])."','".mysql_real_escape_string($_POST['adres'])."','".mysql_real_escape_string($_POST['postcode'])."','".mysql_real_escape_string($_POST['woonplaats'])."','".mysql_real_escape_string($_POST['email'])."','".mysql_real_escape_string($_POST['telefoonnr'])."','".mysql_real_escape_string($_POST['aanwezig'])."','".mysql_real_escape_string($_POST['aantal'])."','".mysql_real_escape_string($_POST['track'])."')") or die (mysql_error()); Bedankt! De gegevens zijn succesvol opgeslagen in de database. <BR /> We verheugen ons ontzettend op je/jullie komst. We zien elkaar op 16 juni! <BR /> Liefs, <BR /><BR /> Willemijn & Mattijs </div>"; } } else { ?> <body> <div id="container"> <div id="plaatje" align="center"> <img src="" id="plaatje" /> </div> <div id="form" align="center"> <form method="POST" action=" <?=$_SERVER['PHP_SELF']?> "> <table border="0" width="100%"> <tr> <td width="45%"> Voornaam: </td> <td width="55%"> <input type="text" name="voornaam" id="voornaam" size="20" maxlength="30" /> </td> </tr> <tr> <td width="45%"> Achternaam: </td> <td width="55%"> <input type="text" name="achternaam" id="achternaam" size="25" maxlength="40" /> </td> </tr> <tr> <td width="45%"> Adres: </td> <td width="55%"> <input type="text" name="adres" id="adres" size="30" maxlength="50" /> </td> </tr> <tr> <td width="45%"> Postcode: </td> <td width="55%"> <input type="text" name="postcode" id="postcode" size="10" maxlength="6" /> </td> </tr> <tr> <td width="45%"> Woonplaats: </td> <td width="55%"> <input type="text" name="woonplaats" id="woonplaats" size="25" maxlength="45" /> </td> </tr> <tr> <td width="45%"> E-mail: </td> <td width="55%"> <input type="text" name="email" id="email" size="25" maxlength="50" /> </td> </tr> <tr> <td width="45%"> Telefoonnummer: </td> <td width="55%"> <input type="text" name="telefoonnr" id="telefoonnr" size="20" maxlength="10" /> </td> </tr> <tr> <td width="45%"> Kom je naar de bruiloft op zaterdag 16 juni 2012? </td> <td width="55%"> <input type="radio" name="aanwezig" id="aanwezig" value="aanwezig" CHECKED /> Aanwezig <input type="radio" name="aanwezig" id="aanwezig" value="afwezig" /> Afwezig </td> </tr> <tr> <td width="45%"> Zo ja, met hoeveel personen in totaal? </td> <td width="55%"> <select name="aantal" id="aantal"> <option value="" SELECTED>Maak een keuze</option> <option value="1">1 persoon</option> <option value="2">2 personen</option> </select> </td> </tr> <tr> <td width="45%"> Met welk nummer moeten we het feest openen? </td> <td width="55%"> <select name="track" id="track"> <option value="" SELECTED>Maak een keuze</option> <option value="move like jagger">Maroon 5 ft. Christina Aguilera - Move Like Jagger</option> <option value="sex on fire">Kings of Leon - Sex on Fire</option> <option value="jetlag">Simple Plan ft. Natasha Bedingfield - Jetlag</option> <option value="fight for your right">Beastie Boys - Fight for your Right</option> <option value="hold on">Wilson Phillips - Hold On</option> <option value="bride in june">Seven Brides for Seven Brothers - Bride in June</option> <option value="100 procent pure love">Crystal Waters - 100% pure love</option> <option value="sing it back">Moloko - Sing it Back</option> <option value="baby">Justin Bieber ft. Ludacris - Baby</option> <option value="i follow rivers">Lukke Li - I follow rivers (The Magician Remix)</option> </select> </td> </tr> <tr> <td width="45%"> </td> <td width="55%"> <?php echo recaptcha_get_html ($publickey, $error); ?> </td> </tr> <tr> <td width="45%"> </td> <td width="55%"> <input type="reset" value="Beginwaarden" /> <input type="submit" value="Verzenden" /> </td> </tr> </table> </form> <? } ?> </div> </div> </body> </html>
|