Page 1 sur 2

Formulaire

Posté : 03 mars 2011, 16:35
par grimo
Salut,

Peut on m'aider à résoudre mon problème. j'aimerais recevoir toutes les infos sur mon mail, ligne rouge qui doit être fausse.

Voilà mon code php pour l envoi du mail.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%codepage%">
<meta name="Generator" content="Serif WebPlus 11.0">
<title>Contact</title>
</head>
<style type="text/css">
<!--
a:link {color: %hyperlink%;}
a:visited {color: %followed%;}
a:hover {color: %rollover%;}
a:active {color: %active%;}
-->
</style>
<body style="background: %background%;">
<?php
// la variable $to defini l'adresse ou l'email sera envoyé
$to='[email protected]';
$subject = "Devis";
// le contenu
$content='de: '.$_POST['Nom'].' '.$_POST['Entreprise'].' '.$_POST['Email'].' '.$_POST[Téléphone'].' '.$_POST['nombre'].' '.$_POST['Nombre_encart'];

// on envoie
mail($to, $subject, $content);
?>
<br><font size="20" face="Arial Black">Merci!</font>
<p><a href="%home%">Accueil</a>
</body>
</html>



Voilà le code html du formulaire.

<form id="form_3" name="devis" action="http://www.placemat.ch/envoi2.php" accept-charset="UTF-8" method="post" target="_self" enctype="text/plain" style="margin:0px; /*MainDivStyle*/" __AddCode="here">
<!--MainDivStart-->


<!-- HTML Frame - Nom txt_34 -->

<!--Preamble-->
<div id="txt_34" style="position:absolute; left:221px; top:362px; width:43px; height:20px;-moz-box-sizing:border-box;box-sizing:border-box; overflow:hidden; /*BorderDivStyle*/" __AddCode="InsideBorderDiv">
<!--BorderDivContents-->
<P class="Normal-P"><label for="edit_24"><span class="Normal-C">Nom</span></label></P>
</div>
<!--Postamble-->


<!-- Form Edit box edit_24 -->

<!--Preamble-->
<div style="position:absolute; left:594px; top:362px; width:156px; height:22px; text-align:left; /*MainDivStyle*/" __AddCode="here">
<!--MainDivStart-->
<input type="text" id="edit_24" name="Nom" size="21" style="width:156px; /*Tag Style*/" value="" __AddCode="here">
<!--MainDivEnd-->
</div>
<!--Postamble-->


<!-- HTML Frame - Entreprise txt_35 -->

<!--Preamble-->
<div id="txt_35" style="position:absolute; left:221px; top:392px; width:89px; height:20px;-moz-box-sizing:border-box;box-sizing:border-box; overflow:hidden; /*BorderDivStyle*/" __AddCode="InsideBorderDiv">
<!--BorderDivContents-->
<P class="Normal-P"><label for="edit_25"><span class="Normal-C">Entreprise</span></label></P>
</div>
<!--Postamble-->


<!-- Form Edit box edit_25 -->

<!--Preamble-->
<div style="position:absolute; left:594px; top:392px; width:154px; height:22px; text-align:left; /*MainDivStyle*/" __AddCode="here">
<!--MainDivStart-->
<input type="text" id="edit_25" name="Entreprise" size="21" style="width:154px; /*Tag Style*/" value="" __AddCode="here">
<!--MainDivEnd-->
</div>
<!--Postamble-->


<!-- HTML Frame - Email txt_36 -->

<!--Preamble-->
<div id="txt_36" style="position:absolute; left:221px; top:422px; width:51px; height:20px;-moz-box-sizing:border-box;box-sizing:border-box; overflow:hidden; /*BorderDivStyle*/" __AddCode="InsideBorderDiv">
<!--BorderDivContents-->
<P class="Normal-P"><label for="edit_27"><span class="Normal-C">Email</span></label></P>
</div>
<!--Postamble-->


<!-- Form Edit box edit_27 -->

<!--Preamble-->
<div style="position:absolute; left:594px; top:422px; width:154px; height:22px; text-align:left; /*MainDivStyle*/" __AddCode="here">
<!--MainDivStart-->
<input type="text" id="edit_27" name="Email" size="21" style="width:154px; /*Tag Style*/" value="" __AddCode="here">
<!--MainDivEnd-->
</div>
<!--Postamble-->


<!-- HTML Frame - Téléphone txt_37 -->

<!--Preamble-->
<div id="txt_37" style="position:absolute; left:221px; top:452px; width:91px; height:20px;-moz-box-sizing:border-box;box-sizing:border-box; overflow:hidden; /*BorderDivStyle*/" __AddCode="InsideBorderDiv">
<!--BorderDivContents-->
<P class="Normal-P"><label for="edit_28"><span class="Normal-C">Téléphone</span></label></P>
</div>
<!--Postamble-->


<!-- Form Edit box edit_28 -->

<!--Preamble-->
<div style="position:absolute; left:594px; top:452px; width:113px; height:22px; text-align:left; /*MainDivStyle*/" __AddCode="here">
<!--MainDivStart-->
<input type="text" id="edit_28" name="Téléphone" size="14" style="width:113px; /*Tag Style*/" value="" __AddCode="here">
<!--MainDivEnd-->
</div>
<!--Postamble-->


<!-- HTML Frame - Set de table complet Nombr txt_38 -->

<!--Preamble-->
<div id="txt_38" style="position:absolute; left:221px; top:482px; width:357px; height:20px;-moz-box-sizing:border-box;box-sizing:border-box; overflow:hidden; /*BorderDivStyle*/" __AddCode="InsideBorderDiv">
<!--BorderDivContents-->
<P class="Normal-P"><label for="combo_17"><span class="Normal-C">Set de table complet Nombre d'exemplaire</span></label></P>
</div>
<!--Postamble-->


<!-- Combo Box combo_17 -->

<!--Preamble-->
<div style="position:absolute; left:594px; top:482px; width:63px; height:22px; text-align:left; /*MainDivStyle*/" __AddCode="here">
<!--MainDivStart-->
<select id="combo_17" name="nombre" size="1" __AddCode="here">
<option value="" __AddCode="here">Non</option>
<option value="" __AddCode="here">10'000</option>
<option value="" __AddCode="here">20'000</option>
<option value="" __AddCode="here">50'000</option>
</select>
<!--MainDivEnd-->
</div>
<!--Postamble-->


<!-- HTML Frame - Nombre d'encart de 10x9 cm txt_39 -->

<!--Preamble-->
<div id="txt_39" style="position:absolute; left:221px; top:512px; width:240px; height:20px;-moz-box-sizing:border-box;box-sizing:border-box; overflow:hidden; /*BorderDivStyle*/" __AddCode="InsideBorderDiv">
<!--BorderDivContents-->
<P class="Normal-P"><label for="combo_16"><span class="Normal-C">Nombre d'encart de 10x9 cm</span></label></P>
</div>
<!--Postamble-->


<!-- Combo Box combo_16 -->

<!--Preamble-->
<div style="position:absolute; left:594px; top:512px; width:50px; height:22px; text-align:left; /*MainDivStyle*/" __AddCode="here">
<!--MainDivStart-->
<select id="combo_16" name="Nombre_encart" size="1" __AddCode="here">
<option value="" __AddCode="here">Non</option>
<option value="" __AddCode="here">1</option>
<option value="" __AddCode="here">2</option>
<option value="" __AddCode="here">3</option>
<option value="" __AddCode="here">4</option>
</select>
<!--MainDivEnd-->
</div>
<!--Postamble-->


<!-- Form Button butn_5 -->

<!--Preamble-->
<div style="position:absolute; left:221px; top:542px; width:74px; height:22px; text-align:left; /*MainDivStyle*/" __AddCode="here">
<!--MainDivStart-->
<input type="submit" id="butn_5" value="Envoi" __AddCode="here">
<!--MainDivEnd-->
</div>
<!--Postamble-->
</form>


Merci

Re: Formulaire

Posté : 03 mars 2011, 16:54
par xTG
Fais un var_dump($_POST); pour vérifier que tu reçois bien ce que tu veux.

De plus je te conseille vivement de vérifier les champs reçus...
On ne récupère pas ainsi, n'importe comment, des variables dont on n'est pas certain de la valeur.

Re: Formulaire

Posté : 03 mars 2011, 17:02
par grimo
merci de la réponse

Sache que je suis débutant donc si tu pouvais m expliquer plus stp.

J'ai utilisé webplus pour faire cela.

Re: Formulaire

Posté : 03 mars 2011, 17:15
par misterflo
Comme le dit xTG, il faut que tu fasse extrêmement attention à la récupération des valeurs des champs !!

Pour l'erreur de l'envoi du mail, il manque un ' dans $_POST[ICITéléphone']

(Je sais pas pour l'avis des autres, mais moi j'éviterai absolument de mettre des accents dans des variables !)

WebPlus c'est pas génial, un peu comme tout éditeur wysiwyg, ca dépanne, mais c'est toujours mieux de mettre la main à la pâte.
Si tu as un peu de temps, il serait bien plus bénéfique pour toi d'apprendre le HTML / PHP sans passer par des éditeurs wysiwyg. Tu trouve des tonnes de tuto un peu partout sur le net !

Re: Formulaire

Posté : 03 mars 2011, 17:18
par grimo
Ok merci.

Mais j'aimerais avoir le code pour les choix multiple pour recevoir les infos.

Savez vous se que je dois mettre dans la ligne du modèle php pour que je reçoive le toute.

Oui je sais mais c'est un site provisoire pour lancer une petite entreprise et par la suite demander à un pro.
Merci

Re: Formulaire

Posté : 03 mars 2011, 18:59
par misterflo
Tu parle des <select> ?
Si c'est ca, dans les <option value="" ...>, il faut justement remplir le champ value par la valeur que tu veux recevoir, par exemple pour le premier <select> cela donnerai quelque chose comme :
<select name="nombre" size="1" __AddCode="here">
	<option value="non">Non</option>
	<option value="10">10'000</option>
	<option value="20">20'000</option>
	<option value="50">50'000</option>
</select>
Ensuite dans l'email les valeurs de retour seront soit non, soit 10 etc...

Pour protéger les $_POST['...'] il faudrait leur passer un htmlspecialchars ou un htmlentities :
htmlspecialchars($_POST['...'])

Re: Formulaire

Posté : 03 mars 2011, 19:20
par grimo
Donc mon code doit ressembler à cela:

$content='de: '(.$_POST['Nom'].)' '(.$_POST['Entreprise'].)' '(.$_POST['Email'].)' '(.$_POST['Telephone'].)' '<select name="nombre" size="1" __AddCode="here">
<option value="non">Non</option>
<option value="10">10'000</option>
<option value="20">20'000</option>
<option value="50">50'000</option>
</select>;

Merci de réctifier si il le faut.

Re: Formulaire

Posté : 04 mars 2011, 00:48
par misterflo
Non, pas du tout ^^'

Ce doit être comme ca(mon poste précédent) dans ta page du formulaire.

Par contre dans ta page d'envoi de mail, tu récupèreras les valeurs de tes <select> en $_POST comme tu as fait pour les autres, c'est à dire :
$_POST['Nom'] correspond au champ Nom dans ta page formulaire, $_POST['Entreprise'] correspond au champ Entreprise dans le formulaire etc.
Pour les 2 <select> ce sera pareil, $_POST['nombre'] correspond au select du nombre d'exemplaire de set de table, et $_POST['Nombre_encart'] correspond au <select> du Nombre d'encart.

Ensuite pour protéger tes valeurs recus dans tes $_POST['...'], il faut que tu fasse un htmlspecialchars($_POST['...']) pour CHAQUE $_POST.
Par exemple tu peux mettre chacune des valeurs de tes $_POST dans des variables, ce qui sera plus facilement réutilisable dans ta page par la suite.
Ce qui donnerai quelque chose comme ca :
$nom = htmlspecialchars($_POST['Nom']);
$entreprise = htmlspecialchars($_POST['Entreprise']);
$email = htmlspecialchars($_POST['Email']);
$tel = htmlspecialchars($_POST['Téléphone']);
$nb_set = htmlspecialchars($_POST['nombre']);
$nb_encart = htmlspecialchars($_POST['Nombre_encart']);
Ensuite dans le reste de ton traitement tu réutilise tes variables $nom, $entreprise etc., tu sais qu'elles sont déjà traitées comme il faut :)


Si tu as vraiment des difficultés à mettre en place un formulaire, tu devrais voir quelques tutoriels sur internet pour t'aider, afin d'éviter des problèmes de sécurités etc ^^

Re: Formulaire

Posté : 04 mars 2011, 10:56
par grimo
donc mon code html normalement c'est bon, il suffisait de remplir les valeurs manquantes.

et mon php pour l'envoi ressemble à cela:
Manque t'il quelque chose où j'ai mis en rouge pour la liaison?
$subject = "Devis";
// le contenu
$content='de: $nom = htmlspecialchars($_POST['Nom']);
$entreprise = htmlspecialchars($_POST['Entreprise']);
$email = htmlspecialchars($_POST['Email']);
$tel = htmlspecialchars($_POST['Téléphone']);
$nb_set = htmlspecialchars($_POST['nombre']);
$nb_encart = htmlspecialchars($_POST['Nombre_encart']);

// on envoie
mail($to, $subject, $content);
?>

Merci de votre aide

Re: Formulaire

Posté : 04 mars 2011, 12:55
par nee1mpy
La redirection marche mais je ne reçois pas d'email. que faire?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%codepage%">
<meta name="Generator" content="Serif WebPlus 11.0">
<title>Contact</title>
</head>
<style type="text/css">
<!--
a:link {color: %hyperlink%;}
a:visited {color: %followed%;}
a:hover {color: %rollover%;}
a:active {color: %active%;}
-->
</style>
<body style="background: %background%;">
<?php
// la variable $to defini l'adresse ou l'email sera envoyé
$to='[email protected]';
$subject = "Devis";
// le contenu
$nom = ($_POST['Nom']);
$entreprise = ($_POST['Entreprise']);
$email = ($_POST['Email']);
$tel = ($_POST['Telephone']);
$nb_set = ($_POST['nombre']);
$nb_encart = ($_POST['Nombre_encart']);

// on envoie
mail($to, $subject, $nom, $entreprise, $tel, $nb_set, $nb_encart);
?>
<br><font size="20" face="Arial Black">Merci!</font>
<p><a href="%home%">Accueil</a>
</body>
</html>

Re: Formulaire

Posté : 04 mars 2011, 13:40
par misterflo
J'ai l'impression que tu galère pas mal :D
Il serait intéressant (obligatoire ?) de lire quelques tuto de base sur le php, il y en a plein le site et le forum de phpfrance, il y aussi beaucoup d'autres sites qui le font.

Enfin bon, je suis sympa aujourd'hui c'est cadeaux :mrgreen:
Voila le code PHP de ta page d'envoi de mail, il y a juste à remplacer toute ta page d'envoi de mail par celle-ci :
MAIS je le répète, faire un copier-coller c'est mal, il serait plus judicieux que tu comprenne le code que tu utilise, un petit rigolo pourrait mettre des trucs pas sympa dedans et tu pourrais ne pas t'en rendre compte, donc au final je sais pas si c'est sympa de ma part de te fournir le travail déjà fait :P
<?php
//On vérifie s'il faut traiter le formulaire
if (isset($_POST['Nom']) && !empty($_POST['Nom']))
{
	//On vérifie que tous les champs ont étaient remplis
	if (isset($_POST['Entreprise']) && !empty($_POST['Entreprise'])
	&& isset($_POST['Email']) && !empty($_POST['Email'])
	&& isset($_POST['Téléphone']) && !empty($_POST['Téléphone'])
	&& isset($_POST['nombre']) && !empty($_POST['nombre'])
	&& isset($_POST['Nombre_encart']) && !empty($_POST['Nombre_encart']))
	{
		//On vérifie que l'email du contact est un email valide
		if (filter_var($_POST['Email'],FILTER_VALIDATE_EMAIL))
		{
			//Si tous les champs ont étaient remplis on met ces valeurs dans des variables,
			//et on pense à les sécuriser !!!
			$nom = htmlspecialchars(substr($_POST['Nom'],0,300));
			$entreprise = htmlspecialchars(substr($_POST['Entreprise'],0,300));
			$email = htmlspecialchars(substr($_POST['Email'],0,300));
			$telephone = htmlspecialchars(substr($_POST['Téléphone'],0,300));
			$settable = htmlspecialchars(substr($_POST['nombre'],0,300));
			$nbencart = htmlspecialchars(substr($_POST['Nombre_encart'],0,300));

			//Adresse mail du receveur
			$to = "[email protected]";

			//On rédige l'email avec les valeurs du formulaire
			$msg_mail = "Formulaire envoyé par le site internet :

Nom : $nom
Entreprise : $entreprise
Email : $email
Téléphone : $telephone
Nombre d'exemplaire de set de table complet : $settable
Nombre d'encart de 10x9 cm : $nbencart
";

			//On renseigne les headers du mail
			$headers = "From: Devis Placemat<[email protected]>"."\n";
			$headers .= "Reply-to: [email protected]"."\n";
			$headers .= "Content-type: text/html; charset=utf-8"."\n";
			$headers .= "Content-Transfer-Encoding: 8bit"."\n";
			if (@mail($to,'Devis Site',nl2br($msg_mail),$headers))
			{
				$title = "Message envoyé";
				$msg = "<h1>Message envoyé</h1><br />\n";
				$msg .= '<a href="/">Retour à l\'accueil</a>';
			}
			else
			{
				$title = "Erreur d'envoi";
				$msg = "<h1>Impossible d'envoyer le formulaire</h1><br />\n";
				$msg .= "<h3>Veuillez nous excuser pour la gêne occasionnée</h3><br />\n";
				$msg .= '<a href="javascript:history.go(-1)">Retour au formulaire</a>';
			}
		}
		else
		{
			$title = "Erreur dans le formulaire";
			$msg = "<h1>Votre Email n'est pas valide</h1><br />\n";
			$msg .= '<a href="javascript:history.go(-1)">Retour au formulaire</a>';
		}
	}
	else
	{
		$title = "Erreur dans le formulaire";
		$msg = "<h1>Pensez à bien remplir tous les champs du formulaire !</h1><br />\n";
		$msg .= '<a href="javascript:history.go(-1)">Retour au formulaire</a>';
	}
}
//Si l'utilsateur arrive sur cette page sans avoir cliqué sur le bouton envoi alors on redirige vers la page du formulaire
else
{
	header('Location: formulaire.html');
	exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta http-equiv="Content-Language" content="fr" />

	<title><?php if (isset($title)) echo $title; ?></title>

</head>
<body>
<?php
if (isset($msg)) echo $msg;
?>
</body>
</html>
Autre chose, dans ta page du formulaire, pour ton <select> avec le nombre de set de table, au lieu de mettre 10,20,50 met plutôt 10000, 20000,50000 !
Ta valeur Téléphone dans ta page de formulaire, tu as enlevé les accents ? Car dans ton dernier poste tu mets $_POST['Telephone'], si oui, dans le code que j'ai mis pense aussi à le remodifier !

Ce que tu as fait à la fin n'est pas trop mal, faut bien penser à faire un htmlspecialchars à tous tes $_POST.
Ensuite l'autre problème c'est que la fonction mail() ne s'utilise pas comme ca.
mail(ADRESSE DESTINATAIRE, SUJET DU MAIL, MESSAGE DU MAIL, EN-TETE);

en clair, avec des variables 

mail($to, $subject, $message, $headers);
Le problème venait du fait que tu mettais les variables $nom, $entreprise etc, dans la fonction mail, il faudrait plutôt faire comme j'ai fais dans le code au dessus, c'est à dire faire une variable $message et dedans lui passer toutes les autres variables.

Re: Formulaire

Posté : 04 mars 2011, 14:17
par grimo
Je te remercie pour tout. J'ai donc tout copier coller dans ma page d envois.

j ai changé les accents et publié.

je remplis le formulaire j envois, c'est ok mais pas de mail sur ma boite mail.

Sais tu d'où cela vient?

Merci après j'embête plus ^^

Re: Formulaire

Posté : 04 mars 2011, 14:35
par misterflo
As-tu bien regardé dans les spam ?

J'ai essayé de mon côté avec ma propre adresse mail et cela fonctionne :?

C'est peut-être un problème au niveau de la configuration du serveur SMTP.

Re: Formulaire

Posté : 04 mars 2011, 15:56
par grimo
En effet c'est un réglage de la messagerie. Ne pouvant pas le résoudre, j'ai changé le mail de réception et cela fonctionne parfaitement.

Merci beaucoup pour ton aide précieuse!

Bonne fin de journée et bon week end :D

Re: Formulaire

Posté : 04 mars 2011, 16:42
par misterflo
Y a pas de quoi ! ;)

Pense à mettre en résolu, cela pourrait éventuellement aider d'autres personnes.

Bon week end à toi aussi