Problème avec le Formulaire de contact PHP

ANTCOM Messages postés 4 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,

J'ai créé plusieurs sites web en utilisant le même code de formulaire de contact PHP.. Je croyais que ça fonctionnait sans problème mais un de mes clients vient de me signaler récemment un problème : Parfois il reçoit un mail vide !! Et quand j'ai vérifié sur les autres sites, j'ai constaté malheureusement que ce problème existe même sur des plateformes d'hébergeur différentes donc ça vient pas de l'hébergeur. J'ai essayé de vérifier le code mais trouver d'ou vient le problème surtout que le formulaire marche parfois et parfois non !!!!

Alors voici le code:

contact.php
<?php
$TO = "xxx@xxx.com";
$email = $_REQUEST["email"];

$h = "From: " . $TO;

$subject = "Contact depuis Le site web";
$message = "";
while (list($key, $val) = each($HTTP_POST_VARS)) {
$message .= "$key : $val\n";
}
mail($TO, $subject, $message, $h);
Header("Location: message_envoye.html" );
?>


contact.html
 <form method="post" action="contact.php">
             <table width="100%" border="0" align="center" id="table1" style="border-collapse: collapse">
               <tr>
                 <td style="text-align: left"><span class="Style18"> Nom:</span></td>
                 <td><input type="text" name="Nom" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> Prénom:</span></td>
                 <td width="344"><input name="Prenom" type="text" id="Prenom" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> Téléphone: </span></td>
                 <td width="344"><input type="text" name="Telephone" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> E-mail:</span></td>
                 <td width="344"><input type="text" name="Email" size="32" /></td>
               </tr>
               <tr>
                 <td style="text-align: left"><span class="Style18"> Ville:</span></td>
                 <td><input type="text" name="Ville" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> Pays:</span></td>
                 <td width="344"><input name="Pays" type="text" id="Pays" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> Message:</span></td>
                 <td width="344"><textarea rows="5" name="Message" cols="28"></textarea></td>
               </tr>
             </table>
             <p style="text-align: center">
               <input type="submit" value="Envoyer" name="B1" />
               &nbsp;&nbsp;
               <input type="reset" value="Rétablir" name="B2" />
             </p>
           </form>


Merci d'avance pour votre aide

6 réponses

Alain_42 Messages postés 5413 Statut Membre 894
 
Salut, voir commentaires
contact.php

<?php
$TO = "xxx@xxx.com";
$email = $_REQUEST["email"]; //le champ correspondant se nomme Email et pas email
//uitilises plutot $_POST['Email']

$h = "From: " . $TO;
//vas voir sur G... la fonction mail, ton header $h doit être plus "étoffé"
$subject = "Contact depuis Le site web";
$message = "";
//utilises plutot $_POST au lieu de $HTTP_POST_VARS
while (list($key, $val) = each($HTTP_POST_VARS)) {
	$message .= "$key : $val\n";
}
if(mail($TO, $subject, $message, $h)){
	//pour donner la page message envoyé il faut tester !
	Header("Location: message_envoye.html" );
	}else{
		echo 'Pb d\'envoi du mail';
	}
?>
0
ANTCOM Messages postés 4 Statut Membre
 
Merci bcp Alain,

Est ce que peux tu peux m'expliquer plus en détail ce que tu veux dire ici :
$h = "From: " . $TO;
//vas voir sur G... la fonction mail, ton header $h doit être plus "étoffé"


Pour les autres recommandations et corrections c'est OK.

Merci d'avance

NB: Je ne suis pas un programmeur, je suis plutôt un webdesigner
0
Alain_42 Messages postés 5413 Statut Membre 894
 
pour le header $h vas voir ce site:

https://www.vulgarisation-informatique.com/mail.php
0
ANTCOM Messages postés 4 Statut Membre
 
Voila donc le nouveau code:

<?php
$TO = "xxx@xxx.com";
$email = $_POST["Email"];
$headers ='From: "XXX"<xxx@xxx.com>'."\n"; 
$headers .='Reply-To: xxx@xxx.com'."\n"; 
$subject = "contact depuis le site";
$message = "";
while (list($key, $val) = each($_POST)) {
$message .= "$key : $val\n";
}
if(mail($TO, $subject, $message, $h)){
	Header("Location: message_envoye.html" );
	}else{
		echo 'Pb d\'envoi du mail';
	}
?>


Après ces modifications, aucun incident à signaler. Meric bcp pour ton aide Alain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ANTCOM Messages postés 4 Statut Membre
 
Malheureusement je viens de recevoir un nouveau message vide.. Donc le problème n'est pas résolu !!
0
Alain_42 Messages postés 5413 Statut Membre 894
 
salut peut être que l'internaute a envoyé le form sans remplir les champs ?

essayes en faisant une verif par javascript comme ça:

<script type="text/javascript">
 verif_form(){
	//test des champs obligatoires avnt soumission du formulaire
	 //attention il faut que chaque input testé ait un id="...."
	 
	 //verif champ Nom
	 var champ_Nom=document.getElementByid('Nom');
	 if(champ_Nom.value=""){
		alert("Vous devez saisir votre Nom");
		champ_Nom.focus(); //met le curseur dans l'input concerné
		return false; //sort de la fct et empèche l'envoi du formulaire
	 }
	 //
	 //verif champ prenom
	 var champ_Prenom=document.getElementByid('Prenom');
	 if(champ_Prenom.value=""){
		alert("Vous devez saisir votre Prenom");
		champ_Prenom.focus(); //met le curseur dans l'input concerné
		return false; //sort de la fct et empèche l'envoi du formulaire
	 }
	 //
	 
	 //etc tu fais pareil pour tous les champs obligatoires
	 
	 //si on est arrivé la c'est que tous le sinput testés sont ok
	 return true; //autorise l'envoi du formulaire
	 	
}
 </script>
 
 <form method="post" action="contact.php" onsubmit="return verif_form();" >
             <table width="100%" border="0" align="center" id="table1" style="border-collapse: collapse">
               <tr>
                 <td style="text-align: left"><span class="Style18"> Nom:</span></td>
                 <td><input type="text" name="Nom" id="Nom" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> Prénom:</span></td>
                 <td width="344"><input name="Prenom" type="text" id="Prenom" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> Téléphone: </span></td>
                 <td width="344"><input type="text" name="Telephone" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> E-mail:</span></td>
                 <td width="344"><input type="text" name="Email" size="32" /></td>
               </tr>
               <tr>
                 <td style="text-align: left"><span class="Style18"> Ville:</span></td>
                 <td><input type="text" name="Ville" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> Pays:</span></td>
                 <td width="344"><input name="Pays" type="text" id="Pays" size="20" /></td>
               </tr>
               <tr>
                 <td width="70" style="text-align: left"><span class="Style18"> Message:</span></td>
                 <td width="344"><textarea rows="5" name="Message" cols="28"></textarea></td>
               </tr>
             </table>
             <p style="text-align: center">
               <input type="submit" value="Envoyer" name="B1" />
               &nbsp;&nbsp;
               <input type="reset" value="Rétablir" name="B2" />
             </p>
           </form>



tu peux aussi rajouter une verif en php avant d'envoyer le mail
0
Alain_42 Messages postés 5413 Statut Membre 894
 
tel que ton code de contact.php est fait quelqu'un qui tape directement l'url de la page contact.php provoque l'envoi du mail vide, puisque tu n'as pas de $_POST
(pas de passage par le formulaire)

il faut vérifier que l'on est bien passé par le formulaire
<?php
$TO = "xxx@xxx.com";
//$email = $_POST["Email"];
$headers ='From: "XXX"<xxx@xxx.com>'."\n"; 
$headers .='Reply-To: xxx@xxx.com'."\n"; 
$subject = "contact depuis le site";
$message = "";
if(isset($_POST['B1']) && $_POST['B1']==""){
	//pour triater le formulaire et envoyer le mail on verifie que c'est bien le bouton Envoyer qui a été cliqué
	while (list($key, $val) = each($_POST)) {
		//a ce niveau la tu peux aussi vérifier les champs obligatoires
		$message .= "$key : $val\n";
	}
	if(mail($TO, $subject, $message, $h)){
		Header("Location: message_envoye.html" );
	}else{
		echo 'Pb d\'envoi du mail';
	}
}	
?>
0