Bonsoir à tous.
Après plusieurs jours de recherche, je viens enfin poster mon problème ici afin de trouver (je l'espère) un petit coup de pouce...
J'ai réalisé un formulaire simple utilisant un captcha php.
Voici mon code HTML :
Ce formulaire a pour simple objectif d'envoyer un e-mail une fois validé (via la page contact.php)
Voici mon code Javascript :
Et pour terminer mon script php :
Mon problème est que lors de la validation du formulaire la valeur retournée par la fonction conf_code() est obligatoirement false même si la valeur du captcha est correcte.
Pour le moment cela implique donc que l'utilisateur clic 2 fois sur le bouton submit pour valider correctement le champ captcha.
Mon problème est donc lié à l'exécution intégrale de ma fonction verif_code(), qui renvoi d'abord l'état du chargement Ajax puis termine par le résultat de cet appel Ajax dans une balise <span id="verif_code"></span>.
L'Ajax est traité de façon asynchrone et lors de la vérification de la fonction conf_code() le contenu de cette balise span contient encore la valeur de chargement de la fonction Ajax :
Je suis donc à la recherche d'une solution miracle pour mon problème...
Merci d'avance à tous, et à bientôt.
Modifié par Balty (10 Jan 2008 - 17:30)
Après plusieurs jours de recherche, je viens enfin poster mon problème ici afin de trouver (je l'espère) un petit coup de pouce...
J'ai réalisé un formulaire simple utilisant un captcha php.
Voici mon code HTML :
<form action="contact.php" id="form_contact" method="post" onsubmit="return verif_all();">
<p>
<label for="nom" class="label_left">Nom :</label>
<input type="text" id="nom" name="nom" class="champ_right" maxlength="20" onblur="verif_nom();" /><span id="verif_nom"></span>
</p>
<p>
<label for="mail" class="label_left">Mail :</label>
<input type="text" id="mail" name="mail" class="champ_right" maxlength="30" onblur="verif_mail();" /><span id="verif_mail"></span>
</p>
<p>
<label for="sujet" class="label_left">Sujet :</label>
<input type="text" id="sujet" name="sujet" class="champ_right" maxlength="50" />
</p>
<p>
<label for="message" class="label_left">Message :</label>
<textarea id="message" name="message" class="champ_right" rows="4" cols="15" onblur="verif_msg();"></textarea><span id="verif_msg"></span>
</p>
<p>
<label for="captcha" class="label_left">Code :</label>
<input type="text" id="captcha" name="captcha" class="champ_right_captcha" maxlength="20" onblur="verif_code();" /><span id="verif_code"></span>
<?php dsp_crypt(0,0); ?>
</p>
<p class="bt_submit">
<input type="submit" id="submit_form" name="submit_form" value="Envoyer" />
</p>
</form>
Ce formulaire a pour simple objectif d'envoyer un e-mail une fois validé (via la page contact.php)
Voici mon code Javascript :
function verif_nom() {/* vérifications... */}
function verif_mail() {/* vérifications... */}
function verif_msg() {/* vérifications... */}
/* vérification du champ 'code' */
function verif_code() {
var paramAjax = "action=verif&captcha="+$F('captcha');
var ajax = new Ajax.Updater(
{success: 'verif_code'},
'ajax.php',
{
method: 'post',
parameters: paramAjax,
onLoading: $('verif_code').innerHTML = "<span>Vérification...</span>",
onComplete: conf_code,
asynchronous: true
});
}
function conf_code() {
if (document.getElementById('verif_code').innerHTML.match(/champ correct/)) {
return "verif_code_ok";
} else {
return false;
}
}
/* vérification du formulaire pour chaque champs */
function verif_all(){
verif_nom();
verif_mail();
verif_msg();
verif_code();
if((verif_nom()!="verif_nom_ok")||(verif_msg()!="verif_msg_ok")||(verif_mail()!="verif_mail_ok")||(conf_code()!="verif_code_ok")){
return false;
}
if((verif_nom()=="verif_nom_ok")&&(verif_mail()=="verif_mail_ok")&&(verif_msg()=="verif_msg_ok")&&(conf_code()=="verif_code_ok")) {
if(confirm("Envoyer ces informations ?")) {
return true;
} else {
return false;
}
}
return false;
}
Et pour terminer mon script php :
<?php
/* inclusions diverses */
switch($_POST['action']){
case "verif":
if(chk_captcha($_POST['captcha'])) {
echo "champ correct";
} else {
echo "champ incorrect";
}
break;
}
?>
Mon problème est que lors de la validation du formulaire la valeur retournée par la fonction conf_code() est obligatoirement false même si la valeur du captcha est correcte.

Pour le moment cela implique donc que l'utilisateur clic 2 fois sur le bouton submit pour valider correctement le champ captcha.
Mon problème est donc lié à l'exécution intégrale de ma fonction verif_code(), qui renvoi d'abord l'état du chargement Ajax puis termine par le résultat de cet appel Ajax dans une balise <span id="verif_code"></span>.
L'Ajax est traité de façon asynchrone et lors de la vérification de la fonction conf_code() le contenu de cette balise span contient encore la valeur de chargement de la fonction Ajax :
onLoading: $('verif_code').innerHTML = "<span>Vérification...</span>",

Je suis donc à la recherche d'une solution miracle pour mon problème...
Merci d'avance à tous, et à bientôt.

Modifié par Balty (10 Jan 2008 - 17:30)