Aller au contenu

Sujets conseillés

Posté

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:

<?php
session_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 image
header ("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 trouvent
foreach ($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 !

Posté

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 ?

Posté (modifié)

Je refais le code de ton image :

<?php
session_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 image
header ("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'image
imagestring($_img, 5, 18, 8, $_SESSION['captcha'], $avant_plan);
imagepng($_img);

Modifié par Findel

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...