login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Contact formulieren > Contact Formulier + CAPTCHA V2

Contact Formulier + CAPTCHA V2

Auteur: RdR - 10 mei 2005 - 15:15 - Gekeurd door: Mokka - Hits: 84552 - Aantal punten: 4.57 (35 stemmen)




Omdat ik veel emails/vragen kreeg of ik ook de CAPTCHA erook bij wou toevoegen heb ik besloten om het oude script te herschrijven en CAPTCHA eraan toe te voegen.

Verbeteringen zijn altijd welkom.

Features:
- CAPTCHA
- Anti Spam
- Kopie van email naar Verstuurder
- Email Checker
- xHTML valid
- CSS valid

Installatie:
De variabelen in het configuratie gedeelte wijzigen en de bestanden uploaden,
vergeet het font arial.ttf in een map fonts te zetten!

Bestanden:
- contact.php
- captcha.php
- style.css
- fonts/arial.ttf ( Hier te vinden )

Code:
contact.php

  1. <?php
  2. ############################################
  3. # Filename : contact.php #
  4. #------------------------------------------#
  5. # Written By : Thijs Ferket #
  6. # Website : www.ferket.net #
  7. #------------------------------------------#
  8. ############################################
  9.  
  10. ini_set('display_errors', 1);
  11.  
  12.  
  13. // Config Gedeelte
  14. $cfg['url'] = "http://www.uwwebsite.nl";// Site waarnaar je terug gaat als je een bericht hebt achtergelaten
  15. $cfg['naam'] = "Uw naam"; // Webmaster naam
  16. $cfg['email'] = "uw email adres"; // Webmaster E-mail
  17. $cfg['spam'] = 10; // Anti Spam Tijd in Minuten ( Voer "0" om de Spam Beveiliging uit te zetten )
  18. $cfg['text'] = TRUE; // Bij Fout Text Rood maken ( TRUE voor aan, FALSE voor uit )
  19. $cfg['input'] = TRUE; // Bij Fout Border om Vakje Rood maken ( TRUE voor aan, FALSE voor uit )
  20. $cfg['HTML'] = TRUE; // Een HTML email ( TRUE voor aan, FALSE voor uit )
  21. $cfg['CAPTCHA'] = TRUE; // CAPTCHA ( TRUE voor aan, FALSE voor uit )
  22.  
  23.  
  24. // Hieronder niks meer veranderen
  25. // E-mail Checker / Validator
  26. function checkmail($email)
  27. {
  28. if(eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$", $email))
  29. {
  30. return TRUE;
  31. }
  32. return FALSE;
  33. }
  34.  
  35. $formulier = TRUE;
  36.  
  37. if(!isset($_COOKIE['formulier']))
  38. {
  39. if(isset($_POST['wis']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
  40. {
  41. foreach($_POST as $key => $value)
  42. {
  43. unset($value);
  44. }
  45. header("Location: ".$_SERVER['PHP_SELF']."");
  46. }
  47.  
  48. if(isset($_POST['verzenden']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
  49. {
  50. $aFout = array();
  51.  
  52. $naam = trim($_POST['naam']);
  53. $email = trim($_POST['email']);
  54. $onderwerp = trim($_POST['onderwerp']);
  55. $bericht = trim($_POST['bericht']);
  56.  
  57. if($cfg['CAPTCHA'])
  58. {
  59. $code = $_POST['code'];
  60. }
  61.  
  62. if(empty($naam) || (strlen($naam) < 3) || eregi("[<>]", $naam) )
  63. {
  64. $aFout[] = "Er is geen naam ingevuld.";
  65. unset($naam);
  66. $fout['text']['naam'] = TRUE;
  67. $fout['input']['naam'] = TRUE;
  68. }
  69. if(empty($email))
  70. {
  71. $aFout[] = "Er is geen e-mail adres ingevuld.";
  72. unset($email);
  73. $fout['text']['email'] = TRUE;
  74. $fout['input']['email'] = TRUE;
  75. }
  76. elseif(checkmail($email) == 0)
  77. // Wanneer je PHP 5.2 > gebruikt
  78. //elseif(!filter_var($email, FILTER_VALIDATE_EMAIL))
  79. {
  80. $aFout[] = "Er is geen correct e-mail adres ingevuld.";
  81. unset($email);
  82. $fout['text']['email'] = TRUE;
  83. $fout['input']['email'] = TRUE;
  84. }
  85. if(empty($onderwerp))
  86. {
  87. $aFout[] = "Er is geen onderwerp ingevuld.";
  88. unset($onderwerp);
  89. $fout['text']['onderwerp'] = TRUE;
  90. $fout['input']['onderwerp'] = TRUE;
  91. }
  92. if(empty($bericht))
  93. {
  94. $aFout[] = "Er is geen bericht ingevuld.";
  95. unset($bericht);
  96. $fout['text']['bericht'] = TRUE;
  97. $fout['input']['bericht'] = TRUE;
  98. }
  99. if($cfg['CAPTCHA'])
  100. {
  101. if(strtoupper($code) != $_SESSION['captcha_code'])
  102. {
  103. $aFout[] = "Er is geen correcte code ingevuld.";
  104. $fout['text']['code'] = TRUE;
  105. $fout['input']['code'] = TRUE;
  106. }
  107. }
  108. if(!$cfg['text'])
  109. {
  110. unset($fout['text']);
  111. }
  112. if(!$cfg['input'])
  113. {
  114. unset($fout['input']);
  115. }
  116. if(!empty( $aFout ))
  117. {
  118. $errors = '
  119. <div id="errors">
  120. <ul>';
  121. foreach($aFout as $sFout)
  122. {
  123. $errors .= " <li>".$sFout."</li>\n";
  124. }
  125. $errors .= "</ul>
  126. </div>";
  127. }
  128. else
  129. {
  130. $formulier = FALSE;
  131.  
  132.  
  133. if($cfg['HTML'])
  134. {
  135. // Headers
  136. $headers = "From: \"Contact Formulier\" <".$cfg['email'].">\r\n";
  137. $headers .= "Reply-To: \"".$naam."\" <".$email.">\n";
  138. $headers .= "Return-Path: Mail-Error <".$cfg['email'].">\n";
  139. $headers .= "MIME-Version: 1.0\n";
  140. $headers .= "Content-Transfer-Encoding: 8bit\n";
  141. $headers .= "Content-type: text/html; charset=iso-8859-1\n";
  142.  
  143.  
  144. $bericht = '
  145. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  146. <html>
  147. <head>
  148. </head>
  149.  
  150. <body>
  151. <br />
  152. <b>Naam:</b> '.$naam.'<br />
  153. <b>Email:</b> <a href="mailto:'.$email.'">'.$email.'</a><br />
  154. <br />
  155. <b>Bericht:</b><br />
  156. '.$bericht.'
  157. <br />
  158. <br />
  159. <br />
  160. --------------------------------------------------------------------------<br />
  161. <b>Datum:</b> '.date("d-m-Y @ H:i:s").'<br />
  162. <b>IP:</b> <a href=\"http://sunny.nic.com/cgi-bin/whois?domain='.$_SERVER['REMOTE_ADDR'].'\">'.$_SERVER['REMOTE_ADDR'].'</a><br />
  163. <b>Host:</b> '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'<br />
  164. </body>
  165. </html>';
  166. }
  167. else
  168. {
  169. $bericht_wrap = wordwrap ($bericht, 40, "\n", 1);
  170. // Headers
  171. $headers = "From: \"Contact Formulier\" <".$cfg['email'].">\n";
  172. $headers .= "MIME-Version: 1.0\n";
  173. $headers .= "Content-type: text/plain; charset='iso-8859-1'\n";
  174.  
  175. // Bericht
  176. $message = "Naam: ".$naam." \n";
  177. $message .= "E-mail: ".$email." \n";
  178. $message .= "Bericht:\n".$bericht_wrap." \n ";
  179. $message .= " \n ";
  180. $message .= "Datum: ".date("d-m-Y H:i:s")." \n";
  181. $message .= "------------------------------------------------------- \n ";
  182. $message .= "IP: ".$_SERVER['REMOTE_ADDR']." \n ";
  183. $message .= "Host: ".gethostbyaddr($_SERVER['REMOTE_ADDR'])." \n ";
  184.  
  185. }
  186.  
  187. if(mail($cfg['email'], "[Contact] ".$onderwerp, $bericht, $headers))
  188. {
  189. if(isset($_POST['stuurkopie']))
  190. {
  191. $headers = "From: \"Contact Formulier\" <".$email.">\r\n";
  192. $headers .= "Reply-To: \"".$naam."\" <".$email.">\n";
  193. $headers .= "Return-Path: Mail-Error <".$email.">\n";
  194. $headers .= "MIME-Version: 1.0\n";
  195. $headers .= "Content-Transfer-Encoding: 8bit\n";
  196. $headers .= "Content-type: text/html; charset=iso-8859-1\n";
  197.  
  198. mail($email, "[Contact] ".$onderwerp, $bericht, $headers);
  199.  
  200. }
  201.  
  202. unset($naam, $email, $onderwerp, $bericht);
  203. setcookie("formulier", 1, time() + ( $cfg['spam'] * 60 ) );
  204.  
  205. echo "
  206. <p>
  207. Uw bericht is succesvol verzonden, er word zo snel mogelijk gereageerd.<br />
  208. <br />
  209. Met vriendelijke groeten,<br />
  210. <b>".$cfg['naam']."</b>
  211. </p>
  212. ";
  213. }
  214. else
  215. {
  216. echo "Er is een fout opgetreden bij het verzenden van de email";
  217. }
  218. header("refresh:3;url=".$cfg['url']."");
  219. }
  220. }
  221. if($formulier)
  222. {
  223. ?>
  224. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  225. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  226.  
  227. <html xmlns="http://www.w3.org/1999/xhtml">
  228. <head>
  229. <link href="style.css" rel="stylesheet" type="text/css" />
  230.  
  231. <title>Contact Formulier door Thijs</title>
  232. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  233. <meta http-equiv="Content-Language" content="nl" />
  234. </head>
  235.  
  236. <body>
  237. <div id="container">
  238. <?php
  239. if(isset($errors)) {
  240. echo $errors;
  241. }
  242. ?>
  243.  
  244. <h3>Contact Formulier Versie 2</h3>
  245. <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
  246. <p>
  247. <label <?php if(isset($fout['text']['naam'])) { echo 'class="fout"'; } ?>>Naam:</label>
  248. <input type="text" id="naam" name="naam" maxlength="30" <?php if(isset($fout['input']['naam'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($naam)) { echo stripslashes($naam); } ?>" /><br />
  249.  
  250. <label <?php if(isset($fout['text']['email'])) { echo 'class="fout"'; } ?>>Email:</label>
  251. <input type="text" id="email" name="email" maxlength="255" <?php if(isset($fout['input']['email'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($email)) { echo stripslashes($email); } ?>" /><br />
  252.  
  253. <label <?php if(isset($fout['text']['onderwerp'])) { echo 'class="fout"'; } ?>>Onderwerp:</label>
  254. <input type="text" id="onderwerp" name="onderwerp" maxlength="40" <?php if(isset($fout['input']['onderwerp'])) { echo 'class="fout'; } ?> value="<?php if (!empty($onderwerp)) { echo stripslashes($onderwerp); } ?>" /><br />
  255.  
  256. <label <?php if(isset($fout['text']['bericht'])) { echo 'class="fout"'; } ?>>Bericht:</label>
  257. <textarea id="bericht" name="bericht" <?php if(isset($fout['input']['bericht'])) { echo 'class="fout"'; } ?> cols="35" rows="6"><?php if (!empty($bericht)) { echo stripslashes($bericht); } ?></textarea><br />
  258.  
  259. <?php
  260. if($cfg['CAPTCHA'])
  261. {
  262. ?>
  263. <label></label>
  264. <img src="captcha.php" alt="" /><br />
  265.  
  266. <label <?php if(isset($fout['text']['code'])) { echo 'class="fout"'; } ?>>Code:</label>
  267. <input type="text" id="code" name="code" maxlength="4" size="4" <?php if(isset($fout['input']['code'])) { echo 'class="captcha fout"'; } ?> /><br />
  268. <?php
  269. }
  270. ?>
  271. <label for="stuurkopie">Stuur mij een kopie</label><input type="checkbox" id="stuurkopie" name="stuurkopie" value="1" /><br />
  272.  
  273. <label></label>
  274. <input type="submit" id="verzenden" name="verzenden" value="verzenden" />
  275. <input type="submit" id="wis" name="wis" value="Wis velden" />
  276. </p>
  277. </form>
  278. </div>
  279.  
  280. </body>
  281. </html>
  282. <?php
  283. }
  284. }
  285. else
  286. {
  287. echo "
  288. <p>
  289. U kunt maar eens in de ".$cfg['spam']." minuten een e-mail versturen!<br />
  290. U wordt nu automatisch doorgestuurd.
  291. </p>";
  292. header("refresh:3;url=".$cfg['url']."");
  293. }
  294. ?>



captcha.php

  1. <?php
  2. ############################################
  3. # Filename : captcha.php #
  4. #------------------------------------------#
  5. # Written By : Thijs Ferket #
  6. # Website : www.ferket.net #
  7. #------------------------------------------#
  8. ############################################
  9.  
  10.  
  11. if (phpversion () < "5"){ // define PHP5 functions if server uses PHP4
  12.  
  13. function str_split($text, $split = 1)
  14. {
  15. if (!is_string($text)) return false;
  16. if (!is_numeric($split) && $split < 1) return false;
  17. $len = strlen($text);
  18. $array = array();
  19. $s = 0;
  20. $e=$split;
  21. while ($s <$len)
  22. {
  23. $e=($e <$len)?$e:$len;
  24. $array[] = substr($text, $s,$e);
  25. $s = $s+$e;
  26. }
  27. return $array;
  28. }
  29. }
  30.  
  31. // Captcha keygenerator
  32. function keygen($aantal)
  33. {
  34. $tekens = array_merge(range('A', 'F'), array('H', 'J', 'K', 'M', 'N'), range('P', 'Z'));
  35. $randomstring = "";
  36. for($i=1; $i <= $aantal; $i++)
  37. {
  38. shuffle($tekens);
  39. $randomstring .= $tekens[0];
  40. }
  41. return $randomstring;
  42. }
  43.  
  44. $random_code = keygen(4);
  45. $_SESSION['captcha_code'] = $random_code;
  46.  
  47. $breedte = 90;
  48. $hoogte = 30;
  49.  
  50. header("content-type: image/png");
  51.  
  52. $afbeelding = imagecreate($breedte, $hoogte);
  53. $achtergrond = imagecolorallocate($afbeelding, 255, 255, 255);
  54. $font = "fonts/arial.ttf";
  55.  
  56. $kleur = imagecolorallocate($afbeelding, 186, 197, 214);
  57. imagerectangle($afbeelding, 0, 0, $breedte-1, $hoogte-1, $kleur);
  58.  
  59. $aantal_punten = rand(250, 500);
  60.  
  61. for ($i = 0; $i < $aantal_punten; $i++)
  62. {
  63. imagesetpixel($afbeelding, rand(1, $breedte-1), rand(1, $hoogte-1), $kleur);
  64. }
  65.  
  66. $aantal_lijnen = rand(5, 8);
  67. $aantal_cirkels = rand(5, 8);
  68. $aantal_lijnen2 = rand(2, 6);
  69. $spread = 100;
  70.  
  71. for($i = 0; $i < $aantal_lijnen; $i++)
  72. {
  73. $y_begin = rand(-$spread, $hoogte + $spread);
  74. $y_eind = rand(-$spread, $hoogte + $spread);
  75. $kleur = imagecolorallocate($afbeelding, rand(170, 255), rand(170, 255), rand(170, 255));
  76.  
  77. imageline($afbeelding, 0, $y_begin, $breedte, $y_eind, $kleur);
  78. }
  79.  
  80. for($i = 0; $i < $aantal_cirkels; $i++)
  81. {
  82. $y_center = rand(1, $breedte-1);
  83. $x_center = rand(1, $hoogte-1);
  84. $kleur = imagecolorallocate($afbeelding, rand(170, 255), rand(170, 255), rand(170, 255));
  85.  
  86. imageellipse($afbeelding, $y_center, $y_center, rand(50, 100), rand(50, 100), $kleur);
  87. }
  88.  
  89. $tekst = str_split($random_code);
  90.  
  91. for ($i = 0; $i < count($tekst); $i++)
  92. {
  93. $xas = rand(5, 15);
  94. $yas = rand(18, 25);
  95. $graden = rand(-25, 25);
  96. $grootte = rand(12,14);
  97. $kleur = imagecolorallocate($afbeelding, rand(0, 100), rand(0, 100), rand(0, 100));
  98. imagettftext($afbeelding, $grootte, $graden, $i * 20 + $xas, $yas, $kleur, $font, $tekst[$i]);
  99. }
  100.  
  101. for($i = 0; $i < $aantal_lijnen2; $i++)
  102. {
  103. $y_begin = rand(-$spread, $hoogte + $spread);
  104. $y_eind = rand(-$spread, $hoogte + $spread);
  105. $kleur = imagecolorallocate($afbeelding, rand(170, 255), rand(170, 255), rand(170, 255));
  106.  
  107. imageline($afbeelding, 0, $y_begin, $breedte, $y_eind, $kleur);
  108. }
  109.  
  110. imagepng($afbeelding);
  111. imagedestroy($afbeelding);
  112. ?>


style.css

  1. body {
  2. font: 10px Verdana, Arial, Helvetica, sans-serif;
  3. }
  4. div#container {
  5. width: 400px;
  6. margin:0 auto;
  7. border: 1px solid #bac5d6;
  8. padding: 15px;
  9. background: #f2f4f7;
  10. }
  11.  
  12. label {
  13. float: left;
  14. width: 140px;
  15. text-align: left;
  16. padding-top: 5px;
  17. }
  18.  
  19. input, textarea {
  20. padding: 3px;
  21. margin: 3px;
  22. border: 1px solid #bac5d6;
  23. font: 10px Verdana, sans-serif;
  24. background: #fff;
  25. }
  26. input.fout, textarea.fout {
  27. border: 1px solid #FF0000;
  28. }
  29.  
  30. label.fout {
  31. color: #FF0000;
  32. }
Download code! Download code (.txt)

 Bekijk een voorbeeld van dit script!
 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (134)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.102s