Bonjour,
Je fais appel à vous concernant un soucis sur formulaire. J'ai utilisé un script de protection qui génère une image et permet d'éviter les spam de venir "pourrir" la boîte e-mail de l'amicale pour laquelle je travail.
Je l'avais utilisé sur l'ancienne version du site et cela fonctionnait bien.
code du script d'image de sécurité :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 /************************* PRTOECTION ***********************************/ // on démarre une session pour pouvoir mémoriser le code session_start(); // on définit les caractères utilisés pour le code généré $liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // génére le code en piochant dans les caractères de la liste $code = ''; while(strlen($code) != 6) { $code .= $liste[rand(0,36)]; } // on mémorise le code de 6 caractères généré en session $_SESSION['code']=$code; // on créé une image de 70 x 20 pixels (larg x hauteur) $img = imageCreate(70, 20) or die ("Problème de création GD"); // Choix de la couleur de fond, ici ça donne du Gris ( RVB) $background_color = imagecolorallocate ($img, 238, 238, 238); // Choix de la couleur de la police, ici du noir $ecriture_color = imagecolorallocate ($img, 0, 0, 0); // le code la police utilisée $code_police=5; // on créé une image jpeg en empêchant la mise en cache header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header("Content-type: image/jpeg"); // on introduit le code dans l'image imageString($img, $code_police,(70-imageFontWidth($code_police) * strlen("".$code.""))/2,0, $code,$ecriture_color); // on créé une image avec une qualité médiocre de 30% // pour éviter qu'un robot puisse la lire imagejpeg($img,'',30); // on libère la mémoire imageDestroy($img);
Ce script est cencé mettre en Session, la variable 'code'
Hors, lorsque la page du formulaire de contact s'affiche, le code généré est différent du contenu de la variable dans $_SESSION. Un simple echo me l'a montré...
De plus, après validation du formulaire, la variable de session semble vide dans mon script d'envoi du mail.
J'ai remarqué un autre point, lors d'un rafraichissement, [F5], la nouvelle variable de session, contient le code de l'image d'avant.bizarre non ?
En terme de fonctionnement :
Une page qui contient le formulaire.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<div id="contactForm"> <div class="loader"></div> <div class="bar"></div> <form action="mail.php" class="contactForm" id="contactForm" name="cform" method="post"> <h1>Contactez Nous</h1> <label>Votre message nous sera transmis et nous vous répondrons dans les meilleurs délais.</label> <label class="grey" for="name">Nom:<span class="name-missing">Veuillez indiquer votre nom</span></label> <input class="field" type="text" name="name" id="name" value="" size="23" /> <label class="grey" for="e-mail">Email:<span class="email-missing">E-mail valide requis</span></label> <input class="field" type="text" name="email" id="e-mail" size="23" /> <label class="grey" for="message">Message:<span class="message-missing">Votre message est vide...</span></label> <textarea class="field" rows="" cols="" id="message" name="message"></textarea> <label for="verif">Recopiez le code suivant <img valign="bottom" src="imagesecu.php" alt="image de protection" /></label> <input class="field" type="text" name="verif" id="verif" value="" maxlength="6" /> <input type="submit" name="submit" value="Envoyer" class="bt_register"/> <? echo ">>>>>>>>>> ".$_SESSION['code'] ; ?> </form> <!-- form : contactez nous --> <script src="js/scripts_contact.js" type="text/javascript" charset="iso-8859-1"></script> </div> <!-- contact form -->
Un script JS qui test les champs.
Code js : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 // script de validation du message $('.contactForm').submit( function(){ //statements to validate the form var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; var email = document.getElementById('e-mail'); if (!filter.test(email.value)) { $('.email-missing').show(); } else {$('.email-missing').hide();} if (document.cform.name.value == "") { $('.name-missing').show(); } else {$('.name-missing').hide();} if (document.cform.message.value == "") { $('.message-missing').show(); } else {$('.message-missing').hide();} if ((document.cform.name.value == "") || (!filter.test(email.value)) || (document.cform.message.value == "")) { return false; } if ((document.cform.name.value != "") && (filter.test(email.value)) && (document.cform.message.value != "")) { // on cache le formulaire $('.contactForm').hide(); // on montre la barre de chargement $('.loader').append($('.bar')); $('.bar').css({display:'block'}); // envoi des requêtes ajax $.post('mail.php',{name:$('#name').val(), email:$('#e-mail').val(), message:$('#message').val(), verif:$('#verif').val()}, // renvoi des données function(data){ // cache la barre de chargement $('.bar').css({display:'none'}); $('.loader').append(data); }); //Attente de 6s, fermeture du formulaire et fade out setTimeout('$(".loader").slideUp("slow")', 6000); // on montre le formulaire $('.contactForm').show(); // on vide le formulaire $('.contactForm')[0].reset(); // on le fait rester sur la page après envoi return false; } });
Si valide il envoi sur la page d'envoi de mail.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 include("datefr.php"); if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) { echo ">> ".$_SESSION['code']." - ".$_POST['verif']." <<" ; // pour les tests la session renvoi vide, vérif renvoi bien son contenu exit(); } if($_SESSION['code'] != $_POST['verif']) { ... } else { ... }
Quelqu'un aurait il une idée du pourquoi la session renvoi un mauvais contenu et aussi pourquoi elle se trouve vide après passage sur l'autre script ?![]()
![]()









Répondre avec citation
Partager