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é :
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é...
http://pompier-lemans.com/screen_contact.jpg
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.
Un script JS qui test les champs.
Si valide il envoi sur la page d'envoi de mail.
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 ?
Modifié par WuKoDLaK (06 Mar 2011 - 12:15)
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é :
/************************* 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é...
http://pompier-lemans.com/screen_contact.jpg
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.

En terme de fonctionnement :
Une page qui contient le formulaire.
<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.
// 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.
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 ?

Modifié par WuKoDLaK (06 Mar 2011 - 12:15)