Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/03/2011, 18h00   #1
Membre du Club
 
Inscription : mai 2004
Messages : 70
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 70
Points : 48
Points : 48
Par défaut [FORM] image de sécurité & SESSION

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 :
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 :
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&nbsp;<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 :
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 :
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 ?
WuKoDLaK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2011, 22h24   #2
Membre du Club
 
Inscription : mai 2004
Messages : 70
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 70
Points : 48
Points : 48
en parti résolu, le seul hic restant :

après validation et envoi du mail ou retour en erreur car code invalide, il me faut recharger la page pour pouvoir ré-écrire... le bouton submit, ne fait plus effet.
WuKoDLaK est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h39.


 
 
 
 
Partenaires

Hébergement Web