Page 1 sur 1

[resolu]fonction mail() et rafraichissement page

Posté : 12 mai 2011, 13:28
par PetarouxRay
Bonjour,

J'ai plusieurs soucis sur mon fonction mail(), mais je vais commencer par le premier.
Lors du rafraichissement de la page, le mail() est envoyé une deuxième fois au destinataire. Alors que le cookie devrait empêcher ce soucis.

tout d'abord voici mon code :
(je précise que la validation des champs est faite par jquery, ce qui explique la 'value' des champs formulaires)

Code : Tout sélectionner

<?php $txtAide = ""; error_reporting(0); if (isset($_POST["envoyercontact"]) && $_POST["envoyercontact"] != "") { if (get_magic_quotes_gpc()) { $nom = stripslashes(trim($_POST['chnom'])); $expediteur = stripslashes(trim($_POST['chmail'])); $message = stripslashes(trim($_POST['chcomm'])); }else { $nom = trim($_POST['chnom']); $expediteur = trim($_POST['chmail']); $message = trim($_POST['chcomm']); } /* Eviter les insertions de header */ $regex_head = '/[\n\r]/'; /* envoi d'un mail au webmaster */ if (!isset($_COOKIE['sent'])) { $destinataire = '[email protected]'; $sujet = 'contact de ton site internet'; $messagehtml = 'Bonjour,'."\r\n\r\n"; $messagehtml .= 'Ce mail a été envoyé depuis toto.fr par '.$nom."\r\n\r\n"; $messagehtml .= '********************************'."\r\n"; $messagehtml .= $message."\r\n"; $messagehtml .= '********************************'."\r\n"; $headers = 'From:'.$nom.'<'.$expediteur.'>'."\r\n"; $headers .= "\r\n"; if(mail($destinataire,$sujet,$messagehtml,$headers)) { $alert = 'E-mail envoyé avec succès'; unset($_POST); setcookie("sent","1",time()+120); }else { $alert = 'Erreur d\'envoi de l\'e-mail'; } } /*cookie créé et page rafrachie !*/ else { unset($_POST); } } ?> <form id="formID" class="formular" method="post" action=""> <!-- nom --> <label for="chnom" class="txtform"><span class="etoile">*</span>Nom :</label> <input name="chnom" type="text" id="chnom" class="validate[required,custom[onlyLetter]] champcontact" size="30" maxlength="30" /> <!-- email --> <label for="chnom" class="txtform"><span class="etoile">*</span>Email :</label> <input name="chmail" type="text" id="chmail" class="validate[required,custom[email]] champcontact" size="30" maxlength="50" /> <!-- message --> <label for="chnom" class="txtform">Message :</label> <textarea name="chcomm" id="chcomm" class="validate[required,length[6,300]] champcontact" rows="6" style="width: 400px"></textarea> <!-- bouton valid --> <div align="left"><input class="submit" type="submit" value="Envoyer" name="envoyercontact" /></div> <!-- * --> <div class="txtform champcontact">* obligatoires</div> </form>




Je vous remercie beaucoup pour les réponses et le temps passé

Re: fonction mail() et rafraichissement page

Posté : 12 mai 2011, 14:50
par moogli
salut,

commence par virer le error_reporting(0) quand tu valide ton code si tu ne vois pas les erreurs tu va pas t'en sortir => error_reporting(E_ALL | E_STRICT) (si php4 vire le |E_STRICT)

quel est le retour de setcookie ? (true / false ?)

je vois le formulaire, mais le code de validation est il avant tous affichage ? (si ce n'est le cas setcookie ne pourra pas fonctionner).

ton navigateur accept les cookie ? peut tu le "voir" dessus ?)

@+

Re: fonction mail() et rafraichissement page

Posté : 12 mai 2011, 16:10
par PetarouxRay
Bonjour moogli et merci beaucoup.

J'ai donc modifié le code comme indiqué. j'avais enlevé les warnings car ca me fatigue j'avou, le mail part quand même.
voici le code modifié avec les error et une alert pour le setcookie.

Code : Tout sélectionner

<?php $txtAide = ""; /*error_reporting(0);*/ error_reporting(E_ALL | E_STRICT); if (isset($_POST["envoyercontact"]) && $_POST["envoyercontact"] != "") { if (get_magic_quotes_gpc()) { $nom = stripslashes(trim($_POST['chnom'])); $expediteur = stripslashes(trim($_POST['chmail'])); $message = stripslashes(trim($_POST['chcomm'])); }else { $nom = trim($_POST['chnom']); $expediteur = trim($_POST['chmail']); $message = trim($_POST['chcomm']); } /* Eviter les insertions de header */ $regex_head = '/[\n\r]/'; /* envoi d'un mail au webmaster */ if (!isset($_COOKIE['sent'])) { $destinataire = '[email protected]'; $sujet = 'contact de ton site internet'; $messagehtml = 'Bonjour,'."\r\n\r\n"; $messagehtml .= 'Ce mail a été envoyé depuis toto.fr par '.$nom."\r\n\r\n"; $messagehtml .= '********************************'."\r\n"; $messagehtml .= $message."\r\n"; $messagehtml .= '********************************'."\r\n"; $headers = 'From:'.$nom.'<'.$expediteur.'>'."\r\n"; $headers .= "\r\n"; if(mail($destinataire,$sujet,$messagehtml,$headers)) { $alert = 'E-mail envoyé avec succès'; unset($_POST); /*setcookie("sent","1",time()+120);*/ if(setcookie("sent","1",time()+120)) {alert("cookie true");}else{alert("cookie flase");} }else { $alert = 'Erreur d\'envoi de l\'e-mail'; } } /*cookie créé et page rafrachie !*/ else { unset($_POST); } } ?>

Le mail est donc recu correctement. Par contre, aucune alert pour le cookie et deux warnings.

Voici le lien vers le site en question : http://s-cormier.petaroux.com/fr/index.php#ancrecontact
Tu peut test par toi même si tu veux.

Re: fonction mail() et rafraichissement page

Posté : 12 mai 2011, 17:32
par moogli
O_o

enlever les warning parce que ça te fatigue :shock:

C'est pas beaucoup plus compliqué de ne pas avoir de warning, suffit de respecter le fonctionnement du langage et de ne pas utiliser des trucs à la va vite ;)

le message d'erreur et donc clair le problème viens du fait que tu essayer d'utiliser setcookie alors qu'il y a déjà eu un envoi HTML avant.

la fonction setcookie doit être appelé avant tous envoie au navigateur (pas d'espace ou de ligne blanche avant <?php ou après ?> dans les fichiers inclus, ni même avant la fonction elle même, cpas d'utilisation de fonction d'affichage tel echo, print etc).

donc il faut que le code de validation du formulaire soit mis au tout début de la page index (c'est la 1ère chose que doit faire le fichier).

Pour ce qui est d'éventuelle message d'erreur rien n’empêche de les mettre dans une variable et de la afficher ensuitesur le formulaire (idem pour le pré remplissage du formulaire ;)

@+

Re: fonction mail() et rafraichissement page

Posté : 13 mai 2011, 08:37
par PetarouxRay
Merci moogli. :D

J'ai donc déplacé le code en début de fichier sans espace avant et après.
J'ai modifié le code en enlevant les echo et modifié le cookie comme ceci :

Code : Tout sélectionner

if(mail($destinataire,$sujet,$messagehtml,$headers)) { setcookie("sent","1",time()+120); unset($_POST); }else { $alertmail = 1; }
Je reçoit toujours mon mail correctement, mais un message d'erreur reste :
Warning: Cannot modify header information - headers already sent by (output started at /homez.156/petaroux/sc/fr/langs.php:11) in /homez.156/petaroux/sc/fr/index.php on line 32
La ligne 32 correspond au setcookie() :(


telecharger l'index :
http://s-cormier.petaroux.com/forcetele ... umphp.php"

Re: fonction mail() et rafraichissement page

Posté : 13 mai 2011, 20:15
par moogli
tu a un truc qui s'affiche ligne 11 de langs.php c'est ça qui fou la merde.

Pour le reste sinon ton code à l'air bon, reste a voir le contenu de langs.php pour virer les possibilité d'affichage (qu'est ce qu'il y a a cette fameuse ligne 11 ;))

@+

Re: fonction mail() et rafraichissement page

Posté : 16 mai 2011, 11:32
par PetarouxRay
Merci moogli.

Il y avait donc deux lignes insérées après le ?> dans le fichier langs.php
Le problème est donc réglé et vraiment je te remercie.

Je laisserais donc les erreurs affichées désormais :)


Encore merci !!!!