Formulaire de contact vide à la réception

Résolu/Fermé
jenny131078 Messages postés 170 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 23 mars 2014 - 20 nov. 2010 à 20:58
jenny131078 Messages postés 170 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 23 mars 2014 - 22 nov. 2010 à 19:35
Bonsoir à tous,

Mon site internet est réalisé sous dreamweaver CS3 en html + css.
Aujourd'hui je souhaite y ajouter un formulaire de contact sans passer par la fonction "mailto".
Mon formulaire est réalisé en html sur la page /contact.html qui appelle la page /merci.phd.
Le problème est que quand je remplis le formulaire et essaie de l'envoyer (en ligne ou en local, j'ai testé les 2), le mail est envoyé correctement avec le sujet repris de mon formulaire mais le corps du message est vide.
Je découvre le php et j'ai beaucoup consulté les différents tutos et forums mais je n'arrive pas à voir ce qui ne va pas. Je souhaite également ajouter une fonction de vérification mais mon code plante sans cesse. Quelqu'un a-t-il une idée ? Merci d'avance pour votre aide.

Voici le code du formulaire sur ma page contact.html:

Formulaire</h2>
<form method="post" action="merci.php">
<p>
<label><span class="Style73 Style76">Votre nom :</span></label>
<input type="text" name="nom" size="31"/>
</p>
<p>
<label><span class="Style73 Style76">Votre téléphone :</span></label>
<input type="text" name="telephone" size="25"/>
<br />
<br />
<label><span class="Style73 Style76">Votre e-mail : *</span></label>
<input type="text" name="mail" size="27"/>
<p>
<label for="sujet"><span class="Style73 Style76">Sujet : *</span> <input type="radio" name="sujet" value="renseignements" id="renseignement" /> <label for="renseignement"><span class="Style77">Renseignements</span></label>
<input type="radio" name="sujet" value="devis" id="devis" /> <label for="devis"><span class="Style77">Devis</span></label>
<p>

<label for="message"><span class="Style73 Style76"><br />
Message : *</span><br />
<br />
</label>

<textarea name="message" id="message" rows="10" cols="50">
Tapez votre message ici</textarea>
<p>  </p>
<p>
<input type="submit" value="Valider" />
<input type="reset" value="Effacer" />
</p>
</form>

Et le code php sur la page merci.php :
<?php
$mail = 'contact@domaine.com';
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail))

{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());

$sujet = $_POST['sujet'];

$header = "From: \"Mon Nom\"<contact@domaine.com>".$passage_ligne;
$header.= "Reply-To: \"Mon Nom\"<contact@domaine.com>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;

$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
$formMail = $_POST['mail'];
$formNom = $_POST['nom'];
$formMessage = $_POST['message'];
$message = "$formNom $formMail vous contact via votre formulaire.\n \n message : \n $formMessage";
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;

$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;



$message.= $passage_ligne."--".$boundary.$passage_ligne;

//=====Envoi de l'e-mail
mail($mail,$sujet,$message,$header)

?>


5 réponses

yo, il manques point virgule à la fin de la commande mail()

mail($mail,$sujet,$message,$header)

En php la fonction la plus utile est echo, fait un test avant l'envoi pour vérifier que la variable du message contient bien quelque chose , genre:
echo $message;

Il manques la concaténation sur cette ligne:

$message = "$formNom $formMail vous contact via votre formulaire.\n \n message : \n $formMessage";

Les guillemets sont pour du texte UNIQUEMENT, pour les variables on n'en as pas besoin, si on veut les ajouter(concaténer) il faut utiliser le point comme séparateur et l'antislash(\) sert à "échapper" certains caractères spéciaux.

Sur cette ligne c'est bon:

$message = $passage_ligne."--".$boundary.$passage_ligne;

Par contre erreur sur la ligne suivante(le point devant le = indique qu'on ajoute au lieu de remplacer la valeur):
$message.= "Content-Type: multipart/alternative;".$passage_ligne."

Il faut écrire ceci:
$message.= "Content-Type: multipart/alternative;".$passage_ligne;
je comprends pas l'interêt du passage à la ligne en cas d'email non valide...
Voici la Référence pour le php sur la page de la fonction mail(), à savoir que débutant ou confirmé on passes son temps avec le manuel, c'est inutile d'apprendre toutes les fonctions par coeur^^.
https://www.php.net/manual/fr/function.mail.php
C'est dans le headers(en tête) et non dans le message.

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";


Commencez par un mail tout simple histoire de voir comment ça marche plutôt que de faire des trucs plus compliqués et sans comprendre le fonctionnement et où vous répetez les erreurs qui sont évidentes quand on a fait la version la plus simple.


Euh pour la vérification d'email en gros si l'email est bon on sautes une ligne, s'il est pas bon on sautes 2 lignes?(\r= reurn carriage/retour chariot et \n= newline deux façons qui font en gros la même chose). Il y a une erreur dans la logique, en tout cas c'est pas ce qu'on fait habituelement dans un formulaire, si on demande un champ email et qu'n y met pas un email soit on n'envoit pas le formulaire et on demandes à l'utilisateur de corriger soit on envoit mais sans noter une valeur fausse...

Pour la vérification d'email ou de champ rempli mieux vaut le faire en javascript(qui travaille sur l'ordinateur client) plutôt qu'en php qui doit se connecter au serveur pour fonctionner donc est plus lent et va faire travailler le serveur pour rien dans le cas où le champ est vide ou son contenu non valide.

Bon courage
0
jenny131078 Messages postés 170 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 23 mars 2014 2
21 nov. 2010 à 01:31
Merci pour ta réponse!
Entre temps, j'ai pu constater le nombre d'erreur qu'il y avait dans ce script;)
Je l'ai amélioré et surtout allégé, et il fonctionne.
Je reçois le mail comme je voulais le recevoir. Il faut dire que j'ai supprimé la majorité de ce que j'ai indiqué plus haut.

Maintenant je cherche à valider certains champs que je souhaite rendre obligatoire. Les expressions que j'ai ajouté avec les fonctions "if" et "echo" ne fonctionnent pas du tout, encore une chose que je ne maitrise pas décidément!!!
Je vais suivre ton conseil en utilisant le javascript qui me paraît selon tes indications plus efficace surtout que je souhaiterais que les messages d'erreur apparaissent sous forme de "box".
Si tu as des conseils la dessus je suis preneuse
Merci beaucoup


Voici mon nouveau php :

/*Récupération des variables du formulaire*/
$nom = $_POST['nom'];
$telephone = $_POST['telephone'];
$email = $_POST['mail'];
$message = $_POST['message'];

/*Mise en forme de l'email*/
$msg = "<p>Vous venez de recevoir un message depuis le formulaire du site : https://www.pagesjaunes.fr/ <br />
Voici les informations : <br /><p>
Nom : $nom <br />
Telephone : $telephone <br />
Email : $email <br /><p>
Message : $message</p>";

/*Mise en forme des header*/
$mail = $_POST['mail'];
$header = "From: \"$nom\" <$mail>\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/html; charset=iso-8859-1\r\n";
$header .= "To: \"Mon Site\" <contact@monsite.com>\r\n";
$subject = $_POST['sujet'];

/* Vérification */
if ( $email == "" ) {
echo "Veuillez votre e-mail.";
$erreur = true;
}
if ( $message == "" ) {
echo "Veuillez indiquer votre message.";
$erreur = true;
}

/* Vérification du mail */
$email_regex = "^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+.[a-z0-9-]";
if ( $email == "" OR !eregi( $email_regex , $email ) ) {
echo "Veuillez indiquer un email valide.";
$erreur = true;
}


/* Envoi du mail */
if(mail("contact@monsite.com", $subject, $msg, $header))
{
header('Location: merci.html');
}
else
{
echo "Suite a une erreur, votre message n'a pas été envoyé. Merci de renouveller l'opération.";
?>
0
Voici un de mes vieux code de formulaire en javascript qui as plusieurs inconvénients mais a l'avantage d'indiquer toutes les erreurs, j'ai rajouté des commentaires après les signes //

<head>
		<script type="text/javascript" language="javascript">
function controle()
{
	
var msg="";//création d'une variable vide
	if(document.formulaire.nom.value=='')// si le champ nom ne contient rien
	{
	msg+='Entrez votre nom';
	}
	else if(!isNaN(document.formulaire.nom.value))// si ce n'ets pas un nombre
	{
	msg+='-Nom invalide';
	}

	if(document.formulaire.prenom.value=='')
	{
	msg+='-Entrez votre prénom';
	}
	else if(!isNaN(document.formulaire.prenom.value))
	{
	msg+='-Prénom invalide';
	}
		if(document.formulaire.telephone.value=='')
	{
	msg+='-Entrez votre téléphone';
	}
	else if(isNaN(document.formulaire.telephone.value) || document.formulaire.telephone.value.length<10)
// un peu casse pied puisqu'il faut rentrer excatement 10 chiffres sans //séparateurs
	{
	msg+='-Téléphone invalide';
	}


var verifemail='';
	if(document.formulaire.email.value=='')// il y a mieux avec les expressions //régulières mais ceci marche dans la plupart des cas
	{
	msg+='-Entrez votre email';
	} else if ((document.formulaire.email.value.lastIndexOf(".") < document.formulaire.email.value.indexOf("@")+2 
      || document.formulaire.email.value.lastIndexOf(".") > document.formulaire.email.value.length-3 
      || document.formulaire.email.value.indexOf("@") < 1 ) )
 {
msg+='-Email invalide';
}







	if(document.formulaire.motdepasse.value=='')
	{
	msg+='-Entrez un mot de passe';
	} else if(document.formulaire.verifmdp.value=='')
		{
		msg+='-Confirmez votre mot de passe';
		}
		else if(document.formulaire.motdepasse.value!=document.formulaire.verifmdp.value)
		{
		msg+='-Le mot de passe et sa confirmation sont différents';
		}


	


if(msg==""){// si notre variable msg est vide il n'y a pas d'erreur
// donc c'est envoyé
document.formulaire.method = "POST";
document.formulaire.action="merci.php";// on envoie sur la page qui fait le //traitement
 document.formulaire.submit();
}else{
alert(msg+'\n   -Merci de vérifier votre saisie-');
// sinon on affiche les erreurs
}

}
		</script>
		<noscript>
<!-- ça ne marcheras pas si l'utilisateur a désactivé javascript on l'indiques -->
Vous devez activer le javascript dans votre navigateur
		</noscript>



Bien sûr il faut que chaque zone du formulaire ai le nom correspondant, par exemple :
<form name="formulaire" ...

<input type="text" name="telephone" />


Et pour appliquer notre fonction au formulaire il faut l'indiquer dans le bouton d'envoi:

<input type="button" value="S'inscrire" onClick="controle()" style="background-color:gold;color:blue;font-weight:bold;" />

(note je n'ai pas mis de type="submit" puisque l'on ne le soumets seulement s'il ets bon à la fin de la fonction javascript.

Voici un tuto complet:
https://www.toutjavascript.com/savoir/savoir06_1.php3
0
jenny131078 Messages postés 170 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 23 mars 2014 2
21 nov. 2010 à 02:10
Merci beaucoup, je vais étudier tout ça! et te tiens au courant
Bonne nuit;)))))))))
0

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

Posez votre question
jenny131078 Messages postés 170 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 23 mars 2014 2
22 nov. 2010 à 19:35
Hello,

J'ai testé ton script! Il fonctionne parfaitement pour mon formulaire. Je le ferais évoluer quand je maitriserais mieux tout ça!
Merci beaucoup pour ton aide.
Bonne soirée
0