Formulaire - Gros Soucis pour récuperer les données !

Eléphanteau du PHP | 31 Messages

28 janv. 2009, 14:19

Voila, mon formulaire fonctionnait "parfaitement" jusqu'au moment ou je le teste et je m'aperçois que lors de l'envoi, et bien je ne reçois que le contenu du "message" et rien d'autres ... donc en gros il ne me sert à rien !

Je cherche comment faire mais ce n'est pas si simple ... si quelqu'un veut bien me filer un pti coup de pouce ! :)

En gros evidemment j'aimerais recevoir les données de toutes les cases ... et pas seulement le contenu du message.

Voici mon code :

<?php

// Dans la ligne qui suit l'adresse email à laquelle les messages devront être envoyés

$email_webmaster = "[email protected]";

// === traitement des données du formulaire ============================================================

if (isset($_POST["envoyer"])){

// le formulaire a été soumis

        $etat = "erreur";

// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur

// --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---

		if (isset($_POST["nom"])) {

                 $_POST["nom"]=trim(stripslashes($_POST["nom"]));

        }

		if (isset($_POST["prenom"])) {

                 $_POST["prenom"]=trim(stripslashes($_POST["prenom"]));

        }

		if (isset($_POST["adresse"])) {

                 $_POST["adresse"]=trim(stripslashes($_POST["adresse"]));

        }

		if (isset($_POST["tel"])) {

                 $_POST["tel"]=trim(stripslashes($_POST["tel"]));

        }

        if (isset($_POST["email_expediteur"])) {

                 $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));

        }

        if (isset($_POST["message"])) {

                 $_POST["message"]=trim(stripslashes($_POST["message"]));

        }

        // --- test de la validité des champs saisis ---

       

		if (empty($_POST["nom"])) {

// le nom est vide

                 $erreur="Saisissez votre nom...";

        }

		elseif (empty($_POST["prenom"])) {

// le prenom est vide

                 $erreur="Saisissez votre prénom...";

        }

		elseif (empty($_POST["adresse"])) {

// l'adresse est vide

                 $erreur="Saisissez votre adresse...";

        }

		elseif (empty($_POST["tel"])) {

// il manque le tel de l'expéditeur

                 $erreur="Saisissez votre numéro de téléphone...";

        }

		elseif (!eregi("[0-9]",$_POST["tel"])){   

// le tel n'est pas valide

                 $erreur="Votre numéro de téléphone n'est pas valide...";

        }

		elseif (empty($_POST["email_expediteur"])) {

// il manque l'email de l'expéditeur

                 $erreur="Saisissez votre adresse email...";

        }

        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email_expediteur"])){

// l'adresse e-mail n'est pas valide

                 $erreur="Votre adresse e-mail n'est pas valide...";

        }

		elseif (empty($_POST["message"])) {

// le message est vide

                 $erreur="Saisissez votre message...";

        }

        else {

// --- tous les champs sont correctement remplis: on pourra envoyer le mail ---

                 $etat="ok";

        }

}

else {

// --- le formulaire n'a pas été soumis ---

           $etat="attente";

}

// === fin de traitement des données du formulaire =======================================================

?>

<h2>Formulaire E-mail</h2>

<p>Contactez moi en remplissant le formulaire* ci-dessous pour m'envoyer vos demande de devis ou vos commandes</p>

<?php

if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur

         if ($etat=="erreur"){

//le formulaire a été soumis avec une erreur

                         echo "<p><strong>".$erreur."</strong></p>\n";

// afficher le message d'erreur

         }

?>

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>?page=mail">



<div class="form1">

<fieldset>



<p>

<label for="mr"><input type="radio" name="genre" value="monsieur" id="monsieur" />Mr</label>

<label for="mme"><input type="radio" name="genre" value="madame" id="madame" />Mme</label>

<label for="mlle"><input type="radio" name="genre" value="mademoiselle" id="mademoiselle" />Mlle</label>

</p>



<p>

<label for="nom">Nom : </label><span style="color: #cc0000;">*</span><br />

<input type="text" size="20" maxlength="50" name="nom" id="nom" value="<?php

if (!empty($_POST["nom"])) {

// le titre du message a été saisi: le réafficher

echo htmlspecialchars($_POST["nom"],ENT_QUOTES);

}

?>" />

</p>



<p>

<label for="prenom">Prénom : </label><span style="color: #cc0000;">*</span><br />

<input type="text" size="20" maxlength="50" name="prenom" id="prenom" value="<?php

if (!empty($_POST["prenom"])) {

// le titre du message a été saisi: le réafficher

echo htmlspecialchars($_POST["prenom"],ENT_QUOTES);

}

?>" />

</p>



<p>

<label for="adresse">Adresse : </label><span style="color: #cc0000;">*</span><br />

<input type="text" size="20" maxlength="125" name="adresse" id="adresse" value="<?php

if (!empty($_POST["adresse"])) {

// le titre du message a été saisi: le réafficher

echo htmlspecialchars($_POST["adresse"],ENT_QUOTES);

}

?>" />

</p>



<p>

<label for="tel">Téléphone : </label><span style="color: #cc0000;">*</span><br />

<input type="text" size="20" maxlength="50" name="tel" id="tel" value="<?php

if (!empty($_POST["tel"])) {

// le titre du message a été saisi: le réafficher

echo htmlspecialchars($_POST["tel"],ENT_QUOTES);

}

?>" />

</p>



<p>

<label for="email_expediteur">Votre mail : </label><span style="color: #cc0000;">*</span><br />

<input type="text" size="20" maxlength="50" name="email_expediteur" id="email_expediteur" value="<?php

if (!empty($_POST["email_expediteur"])) {

// l'adresse email de l'expéditeur a été saisie: la réafficher

echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);

}

?>" />

</p>



</fieldset>



</div>



<div class="form2">



<fieldset>



<p>

<label for="devis"><input type="radio" name="choice" value="devis" id="devis" />Devis</label>

<label for="commande"><input type="radio" name="choice" value="commande" id="commande" />Commande</label>

</p>



<p><label for="modele">Modèle :</label><br />

<input name="modele" type="text" size="20" maxlength="50" />

</p>



<p><label for="quantite">Quantité :</label><br />

<select name="quantite">

<option value="choix" selected="selected">Choisissez la quantité</option>

<option value="1">1</option>

<option value="2">2</option>

<option value="3">3</option>

<option value="4">4</option>

<option value="5">5</option>

<option value="5">6</option>

<option value="5">7</option>

<option value="5">8</option>

<option value="5">9</option>

<option value="5">10</option>

</select>

</p>



<p><label for="taille">Taille :</label><br />

<select name="taille">

<option value="choix" selected="selected">Choisissez une taille</option>

<option value="s">S</option>

<option value="m">M</option>

<option value="l">L</option>

<option value="xl">XL</option>

<option value="xxl">XXL</option>

<option value="xxxl">XXXL</option>

</select>

</p>



<p>

<label for="message">Message : </label><span style="color: #cc0000;">*</span><br />

<textarea name="message" id="message" cols="30" rows="3"><?php

if (isset($_POST["message"])) {

// le message a été saisi: le réafficher

echo htmlspecialchars($_POST["message"],ENT_QUOTES);

}

?>

</textarea>

</p>



</fieldset></div>



<p><div class="envoyer"><input type="hidden" name="envoyer" value="envoyer" /><input type="image" name="envoyer" src="visuels/images/envoyer.png" width="105" height="45" alt="Validation du formulaire" value="envoyer" />

<span style="visibility: hidden;"><input type="submit" value="envoyer" title="Validation du formulaire" /></span></div></p></form>



<?php

}

else {

// le formulaire a été soumis sans erreur, on envoie le mail

        $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";

        $entete .= "MIME-Version: 1.0";

        if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){

// mail envoyé

                echo "<p>Votre message a été envoyé.<br/>\n";

                echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=mail\">Envoyer un autre message...</p></a>\n";

        }

        else {

// erreur lors de l'envoi du mail

                echo "<p><strong>Un problème s'est produit lors de l'envoi du message.</strong></p>\n";

                echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=mail\"><p>Envoyer un autre message...</p></a>\n";

        }

}

?>

Ps : je pense que mon problème se situe dans la dernière portion de code php tout en bas ..., j'ai déjà essayé pas mal de solutions mais je n'y parviens pas ...

Merci à vous !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

28 janv. 2009, 16:30

Je n'ai pas lu tout le code mais en parcourant rapidement il ne me semble pas avoir vu la donnée "titre" que tu tentes de récupérer.

ViPHP
ViPHP | 1996 Messages

28 janv. 2009, 16:52

Si tu mets un
<pre>
<?php print_r ($_POST); ?>
</pre>
Tu obtiens quoi ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 31 Messages

28 janv. 2009, 17:13

J'ai réussi à tout recevoir en ajoutant ça dans la dernière portion de mon code php :
<?php
}
else {
		
		// le formulaire a été soumis sans erreur, on envoie le mail

        $entete = "From: ".$email_expediteur." <".$email_expediteur.">\n";

		$entete .= "Reply-to : $email_webmaster <$email_webmaster>\n";

		$entete .= "$genre\n";
		$entete .= "$nom\n";
        $entete .= "$prenom\n";
		$entete .= "$adresse\n";
		$entete .= "$tel\n";
		$entete .= "$email_expediteur\n";	
		$entete .= "$choice\n";
		$entete .= "$modele\n";
		$entete .= "$quantite\n";
		$entete .= "$taille\n";
	
		$message = "$message\n";
	
        if (@mail($email_webmaster,$_POST["nom"],$message,$entete)){
		
// mail envoyé
                echo "<p>Votre message a été envoyé.<br/>\n";
                echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=mail\">Envoyer un autre message...</p></a>\n";
        }
        else {
// erreur lors de l'envoi du mail
                echo "<p><strong>Un problème s'est produit lors de l'envoi du message.</strong></p>\n";
                echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=mail\"><p>Envoyer un autre message...</p></a>\n";
        }
}
?>
C'est cool !:D

Vous voyez des erreurs ?

Bon les données reçus dans la messagerie s'affiche un peu à la barbare mais c'est mieux que rien ...

Avatar du membre
ViPHP
ViPHP | 3008 Messages

28 janv. 2009, 17:27

Je te conseille de lire ceci : http://www.vulgarisation-informatique.com/mail.php

Tu pourras recevoir un mail tout beau ;)

Eléphanteau du PHP | 31 Messages

28 janv. 2009, 17:29

Je te conseille de lire ceci : http://www.vulgarisation-informatique.com/mail.php

Tu pourras recevoir un mail tout beau ;)
:D

Eléphant du PHP | 50 Messages

28 janv. 2009, 21:02

bonjour, cool que ton pb soit résolu

Une question a quoi sert

<pre> 
<?php print_r ($_POST); ?> 
</pre>
J'ai vu ca plus haut dans le sujet et a quelque endroit sur le forum alors je pose la question ici pour pas polluer le forum

merci d'avance

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 janv. 2009, 21:51

La documentation te donnera toutes les réponses que tu peux rechercher : http://fr2.php.net/print_r

Regarde particulièrement les exemples ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 31 Messages

29 janv. 2009, 15:10

Salut,

Alors en mixant (la dernière partie de php) j'ai réussi à faire en sorte que tout fonctionne ^^

Voila ce que je reçois dans ma boite mail :
Hello,

Ceci est un test ^^

Civilite : monsieur
Nom : Mon nom
Prenom : Mon prénom
Adresse : Mon adresse
Telephone : 0600000000
Email : [email protected]
Devis ou Commande : devis
Modele : Modèle 200
Quantite : 3
Taille : m
Je le reçois en mode "texte simple" j'ai laissé de côté le mode "html" parce que ça n'est pas vraiment concluant [confus]

Par contre il a y encore un truc que je ne pige pas, pourquoi le contenu de ma case "message" se retrouve au dessus de toutes les autres données ... je n'arrive pas à trouver la solution

Voila la portion de code incriminée !
<?php
}
else {		
		// le formulaire a été soumis sans erreur, on envoie le mail
        $entete = "From: ".$email_expediteur." <".$email_expediteur.">\n";
		
	$message .= "" . $boundary . "\n"; 
	$message_txt .="Civilite : $genre \n";
	$message_txt .="Nom : $nom \n";
	$message_txt .="Prenom : $prenom \n";
	$message_txt .="Adresse : $adresse \n";
	$message_txt .="Telephone : $tel \n";
	$message_txt .="Email : $email_expediteur \n";
	$message_txt .="Devis ou Commande : $choice \n";
	$message_txt .="Modele : $modele \n";
	$message_txt .="Quantite : $quantite \n";
	$message_txt .="Taille : $taille \n";
	$message .= "" . $boundary . "\n"; 	
	$message .= $message_txt; 
	
	
        if (@mail($email_webmaster,$_POST["nom"],$message,$entete)){
		
// mail envoyé
                echo "<p>Votre message a été envoyé.<br/>\n";
                echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=mail\">Envoyer un autre message...</p></a>\n";
        }
        else {
// erreur lors de l'envoi du mail
                echo "<p><strong>Un problème s'est produit lors de l'envoi du message.</strong></p>\n";
                echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=mail\"><p>Envoyer un autre message...</p></a>\n";
        }
}
?>
Vous savez comment faire ? :P [/php]

ViPHP
ViPHP | 1996 Messages

29 janv. 2009, 20:38

Je pense que $message n'est pas vide lors de la première ligne. Et si tu met $meesage_text avant $message ?
$message_txt = "" . $boundary . "\n"; 
    $message_txt .="Civilite : $genre \n";
    $message_txt .="Nom : $nom \n";
    $message_txt .="Prenom : $prenom \n";
    $message_txt .="Adresse : $adresse \n";
    $message_txt .="Telephone : $tel \n";
    $message_txt .="Email : $email_expediteur \n";
    $message_txt .="Devis ou Commande : $choice \n";
    $message_txt .="Modele : $modele \n";
    $message_txt .="Quantite : $quantite \n";
    $message_txt .="Taille : $taille \n";
    $message_txt .= $message; 
    $message_txt .= "" . $boundary . "\n";     
    
    if (@mail($email_webmaster,$_POST["nom"],$message_txt,$entete)){ 
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 31 Messages

30 janv. 2009, 10:30

Je pense que $message n'est pas vide lors de la première ligne. Et si tu met $meesage_text avant $message ?
$message_txt = "" . $boundary . "\n"; 
    $message_txt .="Civilite : $genre \n";
    $message_txt .="Nom : $nom \n";
    $message_txt .="Prenom : $prenom \n";
    $message_txt .="Adresse : $adresse \n";
    $message_txt .="Telephone : $tel \n";
    $message_txt .="Email : $email_expediteur \n";
    $message_txt .="Devis ou Commande : $choice \n";
    $message_txt .="Modele : $modele \n";
    $message_txt .="Quantite : $quantite \n";
    $message_txt .="Taille : $taille \n";
    $message_txt .= $message; 
    $message_txt .= "" . $boundary . "\n";     
    
    if (@mail($email_webmaster,$_POST["nom"],$message_txt,$entete)){ 
Salut,

Merci effectivement ça fonctionne.

Voila le bout de code au final :
    $message_txt .="Civilite : $genre \n";
    $message_txt .="Nom : $nom \n";
    $message_txt .="Prenom : $prenom \n";
    $message_txt .="Adresse : $adresse \n";
    $message_txt .="Telephone : $tel \n";
    $message_txt .="Email : $email_expediteur \n";
    $message_txt .="Devis ou Commande : $choice \n";
    $message_txt .="Modele : $modele \n";
    $message_txt .="Quantite : $quantite \n";
    $message_txt .="Taille : $taille \n";
    $message_txt .="Message : $message \n";
    
    if (@mail($email_webmaster,$_POST["nom"],$message_txt,$entete)){ 
Je dirais que la c'est presque parfait pour ma part :D

Je me demande juste si c'est possible de faire un saut de ligne entre les coordonnées et le "message" dans le mail, mais la je cherche la pti bête :lol:

Sinon, à quoi servait ceci :
    $message_txt .= "" . $boundary . "\n"; 
Puisque je les avait mis 2 fois mais au final je les retire et tout fonctionne quand même, en gros ça n'avait pas d'intérêt à être la ?

Merci :wink:

ViPHP
ViPHP | 1996 Messages

30 janv. 2009, 17:18

Le boundary est une frontière pour constitué l'email. Généralement on le créé avec un md5(texte-aléatoire)) histoire qu'il soit rarement retrouvé dans ce même email.
Aussi tu as souvent une structure des emails de la sorte :
  • from, to, ... liste des coordonnées expéditeurs, destinataires
    Boundary
    message en texte
    boundary
    message en HTML
    boundary
    pièce jointe 1
    boundary
    pièce jointe 2
    ...
Donc dans ton exemple, si tu reste en texte, il n'est pas nécessaire de mettre le dernier boundary mais cela gâche en rien l'email...

Pour ton problème, dans ton exemple ajoute simplement un \n pour sauter une ligne
$message_txt .="Taille : $taille \n\n"; 
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr