Réception des données PHP avec certains navigateurs

agencesyscom Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
agencesyscom Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   12
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   894
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   894
 
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
 
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   Statut Membre Dernière intervention  
 
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
Utilisateur anonyme
 
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   Statut Membre Dernière intervention   894
 
essayes aussi en remplaçant dans la partie $headers tous les ."\n" par ."\r\n"
0
agencesyscom Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
ç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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   894
 
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
 
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   Statut Membre Dernière intervention  
 
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