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   -
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
$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   Statut Membre Dernière intervention   354
 
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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   Statut Membre Dernière intervention   354
 
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   Statut Membre Dernière intervention   354
 
Je vais essayer le if...else
0
jjsteing Messages postés 1670 Date d'inscription   Statut Contributeur Dernière intervention   181
 
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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   Statut Membre Dernière intervention   354
 
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   Statut Membre Dernière intervention   354
 
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   Statut Membre Dernière intervention   354
 
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Teste avec ce script (tu n'as que la ligne 14 à modifier)
0
js95 Messages postés 773 Date d'inscription   Statut Membre Dernière intervention   354
 
Avec ce script ça marche, je vais observer les différences.
0
js95 Messages postés 773 Date d'inscription   Statut Membre Dernière intervention   354
 
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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