login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Beveiliging > Beveiliging van een formulier met een som

Beveiliging van een formulier met een som

Auteur: qubus - 28 september 2011 - 18:56 - Gekeurd door: Koen - Hits: 4584 - Aantal punten: (0 stemmen)



Omdat ik veel klachten kreeg over een capcha plaatje op mijn site, ben ik eens gaan experimenteren met een andere manier van beveiligen van een formulier.

Onderstaande code bestaat uit een functie die ik nu hiervoor gebruik, en een voorbeeld van implementatie.

Tot heden heb ik geen last van spam gehad, en lijkt het prima te werken. Opmerkingen en/of verbeteringen altijd welkom

Code:
functie.php:

  1. <?php
  2. function som() {
  3. // Sessie starten
  4.  
  5. $getallen = array(
  6. 1=>'een',
  7. 2=>'twee',
  8. 3=>'drie',
  9. 4=>'vier',
  10. 5=>'vijf',
  11. 6=>'zes',
  12. 7=>'zeven',
  13. 8=>'acht',
  14. 9=>'negen',
  15. 10=>'tien',
  16. 11=>'elf',
  17. 12=>'twaalf',
  18. 13=>'dertien',
  19. 14=>'veertien',
  20. 15=>'vijftien',
  21. 16=>'zestien',
  22. 17=>'zeventien',
  23. 18=>'achttien',
  24. 19=>'negentien',
  25. );
  26.  
  27. $methode = rand(1,3); // willekeurig vermenigvuldigen, optellen of aftrekken
  28. $max = ($methode == 1) ? 9 : 19; // Sommen niet te moeilijk maken bij vermenigvuldigen
  29. $getal1 = rand(1,$max);
  30. $getal2 = rand(1,$max);
  31. if ($methode == 3 && $getal2 > $getal1) { // getallen omdraaien als uitkomst negatief zou zijn
  32. $getal3 = $getal1;
  33. $getal1 = $getal2;
  34. $getal2 = $getal3;
  35. }
  36.  
  37. switch ($methode) {
  38. case 1:
  39. $som = $getallen[$getal1] . " x " . $getallen[$getal2] . " = ";
  40. $_SESSION['uitkomst'] = $getal1 * $getal2;
  41. break;
  42. case 2:
  43. $som = $getallen[$getal1] . " + " . $getallen[$getal2] . " = ";
  44. $_SESSION['uitkomst'] = $getal1 + $getal2;
  45. break;
  46. case 3:
  47. $som = $getallen[$getal1] . " - " . $getallen[$getal2] . " = ";
  48. $_SESSION['uitkomst'] = $getal1 - $getal2;
  49. break;
  50. }
  51.  
  52. return($som);
  53. }
  54. ?>


De variabele $som bevat nu een string met de uitgeschreven som. Dus bijvoorbeeld: 'vijf x negen = '

Het antwoord van de som staat in $_SESSION['uitkomst'] ter controle

Gebruik kan als volgt, waarbij 'code' de naam is van het tekstvak met het antwoord:

  1. <?php
  2. include("functie.php");
  3.  
  4. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  5. if ($_SESSION['uitkomst'] != $_POST['code']){
  6. // Afhandeling indien antwoord fout
  7. } else {
  8. // Afhandeling indien antwoord goed
  9. }
  10. }

Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

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