Pb php formulaire envoi par mail
Résolu/Fermé
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
-
29 déc. 2009 à 23:37
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 30 déc. 2009 à 19:35
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 30 déc. 2009 à 19:35
A voir également:
- Pb php formulaire envoi par mail
- Yahoo mail - Guide
- Programmer envoi mail gmail - Guide
- Publipostage mail - Guide
- Annuler envoi mail gmail - Guide
- Cci mail - Guide
14 réponses
avion-f16
Messages postés
19246
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 avril 2024
4 497
29 déc. 2009 à 23:54
29 déc. 2009 à 23:54
$prenom=$_POST[prenom];
Il faut entourer la clé (prenom) par des apostrophes ou des guillemets.
Pareil pour les autres lignes.
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
30 déc. 2009 à 12:23
30 déc. 2009 à 12:23
J'ai modifié le code du fichier php :
Malheureusement, le mail reçu reste identique. Je ne sais pas quoi modifier, les données entrées dans le formulaire ne sont toujours pas transmises.
<?php_track_vars?> <?php $prenom=$_POST['prenom']; $pseudo=$_POST['pseudo']; $email=$_POST['email']; $cat=$_POST['cat']; $categorie=$_POST['categorie']; $sujet=$_POST['sujet']; $corps=$_POST['corps']; $oksite=$_POST['oksite']; $view=$_POST['view']; $okmail=$_POST['okmail']; $msg = "Prenom:\t$prenom\n"; $msg .= "Pseudo:\t$pseudo\n"; $msg .= "E-Mail:\t$email\n"; $msg .= "Type de message:\t$cat\n"; $msg .= "Categorie:\t$categorie\n"; $msg .= "Objet:\t$sujet\n\n"; $msg .= "$corps\n\n"; $msg .= "Autoriser la publication sur le site:\t$oksite\n"; $msg .= "Afficher:\t$view\n"; $msg .= "Envoi de la reponse par mail:\t$okmail\n\n"; $recipient = "contsite4095@hotmail.fr"; $subject = "Espace internautes de instrumentsdemusique.site40.net"; $mailheaders = "From: instrumentsdemusique <> \n"; $mailheaders .= "Reply-To: $email\n\n"; mail($recipient, $subject, $msg, $mailheaders); echo "<html><head>"; echo "<title>Message envoyé !</title></head><body background=\"contact0.gif\">"; echo "<p align=\"center\"><font color=\"#483D8B\">Merci beaucoup de contribuer à l'amélioration du site.<br />Votre message a été envoyé !"; echo "<br /><br /><a href=\"contact0.html\" target=\"_self\">Retour à l'espace internautes</a></font></p>"; echo "</body></html>"; ?>
Malheureusement, le mail reçu reste identique. Je ne sais pas quoi modifier, les données entrées dans le formulaire ne sont toujours pas transmises.
avion-f16
Messages postés
19246
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 avril 2024
4 497
30 déc. 2009 à 12:29
30 déc. 2009 à 12:29
Ajoute ce bout de code poau début du script PHP :
Tu pourrais aussi vérifier si les champs ne sont pas vides avant d'envoyer le formulaire.
Fais un trim sur toutes les variables, et pour vérifier :
var_dump($_POST); echo '<br />'; echo '<pre>'.print_r($_POST,1).'</pre>';
Tu pourrais aussi vérifier si les champs ne sont pas vides avant d'envoyer le formulaire.
Fais un trim sur toutes les variables, et pour vérifier :
if(empty($var1) || empty($var2) || ...) { echo 'Un ou plusieurs champ(s) est/sont vide(s)'; } else { // tu génères le message et tu envoies le mail }
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
30 déc. 2009 à 12:38
30 déc. 2009 à 12:38
Désolé, je viens d'essayer mais le mail demeure identique. En revanche,
s'affiche en haut de la page de confirmation d'envoi.
array(0) { } Array ( )
s'affiche en haut de la page de confirmation d'envoi.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
30 déc. 2009 à 12:40
30 déc. 2009 à 12:40
Je vais essayer le if...else
jjsteing
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
181
30 déc. 2009 à 12:46
30 déc. 2009 à 12:46
Bonjour,
je me permet d intervenir...
Tu peux avoir des soucis d envoie de mail a cause de :
- ton serveur php (local ou distant) n est pas configurer pour envoyer des mail
- change tes /n en ."\n". (ex : $msg = 'Formulaire de contact'."\n"."\n"."\n"."\n"; )
pour vérifier rapidement le point 1, cré un fichier php vierge et met ce code :
en remplacant destinataire@moi.com et toi@toi.com par ton adresse perso..
Si tu ne recoit pas de mail c'est que déjà ta config n'est pas bonne.
Dans ce cas:
- Tu heberge en local -> modifi le fichier php.ini
sinon, c'est que ton hebergeur n accepte pas l envoie de mail... dans ce cas, faut payer ou changer d hebergeur ;)
je me permet d intervenir...
Tu peux avoir des soucis d envoie de mail a cause de :
- ton serveur php (local ou distant) n est pas configurer pour envoyer des mail
- change tes /n en ."\n". (ex : $msg = 'Formulaire de contact'."\n"."\n"."\n"."\n"; )
pour vérifier rapidement le point 1, cré un fichier php vierge et met ce code :
<?php if(mail('destinataire@moi.com', 'Test', 'texte',"From: toi@toi.com")) { echo ' <div style="padding-left:240px; margin-top: 10px; margin-bottom:-10px">Votre message a bien été envoyé.</div>'; } else { echo ' <div style="padding-left:240px; margin-top: 10px; margin-bottom:-10px">Votre message n\' a pu être transmis. Merci de réessayé.</div>'; } ?>
en remplacant destinataire@moi.com et toi@toi.com par ton adresse perso..
Si tu ne recoit pas de mail c'est que déjà ta config n'est pas bonne.
Dans ce cas:
- Tu heberge en local -> modifi le fichier php.ini
sinon, c'est que ton hebergeur n accepte pas l envoie de mail... dans ce cas, faut payer ou changer d hebergeur ;)
avion-f16
Messages postés
19246
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 avril 2024
4 497
30 déc. 2009 à 13:12
30 déc. 2009 à 13:12
ton serveur php (local ou distant) n est pas configurer pour envoyer des mail
On peut oublier cette solution parce que il reçoit quand même le mail.
Je penses que c'est parce que tu fais mal les vérifications : même si les champs sont vide (c'est le cas quand on arrive sur la page du formulaire, même sans avoir cliquer le bouton), le mail est envoyé
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
30 déc. 2009 à 14:36
30 déc. 2009 à 14:36
J'ai amélioré le code php :(le code est un peu compliqué, car certains champs ne sont pas obligatoires)
Et ça ne marche toujours pas. Avec ce fichier, on voit bien que le contenu du formulaire n'est pas récupéré car il affiche toujours la page de l'erreur 1, même en remplissant les deux champs. Merci de m'aider car je progresse petit à petit, mais le problème est toujours là.
<?php_track_vars?> <?php //Recuperation des donnees $prenom=$_POST['prenom']; $pseudo=$_POST['pseudo']; $email=$_POST['email']; $cat=$_POST['cat']; $categorie=$_POST['categorie']; $sujet=$_POST['sujet']; $corps=$_POST['corps']; $oksite=$_POST['oksite']; $view=$_POST['view']; $okmail=$_POST['okmail']; //Detection d'erreurs if((empty($prenom)&&empty($pseudo))||(empty($email)&&($okmail=="mailok"))||(empty($sujet)||empty($corps))){ echo "<html><head>"; echo "<title>Erreur</title></head>"; echo "<body bgcolor=\"#FFB6C1\"><img src=\"../warning.gif\" /> <font color=\"#FF0000\">"; if(empty($prenom)&&empty($pseudo)){ echo "Erreur 1 : remplissez au moins un des champs \"Prénom\" ou \"Pseudonyme\"<br />"; } else{ if(empty($email)&&($okmail=="mailok")){ echo "Erreur 3 : l'envoi de la réponse par mail demandé ne pourra pas se faire (e-mail non spécifié)<br />"; } else{ if(empty($sujet)||empty($corps)){ echo "Erreur 2 : le message n'a pas de titre ou de contenu.<br />"; } } } echo "<a href=\"contact0.html#haut\" target=\"_self\">Retour</a></font></body></html>"; } else{ //Generation du message //remplissage des variables vides if(empty($prenom)){ $prenom="anonyme"; } if(empty($pseudo)){ $pseudo="anonyme"; } if(empty($email)){ $email=0; } if(empty($oksite)){ $oksite="non"; } if(empty($okmail)){ $okmail="non"; } //Creation du message $msg = "Prenom:\t$prenom\n"; $msg .= "Pseudo:\t$pseudo\n"; $msg .= "E-Mail:\t$email\n"; $msg .= "Type de message:\t$cat\n"; $msg .= "Categorie:\t$categorie\n"; $msg .= "Objet:\t$sujet\n\n"; $msg .= "$corps\n\n"; $msg .= "Autoriser la publication sur le site:\t$oksite\n"; $msg .= "Afficher:\t$view\n"; $msg .= "Envoi de la reponse par mail:\t$okmail\n\n"; $recipient = "contsite4095@hotmail.fr"; $subject = "Espace internautes de instrumentsdemusique.site40.net"; $mailheaders = "From: instrumentsdemusique <> \n"; $mailheaders .= "Reply-To: $email\n\n"; //envoi mail($recipient, $subject, $msg, $mailheaders); //reponse echo "<html><head>"; echo "<title>Message envoyé !</title></head><body background=\"contact0.gif\">"; echo "<p align=\"center\"><font color=\"#483D8B\">Merci beaucoup de contribuer à l'amélioration du site.<br />Votre message a été envoyé !"; echo "<br /><br /><a href=\"contact0.html\" target=\"_self\">Retour à l'espace internautes</a></font></p>"; echo "</body></html>"; } ?>
Et ça ne marche toujours pas. Avec ce fichier, on voit bien que le contenu du formulaire n'est pas récupéré car il affiche toujours la page de l'erreur 1, même en remplissant les deux champs. Merci de m'aider car je progresse petit à petit, mais le problème est toujours là.
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
30 déc. 2009 à 14:43
30 déc. 2009 à 14:43
Mon hébergeur prend en charge la fonction mail() (je suis allé voir sur son site).
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
30 déc. 2009 à 15:10
30 déc. 2009 à 15:10
Le mail n'est envoyé que lorsque je clique sur le bouton 'Envoyer'. Visiter la page du formulaire sans appuyer sur ce bouton ne m'envoie rien. Le problème est que ce qui est entré dans le formulaire n'est pas stocké dans les variables correspondantes du code php, et je ne sais pas ce qu'il faut faire pour que ça marche. Se pourrait-il qu'il s'agisse d'un mauvais encodage des caractères (dans l'enregistrement des fichiers contact0.html(ANSIasUTF-8) et email.php(UTF-8)) ou un doctype à préciser ?
avion-f16
Messages postés
19246
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 avril 2024
4 497
30 déc. 2009 à 16:03
30 déc. 2009 à 16:03
Teste avec ce script (tu n'as que la ligne 14 à modifier)
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
30 déc. 2009 à 16:23
30 déc. 2009 à 16:23
Avec ce script ça marche, je vais observer les différences.
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
30 déc. 2009 à 18:35
30 déc. 2009 à 18:35
Ouf!!!
Ca y est ça marche ! En fait le problème n'était pas dans le fichier php mais dans la balise <form> du formulaire.
En fait, il faut écrire
Pour ceux qui sont intéressés, je vous donne les codes qui marchent.
Le formulaire :
Le fichier de traitement email.php :
J'espère que cela épargnera certains de nombreuses heures de recherche et d'essais laborieux...
Ca y est ça marche ! En fait le problème n'était pas dans le fichier php mais dans la balise <form> du formulaire.
En fait, il faut écrire
enctype="multipart/form-data"et non text/plain, d'où le problème de transmission des données. Merci quand même pour m'avoir aidé à améliorer le code php.
Pour ceux qui sont intéressés, je vous donne les codes qui marchent.
Le formulaire :
<form method="post" name="postquestion" enctype="multipart/form-data" action="email.php"> Prénom : <input type="text" size="31" maxlength="20" name="prenom" /><br /> Pseudonyme : <input type="text" size="26" maxlength="20" name="pseudo" /><br /> Adresse e-mail : <input type="text" size="24" name="email" /><br /> Type de message : <input type="radio" name="cat" value="question" checked="checked" /> question musicale <input type="radio" name="cat" value="suggestion" /> suggestion<br /> Catégorie : <select name="categorie"> <option value="instruments">Instruments de musique et ensembles</option> <option value="theorie">Solfège et lecture de partition (théorie)</option> <option selected="true" value="autre">Générale</option> <option value="jeux">Jeux</option> </select> <br /> Titre du message :<br /> <input type="text" name="sujet" size="92" maxlength="52" /><br /> Message :<br /> <textarea cols="72" rows="10" name="corps" value="texte">Bonjour,</textarea><br /> <br /> <input type="checkbox" name="oksite" checked="checked" /> Autoriser la publication du message sur ce site.<br /> Si oui, afficher : <input type="radio" name="view" value="pseudo" /> votre pseudo <input type="radio" name="view" value="prenom" checked="checked" /> votre prénom<br /> <input type="checkbox" name="okmail" /> Envoi de la réponse par mail.*<br /> <br /> <input type="submit" name="envoi" value="Envoyer" /> <input type="reset" name="annule" value="Effacer" /> </form>
Le fichier de traitement email.php :
<?php_track_vars?> <?php //Recuperation des donnees $prenom=htmlspecialchars($_POST['prenom'],ENT_QUOTES); $pseudo=htmlspecialchars($_POST['pseudo'],ENT_QUOTES); $email=htmlspecialchars($_POST['email'],ENT_QUOTES); $cat=htmlspecialchars($_POST['cat'],ENT_QUOTES); $categorie=htmlspecialchars($_POST['categorie'],ENT_QUOTES); $sujet=htmlspecialchars($_POST['sujet'],ENT_QUOTES); $corps=htmlspecialchars($_POST['corps'],ENT_QUOTES); $oksite=htmlspecialchars($_POST['oksite'],ENT_QUOTES); $view=htmlspecialchars($_POST['view'],ENT_QUOTES); $okmail=htmlspecialchars($_POST['okmail'],ENT_QUOTES); //Detection d'erreurs if((empty($prenom)&&empty($pseudo))||(empty($email)&&($okmail=="mailok"))||(empty($sujet)||empty($corps))){ echo "<html><head>"; echo "<title>Erreur</title></head>"; echo "<body bgcolor=\"#FFB6C1\"><img src=\"../warning.gif\" /> <font color=\"#FF0000\">"; if(empty($prenom)&&empty($pseudo)){ echo "Erreur 1 : remplissez au moins un des champs \"Prénom\" ou \"Pseudonyme\"<br />"; } else{ if(empty($email)&&($okmail=="on")){ echo "Erreur 3 : l'envoi de la réponse par mail demandé ne pourra pas se faire (e-mail non spécifié)<br />"; } else{ if(empty($sujet)||empty($corps)){ echo "Erreur 2 : le message n'a pas de titre ou de contenu.<br />"; } } } echo "<a href=\"contact0.html#haut\" target=\"_self\">Retour</a></font></body></html>"; } else{ //Generation du message //remplissage des variables vides if(empty($prenom)){ $prenom="anonyme"; } elseif(empty($pseudo)){ $pseudo="anonyme"; } elseif(empty($email)){ $email=0; } elseif(empty($oksite)){ $oksite="non"; } elseif(empty($okmail)){ $okmail="non"; } //Creation du message $msg = "Prenom:\t$prenom\n"; $msg .= "Pseudo:\t$pseudo\n"; $msg .= "E-Mail:\t$email\n"; $msg .= "Type de message:\t$cat\n"; $msg .= "Categorie:\t$categorie\n"; $msg .= "Objet:\t$sujet\n\n"; $msg .= "$corps\n\n"; $msg .= "Autoriser la publication sur le site:\t$oksite\n"; $msg .= "Afficher:\t$view\n"; $msg .= "Envoi de la reponse par mail:\t$okmail\n\n"; $recipient = "contsite4095@hotmail.fr"; $subject = "Espace internautes de instrumentsdemusique.site40.net"; $mailheaders = "From: instrumentsdemusique <> \n"; $mailheaders .= "Reply-To: $email\n\n"; $mailheaders .= 'X-Mailer: PHP/'.phpversion(); //envoi mail($recipient, $subject, $msg, $mailheaders); //reponse echo "<html><head>"; echo "<title>Message envoyé !</title></head><body background=\"contact0.gif\">"; echo "<p align=\"center\"><font color=\"#483D8B\">Merci beaucoup de contribuer à l'amélioration du site.<br />Votre message a été envoyé !"; echo "<br /><br /><a href=\"contact0.html\" target=\"_self\">Retour à l'espace internautes</a></font></p>"; echo "</body></html>"; } ?>
J'espère que cela épargnera certains de nombreuses heures de recherche et d'essais laborieux...
avion-f16
Messages postés
19246
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 avril 2024
4 497
30 déc. 2009 à 18:41
30 déc. 2009 à 18:41
Je ne penses pas que ce soit la solution, car je ne précises jamais l'enctype sauf avec l'upload de fichier.
Mais si ça fonctionne, alors tant mieux (peux-être que ton hébergeur oblige à préciser un enctype).
Mais si ça fonctionne, alors tant mieux (peux-être que ton hébergeur oblige à préciser un enctype).
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
30 déc. 2009 à 19:35
30 déc. 2009 à 19:35
Si si, c'était bien ça le problème.
L'hébergeur ne le force sans doute pas, mais lui l'imposait en text/plain.
S'il avait simplement supprimé l'attribut enctype, cela aurait fonctionné aussi !
L'hébergeur ne le force sans doute pas, mais lui l'imposait en text/plain.
S'il avait simplement supprimé l'attribut enctype, cela aurait fonctionné aussi !