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
Bonjour,
je débute avec le php, je veux envoyer les données de mon formulaire par mail mais le contenu écrit dedans n'est pas transmis.

Voici le code du formulaire :
<table align="center" width="630" border="3" bordercolor="#0000FF" bgcolor="#00FFFF">
 <tr><td>
<font color="#0000FF" face="Times New Roman" size="3.5">
<div align="center">
Remplissez le formulaire suivant pour poser une question. Vos informations personnelles telles que votre e-mail seront gard&eacute;es secr&egrave;tes.
</div><br />
<form method="post" name="postquestion" enctype="text/plain" action="email.php">
Pr&eacute;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&nbsp;:&nbsp;&nbsp;<input type="radio" name="cat" value="question" checked="checked" />&nbsp;question&nbsp;musicale&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="cat" value="suggestion" />&nbsp;suggestion<br />
Cat&eacute;gorie&nbsp;:&nbsp;
     <select name="categorie">
        <option value="instruments">Instruments de musique et ensembles</option>
        <option value="theorie">Solf&egrave;ge et lecture de partition (th&eacute;orie)</option>
        <option selected="true" value="autre">G&eacute;n&eacute;rale</option>
        <option value="jeux">Jeux</option>
     </select>
<br />
Titre du message&nbsp;:<br />
     <input type="text" name="sujet" size="92" maxlength="52" /><br />
Message&nbsp;:<br />
<textarea cols="72" rows="10" name="corps" value="texte">Bonjour,</textarea><br />
<br />
     <input type="checkbox" name="oksite" checked="checked" value="siteok" />&nbsp;Autoriser la publication du message sur ce site.<br />
	 Si oui, afficher&nbsp;:&nbsp;&nbsp;<input type="radio" name="view" value="pseudo" />&nbsp;votre&nbsp;pseudo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="view" value="prenom" checked="checked" />&nbsp;votre&nbsp;pr&eacute;nom<br />
     <input type="checkbox" name="okmail" value="mailok" />&nbsp;Envoi de la r&eacute;ponse par mail.*<br />
<br />
     <input type="submit" name="envoi" value="Envoyer" />&nbsp;&nbsp;&nbsp;
     <input type="reset" name="annule" value="Effacer" />
</form>
</font>
</td></tr></table>


Voici le fichier de traitement php :
<?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&eacute; !</title></head><body>";
echo "<p>Merci beaucoup de contribuer &agrave; l'am&eacute;lioration du site.<br />Votre message a &eacute;t&eacute; envoy&eacute; !</p>";
echo "</body></html>";

?> 


Le mail reçu est comme ceci :
Prenom:
Pseudo:
E-Mail:
Type de message:
Categorie:
Objet:



Autoriser la publication sur le site:
Afficher:
Envoi de la reponse par mail:
__

Voilà. J'aimerais que les valeurs correspondantes s'affichent. Que dois-je modifier ?
Merci d'avance pour vos réponses.
A voir également:

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
$prenom=$_POST[prenom];
Il faut entourer la clé (prenom) par des apostrophes ou des guillemets.
Pareil pour les autres lignes.
1
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
J'ai modifié le code du fichier php :
<?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&eacute; !</title></head><body background=\"contact0.gif\">";
echo "<p align=\"center\"><font color=\"#483D8B\">Merci beaucoup de contribuer &agrave; l'am&eacute;lioration du site.<br />Votre message a &eacute;t&eacute; envoy&eacute; !";
echo "<br /><br /><a href=\"contact0.html\" target=\"_self\">Retour &agrave; 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.
0
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
Ajoute ce bout de code poau début du script PHP :
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
}
0
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
Désolé, je viens d'essayer mais le mail demeure identique. En revanche,
array(0) { }

Array
(
)

s'affiche en haut de la page de confirmation d'envoi.
0

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
Je vais essayer le if...else
0
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
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 :

<?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 ;)
0
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
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é
0
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
J'ai amélioré le code php :(le code est un peu compliqué, car certains champs ne sont pas obligatoires)
<?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\" />&nbsp;<font color=\"#FF0000\">";
  if(empty($prenom)&&empty($pseudo)){
	echo "Erreur 1 : remplissez au moins un des champs \"Pr&eacute;nom\" ou \"Pseudonyme\"<br />";
	}
  else{
	if(empty($email)&&($okmail=="mailok")){
		echo "Erreur 3 : l'envoi de la r&eacute;ponse par mail demand&eacute; 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&eacute; !</title></head><body background=\"contact0.gif\">";
echo "<p align=\"center\"><font color=\"#483D8B\">Merci beaucoup de contribuer &agrave; l'am&eacute;lioration du site.<br />Votre message a &eacute;t&eacute; envoy&eacute; !";
echo "<br /><br /><a href=\"contact0.html\" target=\"_self\">Retour &agrave; 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à.
0
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
Mon hébergeur prend en charge la fonction mail() (je suis allé voir sur son site).
0
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
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 ?
0
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
Teste avec ce script (tu n'as que la ligne 14 à modifier)
0
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
Avec ce script ça marche, je vais observer les différences.
0
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
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
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&eacute;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&nbsp;:&nbsp;&nbsp;<input type="radio" name="cat" value="question" checked="checked" />&nbsp;question&nbsp;musicale&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="cat" value="suggestion" />&nbsp;suggestion<br />
Cat&eacute;gorie&nbsp;:&nbsp;
     <select name="categorie">
        <option value="instruments">Instruments de musique et ensembles</option>
        <option value="theorie">Solf&egrave;ge et lecture de partition (th&eacute;orie)</option>
        <option selected="true" value="autre">G&eacute;n&eacute;rale</option>
        <option value="jeux">Jeux</option>
     </select>
<br />
Titre du message&nbsp;:<br />
     <input type="text" name="sujet" size="92" maxlength="52" /><br />
Message&nbsp;:<br />
<textarea cols="72" rows="10" name="corps" value="texte">Bonjour,</textarea><br />
<br />
     <input type="checkbox" name="oksite" checked="checked" />&nbsp;Autoriser la publication du message sur ce site.<br />
	 Si oui, afficher&nbsp;:&nbsp;&nbsp;<input type="radio" name="view" value="pseudo" />&nbsp;votre&nbsp;pseudo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="view" value="prenom" checked="checked" />&nbsp;votre&nbsp;pr&eacute;nom<br />
     <input type="checkbox" name="okmail" />&nbsp;Envoi de la r&eacute;ponse par mail.*<br />
<br />
     <input type="submit" name="envoi" value="Envoyer" />&nbsp;&nbsp;&nbsp;
     <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\" />&nbsp;<font color=\"#FF0000\">";
  if(empty($prenom)&&empty($pseudo)){
	echo "Erreur 1 : remplissez au moins un des champs \"Pr&eacute;nom\" ou \"Pseudonyme\"<br />";
	}
  else{
	if(empty($email)&&($okmail=="on")){
		echo "Erreur 3 : l'envoi de la r&eacute;ponse par mail demand&eacute; 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&eacute; !</title></head><body background=\"contact0.gif\">";
echo "<p align=\"center\"><font color=\"#483D8B\">Merci beaucoup de contribuer &agrave; l'am&eacute;lioration du site.<br />Votre message a &eacute;t&eacute; envoy&eacute; !";
echo "<br /><br /><a href=\"contact0.html\" target=\"_self\">Retour &agrave; 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...
0
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
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).
0
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
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 !
0