Pb php formulaire envoi par mail
Résolu
js95
Messages postés
773
Date d'inscription
Statut
Membre
Dernière intervention
-
Reivax962 Messages postés 3672 Date d'inscription Statut Membre Dernière intervention -
Reivax962 Messages postés 3672 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Pb php formulaire envoi par mail
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Programmer envoi mail gmail - Guide
- Publipostage mail - Accueil - Word
- Envoi mail cci - Guide
14 réponses
$prenom=$_POST[prenom];
Il faut entourer la clé (prenom) par des apostrophes ou des guillemets.
Pareil pour les autres lignes.
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.
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 }
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
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 ;)
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é
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à.
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 ?
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...