ludodoludujodu Posté 10 Août 2007 Posté 10 Août 2007 Bonjour, Je suis en train de créer le formulaire d'inscription à mon site mais je rencontre quelques problèmes, voici mes codes: Le partie xhtml: <h1>Inscription</h1><div style="width: 430px; margin-left: auto; margin-right: auto"><form method="post" action=""><fieldset><label for="login">Choisissez un login</label><input name="login" id="login" value="" /><p id="loginbox" class="centre"></p><label for="email">Votre adresse email</label><input name="email" id="email" value="" /><p id="mailbox" class="centre"></p><label for="mdp">Choisissez un mot de passe</label><input type="password" name="mdp" id="mdp" value="" /><br /><label for="validmdp">Validez votre mot de passe</label><input type="password" name="validmdp" id="validmdp" value="" /><p id="mdpbox" class="centre"></p><p class="centre"><img src="includes/script_verification.php" alt="" id="captcha" /><br /><a href="#" onclick="document.getElementById('captcha').src = 'includes/script_verification.php?ord='+(Math.random()*10000000000000000000); return false;">Rafraichir l'image</a></p><label for="codecaptcha">Retapez l'image ci-dessus</label><input type="text" name="codecaptcha" id="codecaptcha" value="" /><p id="captchabox" class="centre"></p><script type="text/javascript" src="js/inscription.js.php" id="inscirptionjs"></script><p class="centre"><input type="button" value="Valider" onclick="VerifForm()" /></p></fieldset></form></div> includes/script_verification.php: <?phpsession_start();// On crée la session avant tout// On défini la configuration :if(!IsSet($_GET['nbr_chiffres'])) { $nbr_chiffres = 6; // Nombre de chiffres qui formerons le nombre par défaut}else { $nbr_chiffres = $_GET['nbr_chiffres']; // Si l'on met dans l'adresse un ?nbr_chiffres=X}// Là, on défini le header de la page pour la transformer en imageheader ("Content-type: image/png");// Là, on crée notre image$_img = imagecreatefrompng('../images/validation.png');// On défini maintenant les couleurs// Couleur de fond :$arriere_plan = imagecolorallocate($_img, 0, 0, 0); // Au cas où on utiliserai pas d'image de fond, on utilise cette couleur là.// Autres couleurs :$avant_plan = imagecolorallocate($_img, 255, 255, 255); // Couleur des chiffres##### Ici on crée la variable qui contiendra le nombre aléatoire #####$i = 0;while($i < $nbr_chiffres) { $chiffre = mt_rand(0, 9); // On génère le nombre aléatoire $chiffres[$i] = $chiffre; $i++;}$nombre = null;// On explore le tableau $chiffres afin d'y afficher toutes les entrées qu'y s'y trouventforeach ($chiffres as $caractere) { $nombre .= $caractere;}##### On as fini de créer le nombre aléatoire, on le rentre maintenant dans une variable de session #####$_SESSION['aleat_nbr'] = $nombre;// On détruit les variables inutiles :unset($chiffre);unset($i);unset($caractere);unset($chiffres);imagestring($_img, 5, 18, 8, $nombre, $avant_plan);imagepng($_img);$_SESSION['captcha'] = $nombre;?> Et pour finir js/inscription.js.php: <?php session_start(); ?>function writediv(texte, div) { document.getElementById(div).innerHTML = texte;}function file(fichier){ if(window.XMLHttpRequest) { // FIREFOX xhr_object = new XMLHttpRequest(); } else if(window.ActiveXObject) { // IE xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); } else { return(false); } xhr_object.open("GET", fichier, false); xhr_object.send(null); if(xhr_object.readyState == 4) { return(xhr_object.responseText); } else { return(false); }}function VerifForm () { var login = document.getElementById('login').value; if(login != '') { if(login.length<2) { writediv('<span style="color:red">Ce login est trop court</span>','loginbox'); erreur = true; } else if(login.length>30) { writediv('<span style="color:red">Ce login est trop long</span>','loginbox'); erreur = true; } else if(texte = file('pages/verifpseudo.php?login='+escape(login))) { if(texte == 1) { writediv('<span style="color:red">Ce login est déjà utilisé</span>','loginbox'); erreur = true; } else if(texte == 2) { writediv('','loginbox'); } } } else { writediv('<span style="color:red">Ce champ n\'est pas rempli</span>','loginbox'); erreur = true; } var email = document.getElementById('email').value; if(email != '') { var verif = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,3}$/ if (verif.exec(email) == null) { writediv('<span style="color:red">Adresse email invalide</span>','mailbox'); erreur = true; } else { writediv('','mailbox'); } } else { writediv('<span style="color:red">Ce champ n\'est pas rempli</span>','mailbox'); erreur = true; } var mdp = document.getElementById('mdp').value; var validmdp = document.getElementById('validmdp').value; if(mdp != '' && validmdp != '') { if(mdp != validmdp) { writediv('<span style="color:red">Les deux mots de passe ne correspondent pas</span>','mdpbox'); erreur = true; } else { writediv('','mdpbox'); } } else { writediv('<span style="color:red">Ces champs ne sont pas remplis</span>','mdpbox'); erreur = true; } var captcha = document.getElementById('codecaptcha').value; var codeimage = <?php echo $_SESSION['captcha']; ?>; if(captcha != '') { if(captcha == codeimage) { writediv('<span style="color:green">Le code est valide</span>','captchabox'); } else { writediv('<span style="color:red">Le code est invalide</span>','captchabox'); erreur = true; } } else { writediv('<span style="color:red">Ce champ n\'est pas rempli</span>','captchabox'); erreur = true; } if (erreur == true) { return false; } return true;} En fait lorsque c'est la première fois que je vais sur le formulaire tout fonctionne correctement mais si je clique sur "actualiser l'image" la vérification du code inscrit sur l'image ne fonctionne pas (logique puisque le js/inscription.js.php n'est pas rechargé). Donc j'aimerais que lorsque je clique sur "recharger l'image" js/inscription.js.php soit rechargé (ou si vous avez une autre solution proposez moi). Autre petit soucis: la vérification du pseudo ne fonctionne pas sur internet explorer (je travaille sous firefox). Merci d'avance pour vos réponses !
Findel Posté 10 Août 2007 Posté 10 Août 2007 Tu pourrais conditionner le calcul du captcha dans l'image seulement si tu n'en a pas déjà un, avec un !isset($_SESSION['captcha']), non ?
Findel Posté 13 Août 2007 Posté 13 Août 2007 (modifié) Je refais le code de ton image : <?phpsession_start();if(!IsSet($_GET['nbr_chiffres'])) { $nbr_chiffres = 6; // Nombre de chiffres qui formerons le nombre par défaut}else { $nbr_chiffres = (int) $_GET['nbr_chiffres']; // Si l'on met dans l'adresse un ?nbr_chiffres=X}// Là, on défini le header de la page pour la transformer en imageheader ("Content-type: image/png");// Là, on crée notre image$_img = imagecreatefrompng('../images/validation.png');// On défini maintenant les couleurs// Couleur de fond :$arriere_plan = imagecolorallocate($_img, 0, 0, 0); // Au cas où on utiliserai pas d'image de fond, on utilise cette couleur là.// Autres couleurs :$avant_plan = imagecolorallocate($_img, 255, 255, 255); // Couleur des chiffres// calcul du nombre seulement si on ne l'a pas déjà calculéif (!isset($_SESSION['captcha'])) { // calculer le nombre $_SESSION['captcha'] = ''; for ($i = 0; $i < $nbr_chiffres; ++$i) { $_SESSION['captcha'] .= (string) mt_rand(0,9); }}// generation de l'imageimagestring($_img, 5, 18, 8, $_SESSION['captcha'], $avant_plan);imagepng($_img); Modifié 13 Août 2007 par Findel
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant