Réception des données PHP avec certains navigateurs

Fermé
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014 - 19 juin 2013 à 16:00
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014 - 27 juin 2013 à 14:44
Bonjour à tous,
J'ai mis en place un site Internet (pour une exposition photographique) hébergé chez free, et j'utilise un formulaire de contact tout simple. Celui-ci fonctionne avec un script PHP qui ne m'a jamais posé de souci jusqu'ici. Or, j'ai constaté dernièrement que les informations arrivaient bien dans ma messagerie lorsque j'utilise Internet Explorer ou Safari pour remplir le formulaire, mais pas avec Chrome ou encore depuis un Smartphone. Le problème, c'est que lorsque l'on remplie le formulaire, tout est normal pour l'internaute, y compris au moment de l'envoi, mais de mon côté je ne reçois rien. J'espère être clair dans mes propos... J'avoue ne pas savoir d'où vient le problème, il y a certes un JAVASCRIPT qui permet de contrôler que les champs soient bien remplis, mais je ne pense pas que le problème vienne de là. Quelqu'un aurait-il une idée ???
D'avance merci


HTML :
<form id="formulaire" name="formulaire" method="post" action="contact.php" onSubmit="return
verif_formulaire()">
Nom :<input name="nom" type="text" id="nom" size="40" />
Prénom : <input name="prenom" type="text" id="prenom" size="40" />
Organisme ou entreprise :<input name="organisme" type="text" id="organisme" size="40" />
Email : <input name="email" type="text" id="email" size="40" />
Téléphone : <input name="tel" type="text" id="tel" size="40" maxlength="16" />
Message :<textarea name="message" cols="55" rows="12" id="message"></textarea>
<input type="image" name="imageField" id="imageField" src="img-contact/btn-envoyer.png" />
</form>


PHP :
<?php
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$organisme=$_POST['organisme'];
$email=$_POST['email'];
$tel=$_POST['tel'];
$message=$_POST['message'];
$headers ='From: "Site Internet"<'.$email.'>'."\n";
$headers .='Return-Path: moi@gmail.com'."\n";
$headers .='Cc: < moi@wanadoo.fr>'."\n";
$headers .='Reply-To: <'.$email.'>'."\n";
$headers .='Content-Type: text/plain; charset=utf-8'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$sujet="EXPOSITION - CONTACT";
$msg="UN CONTACT EST ARRIVE \n
Nom : $nom \n
Prenom : $prenom \n
Organisme : $organisme \n
Email : $email \n
Telephone : $tel \n
Message : $message";
if(mail('moi@gmail.com', $sujet, $msg, $headers))
{
echo 'VOTRE MESSAGE A BIEN ETE ENVOYE';
}
else
{
echo 'ECHEC LORS DE L ENVOI DE VOTRE MESSAGE';
A voir également:

18 réponses

gohlink Messages postés 50 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 16 décembre 2015 12
19 juin 2013 à 16:08
Bonjour,

Il ne devrait pas y avoir de différence entre Safari et Chrome lors de l'exécution du Javascript. Si l'utilisateur reçoit bien une confirmation que l'envoi a été faite, il faut peut être vérifier au niveau des spams de la boite de réception.

Sinon, pour vérifier s'il y a bien une erreur lié au javascript sous Chrome, il suffit d'activer les Outils de développement > Onglet Console. Si une erreur est détectée elle y sera listée.
Pour les activer : Ctrl + Maj + i sur Windows / Ctrl + Alt + i sur Mac
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
19 juin 2013 à 16:10
Salut,

il nous manque un élément pour te répondre, et c'est lui à mon avis qui cause un soucis : le contenu de la fonction javascript verif_formulaire

le code php sera toujours interprété de la même manière, quelle que soit le navigateur étant donné que le code php est exécuté côté serveur, et que lui ne change pas.

Donc le soucis se situe à mon avis du côté du javascript.
Tu peux ouvrir la console javascript sur chrome pour voir s'il y a un problème (ctrl+shift+i) et essayer d'envoyer un message.
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
19 juin 2013 à 18:52
voici le javascript de vérification du formulaire intégré dans l'entête de la page Html

<script type="text/javascript">
<!--
function verif_formulaire()
{
if(document.formulaire.nom.value == "") {
alert("Veuillez entrer votre nom!");
document.formulaire.nom.focus();
return false;
}
if(document.formulaire.prenom.value == "") {
alert("Veuillez entrer votre prénom!");
document.formulaire.prenom.focus();
return false;
}
if(document.formulaire.email.value == "") {
alert("Veuillez entrer votre adresse électronique!");
document.formulaire.email.focus();
return false;
}
if(document.formulaire.email.value.indexOf('@') == -1) {
alert("Ce n'est pas une adresse électronique!");
document.formulaire.email.focus();
return false;
}
if(document.formulaire.tel.value == "") {
alert("Veuillez entrer votre téléphone!");
document.formulaire.tel.focus();
return false;
}
if(document.formulaire.message.value == "") {
alert("Veuillez entrer votre message!");
document.formulaire.message.focus();
return false;
}
}
//-->
</script>
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
19 juin 2013 à 18:58
Aucune erreur n'est indiquée dans l'onglet Console, celui-ci est vide (que ce soit sur la page Html que la page PHP)
Merci de votre aide
Bonne soirée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 juin 2013 à 08:42
Il ne manquerait pas un return true; avant la dernière accolade fermante de ta fonction ?
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
20 juin 2013 à 14:53
Non, visiblement il ne manque rien.
Même en retirant le javascript de vérification, le résultat est le même. Franchement, je cale un peu...
0
Utilisateur anonyme
20 juin 2013 à 15:12
Bonjour

Juste une idée en passant par là : ça ne pourrait pas venir d'ailleurs que du <form> lui même ? Par exemple une balise mal formée avant, ou qui n'est jamais refermée... et qui fait que formulaire est plus ou moins bien pris en compte selon les navigateurs ?
Et quand tu dis que tout est normal pour l'internaute, est-ce que ça veut dire qu'il voit 'VOTRE MESSAGE A BIEN ETE ENVOYE' ?
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
20 juin 2013 à 15:14
Exact, il voit bien le message "Votre message a bien été envoyé". Concernant la balise, je ne vois pas trop...
Merci
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
20 juin 2013 à 15:43
si l'internaute voit le message 'VOTRE MESSAGE A BIEN ETE ENVOYE'

c'est que le formulaire est bien envoyé au serveur et que le script contact.php d'envoi du mail s'exécute donc il ne faut pas chercher côté fonction javascript elle n'est plus concerné à ce moment là

essayes de mettre un echo pour voir le contenu du mail qui devrait être envoyé:
<?php
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$organisme=$_POST['organisme'];
$email=$_POST['email'];
$tel=$_POST['tel'];
$message=$_POST['message'];
$headers ='From: "Site Internet"<'.$email.'>'."\n";
$headers .='Return-Path: moi@gmail.com'."\n";
$headers .='Cc: < moi@wanadoo.fr>'."\n";
$headers .='Reply-To: <'.$email.'>'."\n";
$headers .='Content-Type: text/plain; charset=utf-8'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$sujet="EXPOSITION - CONTACT";
$msg="UN CONTACT EST ARRIVE \n
Nom : $nom \n
Prenom : $prenom \n
Organisme : $organisme \n
Email : $email \n
Telephone : $tel \n
Message : $message";
//TEST les sauts de lignes \n ne seront pas pris en compte mais ça te donnera au moins les valeurs
echo "header:".$headers;
echo "<br />Message:<br />".$msg;

///
if(mail('moi@gmail.com', $sujet, $msg, $headers))
{
echo 'VOTRE MESSAGE A BIEN ETE ENVOYE';
}
else
{
echo 'ECHEC LORS DE L ENVOI DE VOTRE MESSAGE';
}
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
23 juin 2013 à 18:19
Bonjour Alain_42, pour faire suite à ton aide, voici le résultat en ajoutant tes lignes de code :

header:From: "Site 4 saisons au PNFO" Return-Path: sitesyscom10@gmail.com Cc: Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit
Message:
UN CONTACT EST ARRIVE Nom : Dupont Prenom : Gérard Organisme : Paris Email : moi@wanadoo.fr Telephone : 0326565898 Message : essai de message avec ChromeVOTRE MESSAGE A BIEN ETE ENVOYE

Tout à l'air normal, mais je ne reçois toujours pas le message dans ma boîte mail...
Merci de ton aide
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 juin 2013 à 16:02
oui mais je pense qu'il faudrait que tu modifies le FROM

$headers ='From: "Site Internet"<'.$ton_email.'>'."\n";


avec comme valeur pour $ton_email, le mail connu de ton hebergeur

par ex webmaster@ton_site.com
0
Utilisateur anonyme
24 juin 2013 à 16:26
Bonjour

Son From comme son reply-to sont probablement corrects, mais ne sont pas affichés par un simple echo parce qu'il sont entre < et > et sont donc pris pour des balises.

Il faudrait faire
echo "header:".htmspecialchars($headers);
echo "<br />Message:<br />".htmspecialchars($msg);
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
25 juin 2013 à 10:31
Après corrections, voici le résultat de l'echo, mais toujours aucune réception...
header:From: "Site 4 saisons au PNFO"<4.saisons.pnfo@free.fr> Return-Path: sitesyscom10@gmail.com Cc: Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit
Message:
UN CONTACT EST ARRIVE Nom : Dupont Prenom : Martin Organisme : SYSCOM Email : moi@wanadoo.fr Telephone : 0326565898 Message : nouvel essai avec chromeVOTRE MESSAGE A BIEN ETE ENVOYE

En revanche, l'intégration des deux lignes de codes suivantes ont fait planter le serveur (ou le script PHP...)
echo "header:".htmspecialchars($headers);
echo "<br />Message:<br />".htmspecialchars($msg);

Merci de votre aide en tout cas.
0
C'était htmlspecialchars ! Pardon. Et même pour plus de clarté :

echo "header:".nl2br(htmlspecialchars($headers)); 
echo "<br />Message:<br />".nl2br(htmlspecialchars($msg)); 


Je vois que les champs CC et Reply-To sont vides, tu pourras essayer de les retirer pour voir si ça passe mieux
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 juin 2013 à 15:30
essayes aussi en remplaçant dans la partie $headers tous les ."\n" par ."\r\n"
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
26 juin 2013 à 11:28
ça y est ça fonctionne !!!!
Ce qui bloqué, c'était le champs CC du $headers. En le supprimant, ça passe tout à fait.
Est-ce qu'il y a une autre possibilité pour mettre en copie un formulaire que de passer par le CC dans Headers ???

En tout cas, merci beaucoup pour votre aide
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
26 juin 2013 à 11:36
J'ai parlé un peu vite, ça fonctionne avec Chrome, mais plus avec IE !!!!
En fait, ce sont les symboles "\r\n" qui fonctionne sous chrome et qui font planter IE. Si je remets "\n", tout refonctionne parfaitement sous IE et plus sous Chrome.
Peut-être existe-t-il une astuce ?

Désolé pour mon enthousiasme un peu rapide
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 juin 2013 à 16:53
le script php s'exécutant sur le serveur, je ne vois pas du tout le rapport avec le navigateur, c'est surement un hasard, ton envoi fonctionne un coup sur deux d'où ta déduction sur le navigateur;
0
Utilisateur anonyme
26 juin 2013 à 11:37
Normalement, le Cc marche. Je ne sais pas si c'est normal d'avoir un espace entre le < et l'adresse, et je pense d'ailleurs que les < > ne sont pas utile si tu n'as que l'adresse mail (sans nom)
As-tu essayé :
$headers .='Cc: moi@wanadoo.fr'."\n";
0
agencesyscom Messages postés 20 Date d'inscription mercredi 19 juin 2013 Statut Membre Dernière intervention 25 mars 2014
27 juin 2013 à 14:44
Pour répondre à Alain_42, je confirme que le script "\r\n" fonctionne sous chrome, mais pas sur IE et inversement. Moi non plus, je n'explique pas ce bug, mais le serveur ne réagit pas de la même manière. Quand le formulaire s'envoie bien, la page PHP de confirmation met plus de temps à s'afficher.
0