captcha controle werkt niet

Status
Niet open voor verdere reacties.

arienlans

Gebruiker
Lid geworden
15 aug 2008
Berichten
172
het lukt mij niet om de captcha code te laten controleren!

zou ziet mijn script eruit

captcha.php
PHP:
<?php 
session_start(); 
$width = 140; 
$height = 35; 
$im = imagecreate($width, $height); 
$bg = imagecolorallocate($im, 0, 0, 0); 
 
// generate random string 
$len = 5; 
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw123456789'; 
for ($i = 0; $i < $len; $i++) { 
    $pos = rand(0, strlen($chars)-1); 
    $string[$i] = $chars{$pos}; 
}
for($i=0; $i < $len; $i++){
$string2+=$string[i];
}
$_SESSION['captcha_code'] = md5($string2); 
 
// grid groen
$grid_color = imagecolorallocate($im, 0, 175, 0); 
$number_to_loop = ceil($width / 20); 
for($i = 0; $i < $number_to_loop; $i++) { 
    $x = ($i + 1) * 20; 
    imageline($im, $x, 0, $x, $height, $grid_color); 
} 
$number_to_loop = ceil($height / 10); 
for($i = 0; $i < $number_to_loop; $i++) { 
    $y = ($i + 1) * 10; 
    imageline($im, 0, $y, $width, $y, $grid_color); 
} 
 
// grit rood
$extra_color = imagecolorallocate($im, 175, 0, 0); 
$number_to_loop = ceil($width / 15); 
for($i = 0; $i < $number_to_loop; $i++) { 
    $x = ($i + 1) * 15; 
    imageline($im, $x, 0, $x, $height, $extra_color); 
} 
$number_to_loop = ceil($height / 20); 
for($i = 0; $i < $number_to_loop; $i++) { 
    $y = ($i + 1) * 20; 
    imageline($im, 0, $y, $width, $y, $extra_color); 
} 
// grit blouw
$extra2_color = imagecolorallocate($im, 0, 0, 255); 
$number_to_loop = ceil($width / 25); 
for($i = 0; $i < $number_to_loop; $i++) { 
    $x = ($i + 1) * 25; 
    imageline($im, $x, 0, $x, $height, $extra2_color); 
} 
$number_to_loop = ceil($height / 15); 
for($i = 0; $i < $number_to_loop; $i++) { 
    $y = ($i + 1) * 15; 
    imageline($im, 0, $y, $width, $y, $extra2_color); 
} 
 
// random lines groen
$line_color = imagecolorallocate($im, 0, 130, 0); 
for($i = 0; $i < 10; $i++) { 
    $rand_x_1 = rand(0, $width - 1); 
    $rand_x_2 = rand(0, $width - 1); 
    $rand_y_1 = rand(0, $height - 1); 
    $rand_y_2 = rand(0, $height - 1); 
    imageline($im, $rand_x_1, $rand_y_1, $rand_x_2, $rand_y_2, $line_color); 
} 
 
// random lines rood
$line2_color = imagecolorallocate($im, 130, 0, 0); 
for($i = 0; $i < 10; $i++) { 
    $rand_x_1 = rand(0, $width - 1); 
    $rand_x_2 = rand(0, $width - 1); 
    $rand_y_1 = rand(0, $height - 1); 
    $rand_y_2 = rand(0, $height - 1); 
    imageline($im, $rand_x_1, $rand_y_1, $rand_x_2, $rand_y_2, $line2_color); 
}
 
// random lines blouw
$line3_color = imagecolorallocate($im, 0, 0, 130); 
for($i = 0; $i < 10; $i++) { 
    $rand_x_1 = rand(0, $width - 1); 
    $rand_x_2 = rand(0, $width - 1); 
    $rand_y_1 = rand(0, $height - 1); 
    $rand_y_2 = rand(0, $height - 1); 
    imageline($im, $rand_x_1, $rand_y_1, $rand_x_2, $rand_y_2, $line3_color); 
}
 
// write the text 
$i=0;
while($i < $len){
$kleur1 = rand(150, 255);
$kleur2 = rand(150, 255);
$kleur3 = rand(150, 255);
$text_color = imagecolorallocate($im, $kleur1, $kleur2, $kleur3);
$rand_x = rand($width/6*$i+15, $width/6*$i+15); 
$rand_y = rand(0, $height - 15); 
imagestring($im, 10, $rand_x, $rand_y, $string[$i], $text_color); 
$i++;
}
 
 
 
header ("content-type: image/png"); 
imagepng($im); 
?>
contact.php
PHP:
?php 
session_start();

// Variabelen:
$voornaam   	= "";    // Naam van de afzender
$achternaam 	= "";
$adres			= "";
$postcode		= "";
$woonplaats 	= ""; 
$emailadres 	= "";    // E-mailadres van de afzender
$telefoonnummer	= "";
$opmerking     	= "";    // Tekst van het e-mailbericht
$capcode		= "";
$vervuild   	= FALSE; // FALSE als het formulier geen fouten bevat
$verzonden  	= FALSE; // TRUE als het e-mailbericht is verzonden
$melding    	= "";    // String voor (fout)meldingen

// Formulier alleen verwerken als er op een knop met de naam 'submit' is geklikt ...
if (isset($_POST['submit'])) {
    // ... en deze knop de waarde 'Verzenden' heeft:
    if ($_POST['submit'] == "Verzenden") {
        $voornaam       = $_POST['v'];
		$achternaam     = $_POST['n'];
		$adres          = $_POST['a'];
		$postcode       = $_POST['p'];
		$woonplaats     = $_POST['w'];
		$emailadres 	= $_POST['e'];
		$telefoonnummer = $_POST['t'];
        $opmerking      = $_POST['o'];
		$capcode		= $_POST['captcha'];
		
		
        // HTML-tags en PHP-code verwijderen:
        $voornaam       = strip_tags($voornaam);
		$achternaam     = strip_tags($achternaam);
		$adres          = strip_tags($adres);
		$postcode       = strip_tags($postcode);
		$woonplaats     = strip_tags($woonplaats);
		$emailadres 	= strip_tags($emailadres);
		$telefoonnummer = strip_tags($telefoonnummer);
        $opmerking      = strip_tags($opmerking);
				
        // Spaties en andere witruimte verwijderen uit de naam en het e-mailadres,
        // maar niet uit de tekst van het bericht:
       	$voornaam       = trim($voornaam);
		$achternaam     = trim($achternaam);
		$adres          = trim($adres);
		$postcode       = trim($postcode);
		$woonplaats     = trim($woonplaats);
		$emailadres 	= trim($emailadres);
		$telefoonnummer = trim($telefoonnummer);
	    

        if (strlen($voornaam) < 1) {
            $melding  .= "Voer uw <strong>voornaam</strong> in.<br>";
            $vervuild  = TRUE;
		}
		
		if (strlen($achternaam) < 1) {
            $melding  .= "Voer uw <strong>achternaam</strong> in.<br>";
            $vervuild  = TRUE;
        }
		
		if (strlen($adres) < 0) {
            $melding  .= "";
            $vervuild  = TRUE;
        }
		
		if (strlen($postcode) < 0) {
            $melding  .= "";
            $vervuild  = TRUE;
        }
		
		if (strlen($woonplaats) < 0) {
            $melding  .= "";
            $vervuild  = TRUE;
        }

        if (strlen($emailadres) < 1) {
            $melding  .= "Voer uw <strong>e-mailadres</strong> in.<br> ";
            $vervuild  = TRUE;
        } else {
            function is_email($emailadres)
{
    // Eerst een snelle controle uitvoeren: 
    // een e-mailadres moet uit minimaal 7 tekens bestaan:
    if (strlen($emailadres) < 7) {
        return FALSE;
    }
    // Daarna een controle met een reguliere expressie uitvoeren:
    if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $emailadres)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
            if (!is_email($emailadres)) {
                $melding  .= "<strong>" . htmlentities($emailadres) . "</strong> is geen geldig e-mailadres.<br>";
                $vervuild  = TRUE;
            }
        }

		
		if (strlen($telefoonnummer) < 10) {
            $melding  .= "Voer uw <strong>telefoonnummer</strong> in.<br>";
            $vervuild  = TRUE;
        }
        
        if (strlen($opmerking) < 10) {
            $melding  .= "Voer een <strong>vraag/opmerking</strong> van minimaal <strong>10</strong> karakters in.<br>";
            $vervuild  = TRUE;
        }
		
		if (md5($capcode) != $_SESSION['captcha_code']){
			$melding  .= "Voer de <strong>code</strong> in. De code is <strong>hoofdletters</strong> gevoelig.<br>";
            $vervuild  = TRUE;
}
				  
        // E-mailbericht verzenden als de gegevens niet vervuild zijn:
        if (!$vervuild) {
            // Constante voor het e-mailadres van de ontvanger:
            define("AAN", "xxx@xxxxxxxxxx.nl");
            // Constante voor het onderwerp:
            define("ONDERWERP", "Contactformulier website");
            // Headers met de naam en het e-mailadres van de gebruiker:
            $headers  = "From: \"$voornaam $achternaam\" <$emailadres>\r\n";
            $headers .= "Reply-To: \"$voornaam $achternaam\" <$emailadres>\r\n";
            // Naam en e-mailadres toevoegen aan de tekst:
            $tekst .= "\r\nnaam:     $voornaam $achternaam";
			$tekst .= "\r\nadres:    $adres";
			$tekst .= "\r\n          $postcode $woonplaats";
			$tekst .= "\r\nemail:    $emailadres";
			$tekst .= "\r\ntelefoon: $telefoonnummer";
			$tekst .= "\r\nopmerking:";
			$tekst .= "\r\n" ;
			$tekst .= "\r\n$opmerking";
            if (mail(AAN, ONDERWERP, $tekst, $headers)) {
                $verzonden  = TRUE;
                $melding    = "Hartelijk dank voor uw reactie. ";
                $melding   .= "U ontvangt binnen twee werkdagen antwoord. ";
            } else {
                $verzonden  = FALSE;
                $melding    = "Uw bericht kon niet worden verzonden. ";
                $melding   .= "Wijzig het e-mailadres of probeer het later nog een keer. ";
            }
        }
    }
	}
// Standaardtekst voor instructies instellen als er geen foutmeldingen zijn:
if ($melding == "") {
    $melding  = "Voer eerst uw voornaam, achternaam, e-mailadres en telefoonnummer in, met evt. uw adres.<br> ";
    $melding .= "Typ daarna uw vraag of omerking in het grote vak, tik de code over en klik op Verzenden.";
}
?>

<hr><p><font color="darkblue"><?php echo $melding; ?></font></p><hr>

<?php
// Formulier weergeven als de gegevens vervuild zijn
// of het e-mailbericht niet verzonden is:
if ($vervuild or !$verzonden) {
    $voornaam       = htmlentities($voornaam);
	$achternaam     = htmlentities($achternaam);
	$adres		    = htmlentities($adres);
    $postcode       = htmlentities($postcode);
	$woonplaats     = htmlentities($woonplaats);
	$emailadres 	= htmlentities($emailadres);
	$telefoonnummer = htmlentities($telefoonnummer);
	$opmerking		= htmlentities($opmerking);
?>
		
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<table> 
<TD WIDTH="15"><td><label for="v">Voornaam:*</label><td>
<input accesskey="v" id="v" name="v" value="<?php echo $voornaam; ?>"><td>
<label for="n">Achternaam*:</label><td> 
<input accesskey="n" id="n" name="n" value="<?php echo $achternaam; ?>"><td>
</td></tr>
<tr>
<td><td><label for="a">Adres:</label><td>
<input accesskey="a" id="a" name="a" value="<?php echo $adres; ?>"><td>
</td></tr>
<tr>
<td><td><label for="p">Postcode:</label><td> 
<input accesskey="p" id="p" name="p" value="<?php echo $postcode; ?>"><td>
<label for="w">Woonplaats:</label><td>
<input accesskey="w" id="w" name="w" value="<?php echo $woonplaats; ?>"><td>
</td></tr>
<tr><td><td>
<label for="e">Emailadres:*</label><td>
<input accesskey="e" id="e" name="e" value="<?php echo $emailadres; ?>"><td>
<label for="t">Telefoonnummer:*</label><td>
<input accesskey="t" id="t" name="t" value="<?php echo $telefoonnummer; ?>"><td>
</td></tr>
<td><td colspan="4" >
Vraag of opmerking* <br>
<textarea accesskey="o" cols="60" id="o" name="o" rows="4"><?php echo $opmerking; ?></textarea></td>
</td></tr>
<td><td colspan="4" >
Vul hier de code in:*
<tr><td><td><img src="captcha.php" alt="captcha" />
<td>
<input type="text" name="captcha" />
</td></tr>
</table>
<input class="knop" name="submit" type="submit" value="Verzenden"> &nbsp;
<input class="knop" name="submit" type="submit" value="Wissen">
<?php
}
?>
 
Laatst bewerkt door een moderator:
Hoi Arien,
Van php heb ik niet zoveel kaas gegeten, maar in mijn logica vraag ik me af wat de allerlaatste 3 regeltjes moeten doen:
Code:
<?php
}
?>
Of zijn dat verdwaalde tags door het plak & knipwerk in deze post?

Vriendelijk gegroet,
CSS-hunter
 
Hoi Arien,
Van php heb ik niet zoveel kaas gegeten, maar in mijn logica vraag ik me af wat de allerlaatste 3 regeltjes moeten doen:
Code:
<?php
}
?>
Of zijn dat verdwaalde tags door het plak & knipwerk in deze post?

Vriendelijk gegroet,
CSS-hunter

Hij sluit dan de open staande if's }

<?php kan je ook vervangen door <? Aldus de vraag boven mij :thumb:




Krijg je geen error in de image?
 
Hij sluit dan de open staande if's }
Nog één lekenvraag dan. ;)
Moet de accolade dan niet meteen op het eind van de laatste if staan, voordat de gewone html weer begint, d.w.z.:
Code:
<?php
// Formulier weergeven als de gegevens vervuild zijn
// of het e-mailbericht niet verzonden is:
if ($vervuild or !$verzonden) {
$voornaam = htmlentities($voornaam);
$achternaam = htmlentities($achternaam);
$adres = htmlentities($adres);
$postcode = htmlentities($postcode);
$woonplaats = htmlentities($woonplaats);
$emailadres = htmlentities($emailadres);
$telefoonnummer = htmlentities($telefoonnummer);
$opmerking = htmlentities($opmerking);
[B]}[/B]
?>
Ik kan me voorstellen dat er anders iets gaat interfereren, omdat het op dat moment een "onafgemaakt if-statement" is; maar misschien is dat wel helemaal niet zo. Of misschien even proberen wat er dan gebeurt?
Je vraag over de error in de image kan ik helaas niets mee doen > laat ik graag aan de deskundigen over!
 
Nee, die } hoeft niet meteen op het einde van de laatste if te staan. (of ja, eigenlijk wel, die } is het einde van de if.)

Kun je je vraag iets specifieker formuleren? Krijg je een error / warning? Zo nee, heb je je error_reporting en display_errors wel aan staan?
 
dit script werkt volledig ook het plaatje komt zichtbaar op de site.
het enigste probleem wat ik heb is dat ik de captcha niet gecontroleerd krijgt. Zo als die nu zo staat keurt die de goede code ook af
 
Maak van regel 115 eens:

PHP:
$melding  .= "Voer de <strong>code</strong> in. De code is <strong>hoofdletters</strong> gevoelig.<br> md5(\$capcode) = " . md5 ( $capcode ) . " & \$_SESSION[ 'captcha_code' ] = " . $_SESSION[ 'captcha_code' ];
            $vervuild  = TRUE;

Dan geeft ie als het goed is beide strings wel weer. Wellicht is één hiervan leeg. Als je die foutmelding hier nou even post...

En maak eens van:

PHP:
$len = 5; 
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw123456789'; 
for ($i = 0; $i < $len; $i++) { 
    $pos = rand(0, strlen($chars)-1); 
    $string[$i] = $chars{$pos}; 
}
for($i=0; $i < $len; $i++){
$string2+=$string[i];
}
$_SESSION['captcha_code'] = md5($string2);

Dit:

PHP:
$len = 5; 
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw123456789'; 

$string = array();

for ( $i = 0; $i < $len; $i++ ) { 
    $pos = rand ( 0, strlen ( $chars ) - 1 ); 
    $string[$i] = $chars{$pos}; 
}

$string2 = implode ( '', $string );

$_SESSION['captcha_code'] = md5($string2);

Je probeert iets toe te kennen aan een bepaalde key in een array terwijl die variabele nog helemaal geen array is. Daarnaast kun je in plaats van de tweede loop veel beter implode() gebruiken.

[EDIT]
En += is om integer waarden bij elkaar op te tellen. Voor concatenatie gebruik je .=
[/EDIT]
 
Laatst bewerkt door een moderator:
bedankt

ErikBooy007 bedankt super wat heb ik hier lang op zitten zweten. Ik ben hier echt heel erg blij mee nogmaals dank

De regel 115 hoefde niet aangepast te worden, het captcha stuk wel

Dank dank dank
 
Mooi dat het werkt.

Maar nog even ter aanvulling. De aanpassing van regel 115 was ook niet nodig. Dat was puur even voor 'debug-purposes'. Dan had je kunnen zien welke strings vergeleken werden. 1'tje wat waarschijnlijk de hash van een lege string.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan