Captcha in PHP formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wouter Snijders

Wouter Snijders

16/08/2011 14:24:20
Quote Anchor link
Hallo Mensen!

Ik heb even hulp nodig want onze mailbox word overspoeld met spam , dus ik kwam op het idee om captcha te implementeren alleen ik krijg het niet voor elkaar.

Kunnen jullie me helpen wat ik moet invoeren en waar het moet staan in mijn PHP formulier?

>>>

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
<?php
session_start(); // zorg ervoor dat session_start ALTIJD bovenaan ALLES van je pagina staat, anders werkt het niet!

// E-mailadres van de ontvanger

$mail_ontv = '[email protected]'; // <<<----- voer jouw e-mailadres hier in!

// 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;
    }


$website_naam = '.....nl';
// HTML mail? True/False
$html = true;    

// 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($_POST['naam']) || !empty($naam_fout) || empty($_POST['mail']) || !empty($email_fout) || empty($_POST['bericht']))) || $_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 formlier
  echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
  <p>
  
      <label for="naam">Naam :</label><br />
      <input type="text" id="naam" name="naam" value="'
. htmlspecialchars($_POST['naam']) . '" /><br />
      
      <label for="mail">E-mailadres :</label><br />
      <input type="text" id="mail" name="mail" value="'
. htmlspecialchars($_POST['mail']) . '" /><br />
      
      <label for="naam">Telefoonnummer :</label><br />
      <input type="text" id="telefoonnummer" name="telefoonnummer" value="'
. htmlspecialchars($_POST['telefoonnummer']) . '" /><br />
      
      <label for="bericht">Uw Vraag :</label><br />
      <textarea id="bericht" name="bericht" rows="8" style="width: 400px;">'
. htmlspecialchars($_POST['bericht']) . '</textarea><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 = "===================================================<br />";
  $inhoud_mail .= "<b><font color=Blue>Ingevuld contact formulier Website</font></b> " . $_SERVER['HTTP_HOST'] . "<br />";
  $inhoud_mail .= "===================================================<br /><br />";
  
  $inhoud_mail .= "<b><font color=Green>Naam :</font></b> " . htmlspecialchars($_POST['naam']) . "<br />";
  $inhoud_mail .= "<b><font color=Green>E-mail adres :</font></b> " . htmlspecialchars($_POST['mail']) . "<br />";
  $inhoud_mail .= "<b><font color=Green>Telefoonnummer :</font></b> " . htmlspecialchars($_POST['telefoonnummer']) . "<br /><br />";
  
  $inhoud_mail .= "<b><font color=Green>Vraag :</font></b><br />";
  $inhoud_mail .= htmlspecialchars($_POST['bericht']) . "<br /><br />";
  
  $inhoud_mail .= "===================================================<br />";
  $inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "<br />";  
  $inhoud_mail .= "===================================================<br />";
  
  // --------------------
  // spambot protectie
  // --------------------

  
$headers     = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['mail'] . '>' . PHP_EOL;
$headers    .= 'Reply-To: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['mail'] . '>' . PHP_EOL;
$headers    .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . PHP_EOL;
$headers    .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : '';
$headers    .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
$headers    .= 'X-Priority: Normal' . PHP_EOL;
$headers    .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
$headers    .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL : '';
  
if (mail($mail_ontv, 'Vraag via ....nl', $inhoud_mail, $headers))
{

      
      echo '<h1>Uw vraag is verzonden</h1>
      
      <p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk uw vraag beantwoorden.</p>'
;
  }

  else
  {
      echo '<h1>Uw vraag is niet verzonden, er is iets mis gegaan.</h1>
      
      <p><b>Onze excuses.</b> Uw vraag kon niet verzonden worden, er is iets mis gegaan.</p>'
;
  }
}

?>
Gewijzigd op 16/08/2011 14:25:41 door Wouter Snijders
 
PHP hulp

PHP hulp

25/11/2024 01:48:47
 
PHP Scripter

PHP Scripter

16/08/2011 16:11:40
Quote Anchor link
Gewoon een simpel formuliertje ála; 'Hoeveel is 2 + 3?'. En dan even het antwoord checken rond regel 25.
 
Wouter Snijders

Wouter Snijders

17/08/2011 14:29:22
Quote Anchor link
Bedankt voor je antwoord , alleen kan je me ook zeggen hoe dat moet?

Zo ver was ik namelijk ook al maar ik krijg het niet werkende....
 
- SanThe -

- SanThe -

17/08/2011 14:32:54
Quote Anchor link
Wat lukt er dan niet? Zet het captcha inputveld in je formulier en controleer het vanuit de $_POST['captchaveldnaam'].
 
Wouter Snijders

Wouter Snijders

17/08/2011 14:38:58
Quote Anchor link
Volgens mij begrijpen jullie me verkeerd , ik heb nog nooit met captcha gewerkt , wel gezien , vandaar dat ik op het idee kwam , ik heb meerdere voorbeelden op internet geprobeerd om dat in mijn script te zetten maar het lukt me gewoon niet , dus ik weet absoluut niet hoe , wat of waar.

Dus mijn vraag was kunnen jullie me een voorbeeld geven , en waar ik dat moet verwerken in mijn PHP script.

Of wijs me even in de goede richting van een goed script met duidelijk uitleg of zoiets ^_^

Toevoeging op 17/08/2011 14:46:40:

Deze bijvoorbeeld , heb ik gedaan , maar werkt niet , krijg elke keer melding >
"Method not Allowed" na invoeren antwoord , en als ik hem verwerk in mijn script laadt de pagina niet eens meer ... -__-

http://www.phphulp.nl/php/script/beveiliging/som-captcha/1912/
Gewijzigd op 17/08/2011 14:48:20 door Wouter Snijders
 
- SanThe -

- SanThe -

17/08/2011 14:48:25
Quote Anchor link
Op regel 10 kan je checken of de captcha goed is ingevuld, zoniet error.
Op regel 52 kan je het <input> veld zetten.
 
Wouter Snijders

Wouter Snijders

17/08/2011 15:19:26
Quote Anchor link
Oke ik heb het nu voor elkaar met jou hulp , alleen nu gaat er nog 1 ding mis.

Als ik een fout antwoord invul word de mail alsnog verzonden , dus wat zou ik dan nog fout doen?
 
Vincent Huisman

Vincent Huisman

17/08/2011 15:20:58
Quote Anchor link
blijkbaar heb je een if verkeerd
 
Wouter Snijders

Wouter Snijders

17/08/2011 15:22:37
Quote Anchor link
Ik heb dit staan , gekopieerd uit een script hier op deze site >

if ($_SERVER['REQUEST_METHOD'] == 'POST')
if (isset($_POST['antwoord']) && isset($_SESSION['som_antwoord'])) {
echo ($_POST['antwoord'] == $_SESSION['som_antwoord']) ? 'Goed' : 'Fout';
 
- SanThe -

- SanThe -

17/08/2011 15:38:37
Quote Anchor link
Dat is alleen een echo. Je moet voordat je mailt ook checken of het goed was.
 
Wouter Snijders

Wouter Snijders

17/08/2011 15:43:23
Quote Anchor link
Hmmm , ik heb het overgenomen van deze script

http://www.phphulp.nl/php/script/beveiliging/som-captcha/1912/indexphp/1651/

maar dat wil zeggen dat wat daar in staat niet genoeg is , er ontbreekt dus een check.
 
- SanThe -

- SanThe -

17/08/2011 16:07:09
Quote Anchor link
Ik vind jouw hele opbouw best chaotisch. Je hebt bv. if ($_SERVER['REQUEST_METHOD'] == 'POST') er 3 keer in staan.

Logische opbouw:
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
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // checken of alles goed is ingevuld
    if(.. alles goed ..)
    {

        // mailen
        // bedankt en naar andere pagina

    }
    else
    {
        // errors tonen
    }
}

// formulier tonen
?>
Gewijzigd op 17/08/2011 16:07:54 door - SanThe -
 
Wouter Snijders

Wouter Snijders

18/08/2011 14:09:29
Quote Anchor link
Oke , nu gebruik ik dit script van deze site en ik loop weer tegen een raar probleem aan.

Deze regel <img src="c' . $i[array_rand($i)] . '.php" /> , werkt niet goed...

Dit moet verwijzen naar mijn class.captcha.php , maar op 1 of andere vage manier zet hij elke keer een nummer erbij , dus dan zoekt hij weer naar c1.php of c4.php , ik snap echt niet wat ik nu weer fout doe... (stoot met hoofd tegen muur -__-)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
// We willen op de hoogte gehouden worden van alle errors / notices
ini_set('display_errors', 1);
error_reporting(E_ALL);

// we gaan met sessies werken
session_start();
?>

<html>
<head>
<title>Captcha Class</title>
</head>
<body>

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
<?
// controlen of het formulier gesubmit is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    if(!empty($_POST['captcha_code']) && sha1(md5($_POST['captcha_code'])) == $_SESSION['captcha_code'])
    {

        echo 'De code is correct, Gefeliciteerd!';
    }

    else {
        echo 'De ingevoerde code is niet juist!';
    }
}

else {
    $i = range(1, 8);
    echo '
        
        <form method="post" action="'
.$_SERVER['PHP_SELF'].'">
        <p>
            <img src="c'
. $i[array_rand($i)] . '.php" />
        </p>
        <p>
            Neem de code precies zo over zoals aangegeven hierboven.<br />
            Hou dus rekening met Hoofdletter en Kleine letters.<br /><br />
            <label for="captcha_code">Beveiligingscode :</label>
            <input type="text" name="captcha_code">
        </p>
        <p>
            <input type="submit" name="submit" value="Controleer">
        </p>
        </form>
    '
;
}

?>
 
- SanThe -

- SanThe -

18/08/2011 14:34:44
Quote Anchor link
$i = range(1, 8);
Je zet zelf 1 t/m 8 in $i, dus dat zal een cijfer geven.
Wat zou dat moeten zijn volgens jou?
 
Wouter Snijders

Wouter Snijders

18/08/2011 14:40:01
Quote Anchor link
Ah op die manier , ik heb dit even aangepast.

Nu zoekt hij wel naar class.captcha.php :)

Alleen nu laat hij nog steeds het plaatje niet zien , alleen een rood kruisje waar het plaatje moet staan , GD Library werkt wel dus dat is het niet.

Ik denk dat het aan het fonts path ligt , klopt deze regel? >

var $fonts_path = '/usr/local/WWW/A/5c1/g/geush/htdocs/fonts';

Dit is de map waar mijn fonts in staan. , misschien maak ik hier ook een fout.
Gewijzigd op 18/08/2011 15:09:06 door Wouter Snijders
 
PHP Scripter

PHP Scripter

18/08/2011 16:36:12
Quote Anchor link
Volgens mij hoef je daar geen volledig server pad op te geven, maar alleen (/)fonts?
 
Wouter Snijders

Wouter Snijders

19/08/2011 15:21:05
Quote Anchor link
Ik ben ermee gestopt , ik krijg het gewoon niet voor elkaar , geen 1 captcha die op deze website staat werkt goed op mijn website...

Ik ben verder gaan zoeken en kwam ReCaptcha tegen , dat werkte in 1 x goed ^_^

Dus bij deze is mijn probleem ook weer opgelost , geen spam meer in onze mailboxen.
 
PHP Scripter

PHP Scripter

19/08/2011 16:20:12
Quote Anchor link
*DELETED*
Gewijzigd op 19/08/2011 16:21:03 door PHP Scripter
 



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.