Bonjour à tous,
J'ai un formulaire dont les champs (adresse email et code antispam) sont validés en AJAX. La vérif du champ email se passe très bien...
Le problème est que, même si le code antispam recopié est conforme à l'image captcha affichée, ça me renvoie mon msg d'erreur "code incorrect".
Voilà le code du form :
Voici le code pour la génération du captcha :
Voici la fonction AJAX de validation du form :
Et enfin le fichier verif.php (appelé par AJAX) :
J'ai testé la valeur de $_SESSION['antispam'] mais celle n'est pas définie (!isset). Le pb vient donc de là, mais comment le résoudre, là je patauge complètement...
Merci beaucoup pour votre aide
@+
J'ai un formulaire dont les champs (adresse email et code antispam) sont validés en AJAX. La vérif du champ email se passe très bien...
Le problème est que, même si le code antispam recopié est conforme à l'image captcha affichée, ça me renvoie mon msg d'erreur "code incorrect".
Voilà le code du form :
Code:
<div id="form">
<form method="post" action="" enctype="multipart/form-data" onsubmit="validForm();return false;">
<fieldset>
<label for="email">Adresse email :</label>
<input type="text" name="email" id="email" size="30" /><br />
<label for="antispam">Code anti-spam :</label>
<a onclick="actualiserCaptcha();" title="Si ce code vous parait illisible, cliquez sur l'image pour le changer...">
<img src="antispam.php" id="img_antispam" />
</a>
<input type="text" id="antispam" size="10" />
<input type="submit" id="confirmation" value="OK" />
</fieldset>
</form>
</div>
Voici le code pour la génération du captcha :
Code:
<?php
session_start();
if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/');
function getCode($length) {
$chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
$rand_str = '';
for ($i=0; $i<$length; $i++) {
$rand_str .= $chars{ mt_rand( 0, strlen($chars)-1 ) };
}
return $rand_str;
}
$theCode = getCode(5);
$_SESSION['antispam'] = md5($theCode);
$char1 = substr($theCode,0,1);
$char2 = substr($theCode,1,1);
$char3 = substr($theCode,2,1);
$char4 = substr($theCode,3,1);
$char5 = substr($theCode,4,1);
$fonts = glob('rssrcs/polices/*.ttf');
$image = imagecreatefrompng('antispam.png');
$colors=array ( imagecolorallocate($image, 200,28,26),
imagecolorallocate($image, 44,184,193),
imagecolorallocate($image, 169,11,175),
imagecolorallocate($image, 252,161,3),
imagecolorallocate($image, 192,207,11) );
function random($tab) {
return $tab[array_rand($tab)];
}
imagettftext($image, 16, -10, 5, 25, random($colors), ABSPATH .'/'. random($fonts), $char1);
imagettftext($image, 19, 20, 25, 25, random($colors), ABSPATH .'/'. random($fonts), $char2);
imagettftext($image, 15, -35, 40, 25, random($colors), ABSPATH .'/'. random($fonts), $char3);
imagettftext($image, 17, 25, 60, 25, random($colors), ABSPATH .'/'. random($fonts), $char4);
imagettftext($image, 15, -15, 75, 25, random($colors), ABSPATH .'/'. random($fonts), $char5);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Voici la fonction AJAX de validation du form :
Code:
function validForm() {
var xhr = null;
var donnees = "";
xhr = getXhr();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
reponse = xhr.responseText;
document.getElementById('div_contenu').innerHTML = reponse;
}
}
xhr.open("POST","verif.php",true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
adr_email = document.getElementById('email').value;
code_captcha = document.getElementById('antispam').value;
donnees="adrEmail="+adr_email+"&captcha="+code_captcha;
xhr.send(donnees);
}
Et enfin le fichier verif.php (appelé par AJAX) :
Code:
<?php
require "mesfonctions.php";
header('Content-Type: text/html; charset=utf-8');
echo '<div id="form">';
if ( ($_POST['adrEmail']=="") || (is_null($_POST['adrEmail'])) || (empty($_POST['adrEmail'])) ) {
echo '<h3>OUPS... Vous n\'avez pas saisi votre adresse email !</h3>
<form method="post" action="" enctype="multipart/form-data" onsubmit="validForm();return false;">
<fieldset>
<label for="email">Adresse email :</label><input type="text" name="email" id="email" size="30" onfocus="javascript:this.value=\'\'" value="Votre adresse email" /><br />
<label for="antispam">... Code anti-spam :</label><a onclick="actualiserCaptcha();" title="Si ce code vous parait illisible, cliquez sur l\'image pour le changer..."><img src="antispam.php" id="img_antispam" /></a>
<input type="text" name="antispam" id="antispam" size="10" />
<input type="submit" name="confirmation" id="confirmation" value="OK" />
</fieldset>
</form>';
}
else if (!verifEmail($_POST['adrEmail'])) {
echo '<h3>OUPS... L\'adresse email que vous avez saisie n\'est pas valide !</h3>
<form method="post" action="" enctype="multipart/form-data" onsubmit="validForm();return false;">
<fieldset>
<label for="email">Adresse email :</label><input type="text" name="email" id="email" size="30" onfocus="javascript:this.value=\'\'" value="Votre adresse email" /><br />
<label for="antispam">... Code anti-spam :</label><a onclick="actualiserCaptcha();" title="Si ce code vous parait illisible, cliquez sur l\'image pour le changer..."><img src="antispam.php" id="img_antispam" /></a>
<input type="text" name="antispam" id="antispam" size="10" />
<input type="submit" name="confirmation" id="confirmation" value="OK" />
</fieldset>
</form>';
}
else if ( ($_POST['captcha']=="") || (is_null($_POST['captcha'])) || (empty($_POST['captcha'])) ) {
$rappelEmail = $_POST['adrEmail'];
echo '<h3>OUPS... Vous n\'avez pas recopié le code anti-spam !</h3>
<form method="post" action="" enctype="multipart/form-data" onsubmit="validForm();return false;">
<fieldset>
<label for="email">Adresse email :</label><input type="text" name="email" id="email" size="30" onfocus="javascript:this.value=\'\'" value="'.$rappelEmail.'" /><br />
<label for="antispam">... Code anti-spam :</label><a onclick="actualiserCaptcha();" title="Si ce code vous parait illisible, cliquez sur l\'image pour le changer..."><img src="antispam.php" id="img_antispam" /></a>
<input type="text" name="antispam" id="antispam" size="10" />
<input type="submit" name="confirmation" id="confirmation" value="OK" />
</fieldset>
</form>';
}
else if ( md5(strtoupper($_POST['captcha']))!=$_SESSION['antispam'] ) {
$rappelEmail = $_POST['adrEmail'];
echo '<h3>OUPS... Le code anti-spam que vous avez recopié n\'est pas correct ! !</h3>
<form method="post" action="" enctype="multipart/form-data" onsubmit="validForm();return false;">
<fieldset>
<label for="email">Adresse email :</label><input type="text" name="email" id="email" size="30" onfocus="javascript:this.value=\'\'" value="'.$rappelEmail.'" /><br />
<label for="antispam">... Code anti-spam :</label><a onclick="actualiserCaptcha();" title="Si ce code vous parait illisible, cliquez sur l\'image pour le changer..."><img src="antispam.php" id="img_antispam" /></a>
<input type="text" name="antispam" id="antispam" size="10" />
<input type="submit" name="confirmation" id="confirmation" value="OK" />
</fieldset>
</form>';
}
else {
//script de traitement du form validé...
}
echo '</div>';
?>
J'ai testé la valeur de $_SESSION['antispam'] mais celle n'est pas définie (!isset). Le pb vient donc de là, mais comment le résoudre, là je patauge complètement...
Merci beaucoup pour votre aide
@+