Problemen met CAPTCHA

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gerwin Jonkers

Gerwin Jonkers

03/10/2013 17:07:30
Quote Anchor link
Beste leden,

Ik ben Gerwin Jonkers, en zoals jullie zien, nieuw op dit forum. Voor een familielid van mij doe ik wat werkzaamheden voor haar website. Nu kan ik redelijk overweg met HTML en CSS, maar van PHP weet ik feitelijk niets. Nu maakt ze gebruik van het volgende contactformulier:

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
session_start(); // zorg ervoor dat session_start ALTIJD bovenaan ALLES van je pagina staat, anders werkt het niet!
echo '<br /><br /><div class="titel">Contact</div><br />';

// E-mailadres van de ontvanger
$mail_ontv = '[email protected]';

// Speciale checks voor naam en e-mailadres
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // naam controle
    if (!preg_match('/[ a-zA-Z-]$/', $_POST['naam']))
        $naam_fout = 1;
    // e-mail controle
    if (function_exists('filter_var') && !filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL))
            $email_fout = 1;
    // antiflood controle
    if (!empty($_SESSION['antiflood']))
    {

        $seconde = 20; // 20 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
        $tijd = time() - $_SESSION['antiflood'];
        if($tijd < $seconde)
            $antiflood = 1;
    }
}


// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if (($_SERVER['REQUEST_METHOD'] == 'POST' && (!empty($antiflood) || empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['mail']) || !empty($email_fout) || empty($_POST['bericht']) || empty($_POST['telefoon'])|| empty($_POST['onderwerp']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{

    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {

        if (!empty($naam_fout))
            echo '<p>Uw naam mag alleen letters bevatten.</p>';
        elseif (!empty($email_fout))
            echo '<p>Uw e-mailadres is niet juist.</p>';
        elseif (!empty($antiflood))
            echo '<p>U mag slechts &eacute;&eacute;n bericht per ' . $seconde . ' seconde versturen.</p>';
        else
            echo '<p>U bent uw naam, e-mailadres, onderwerp of bericht vergeten in te vullen.</p>';
    }

        
  // HTML e-mail formulier
  echo '<form id="contact_form" method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
  <p>
  
      <label for="naam" class="contact_titel">Naam:</label><br />
      <input type="text" id="naam" name="naam" value="'
. (isset($_POST['naam']) ? htmlspecialchars($_POST['naam']) : '') . '" /><br /><br />
      
      <label for="mail" class="contact_titel">E-mailadres:</label><br />
      <input type="text" id="mail" name="mail" value="'
. (isset($_POST['mail']) ? htmlspecialchars($_POST['mail']) : '') . '" /><br /><br />
      
      <label for="onderwerp" class="contact_titel">Telefoonnummer:</label><br />
      <input type="text" id="telefoon" name="telefoon" value="'
. (isset($_POST['telefoon']) ? htmlspecialchars($_POST['telefoon']) : '') . '" /><br /><br />
      
      <label for="onderwerp" class="contact_titel">Onderwerp:</label><br />
      <input type="text" id="onderwerp" name="onderwerp" value="'
. (isset($_POST['onderwerp']) ? htmlspecialchars($_POST['onderwerp']) : '') . '" /><br /><br />
      
      <label for="bericht" class="contact_titel">Bericht:</label><br />
      <textarea id="bericht" name="bericht" rows="8" style="width: 400px;">'
. (isset($_POST['bericht']) ? htmlspecialchars($_POST['bericht']) : '') . '</textarea><br /><br />
      
      <input type="submit" name="submit" value=" Versturen " />
  </p>
  </form>'
;

// versturen naar
}
else
{      
  // set datum
  $datum = date('d/m/Y H:i:s');
    
  $inhoud_mail = "===================================================\n";
  $inhoud_mail .= "Ingevulde contact formulier " . $_SERVER['HTTP_HOST'] . "\n";
  $inhoud_mail .= "===================================================\n\n";
  
  $inhoud_mail .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
  $inhoud_mail .= "E-mail adres: " . htmlspecialchars($_POST['mail']) . "\n";
  $inhoud_mail .= "Telefoonnummer: " . htmlspecialchars($_POST['telefoon']) . "\n";
  $inhoud_mail .= "Bericht:\n";
  $inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";
    
  $inhoud_mail .= "Verstuurd op " . $datum . "\n\n";
    
  $inhoud_mail .= "===================================================\n\n";
  
  // --------------------
  // spambot protectie
  // ------
  // van de tutorial: http://www.phphulp.nl/php/tutorial/beveiliging/spam-vrije-contact-formulieren/340/
  // ------

  
  $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['mail'] . '>';
  
  $headers = stripslashes($headers);
  $headers = str_replace('\n', '', $headers); // Verwijder \n
  $headers = str_replace('\r', '', $headers); // Verwijder \r
  $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
  
  $_POST['onderwerp'] = str_replace('\n', '', $_POST['onderwerp']); // Verwijder \n
  $_POST['onderwerp'] = str_replace('\r', '', $_POST['onderwerp']); // Verwijder \r
  $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
  
  if (mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers))
  {

      // zorg ervoor dat dezelfde persoon niet kan spammen
      $_SESSION['antiflood'] = time();
      
      echo 'Het contactformulier is verzonden
      
      <p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk contact met u opnemen.</p>'
;
  }

  else
  {
      echo 'Het contactformulier is niet verzonden
      
      <p><b>Onze excuses.</b> Het contactformulier kon niet verzonden worden.</p>'
;
  }
}

?>


Ik realiseer me dat dit een verouderd en bovendien niet al te effectief formulier is. Toch waag ik me er liever niet aan door er een nieuwe in te zetten, en ook zij heeft dat liever niet, alles gaat immers goed op de spam na. Nu willen we er graag CAPTCHA inzetten, maar ik krijg het maar niet voor elkaar. Volgens mij hoeft het niet al te moeilijk te zijn, maar ik ben zoals gezegd een leek met PHP.

Ik zou het enorm waarderen als jullie me kunnen helpen, en als het kan dan graag zo compleet en specifiek mogelijk.

Bij voorbaat dank!

Groet,
Gerwin
 
PHP hulp

PHP hulp

28/04/2024 00:08:02
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/10/2013 17:46:07
Quote Anchor link
Een captcha inbouwen kan op verschillende manieren en er zijn vele soorten captcha's. Wat betreft het formulier is het een kleine uitbreiding. Er moet een captcha afbeelding getoond worden en er moet een invoerveld bijkomen waarin het captcha antwoord verwerkt wordt. De meeste captcha's gebruiken een image met de src tag die verwijst naar een php script. dit php script pakt dan een random afbeelding of genereert op dat moment een afbeelding en retourneert deze naar de browser. Het afhandelen van de captcha als het formulier verstuurd is, is de volgende stap. er moet natuurlijk gekeken worden of het antwoord juist is. Al bij al is het toch een aardige ingreep als je niet in php thuis bent. hier is een tutorial die een eenvoudige captcha beschrijft: http://www.phptuts.nl/view/43/
Een andere mogelijkheid is dat je op dit forum een oproep doet of iemand het voor je wil maken al dan niet tegen een vergoeding.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.