[php] envoi de mail formulaire.

Bonjour,
Bonjour,
j'ai créé un formulaire en HTML avec les champs nom*, prénom,mail*,sujet,telephone et commentaire*(*étant les champs obligatoire).
A sa j'ai rajouter un fichier javascript qui controle la validation des champs du formulaire,
mon probleme concerne l'envoi des données,

pouvez vous m'aider ?
merci

voici mon fichier .php
<?php

$formNom = $_POST['nom'];
$formPrenom = $_POST['prenom'];
$formMail = $_POST['mail'];
$formSujet = $_POST['sujet'];
$formTel = $_POST['tel'];
$formMessage = $_POST['message'];

$msg="\nNom : ".$formNom."\nPrenom : ".$formPrenom."\nEmail : ".$formMail."\nSujet : ".$formSujet."\nTel : ".$formTel."\nMessage : ".$formMessage."\n";

$entete = "From: ".$formMail."\nContent-Type: text/html; charset=iso-8859-1";
// Envoi du mail
mail($formSujet,$msg,$entete);

header('location:confirmation.htm');
?>
Configuration: Windows XP
Internet Explorer 7.0

41 réponses

Résumé de la discussion

Le cœur du sujet est l'envoi des données d'un formulaire HTML via PHP, avec un script qui valide les champs et tente d'envoyer un mail mais échoue. La meilleure réponse propose d'utiliser mail($email, $sujet, $message) en définissant correctement le destinataire et l'objet, et d'envoyer ensuite une redirection vers une page de confirmation. Des points récurrents évoqués incluent des erreurs de syntaxe dans les appels mail, le format des en-têtes et les difficultés liées aux en-têtes déjà envoyés, ainsi que des tests avec ou sans Javascript. En cas d'erreurs comme 'headers already sent', la discussion rappelle d'éviter tout output avant les headers et de valider le flux entre formulaire, PHP et serveur SMTP.

Bobot (l’IA à votre service)
  1. bon ba ct juste enctype="text/plain" a retirer, si sa peu aider quelqu"un
    merci pour votre aide
    1. le javascript est un fichier externe
      donc el est apeler dan le HTML
      <script language="javascript" src="jave.js" type="text/javascript"></script>

      avant le body
      il fonctionne correctement le probleme vien de la recuperation des donné dan le PHP, enfin jcroi
      1. j'ai parler trop vite sa a fonctionner 2 fois et hop plus rien j'ai du changer le code alor qu'il été bon

        je rapel mon probleme je ercoi pas les dooné rempli dans le formulaire, je recoi bien le mail mais le contenu rempli dans le formulaire
        le javascript fonctionne bien

        le formulaire html :
        <form method="post" action="formu.php"  enctype="text/plain" name="formulaire">
        <input type="text" name="nom" size="30" />
        <input type="text" name="prenom" size="30" />
        <input type="text" name="mail" size="30" />
        <input type="text" name="sujet" size="30" /> 
        <input type="text" name="tel" size="30" />
        <textarea name="message" rows="6" wrap="virtual" cols="30"></textarea>
        <input name="btn" type="submit" value="Valider"  onClick="javascript:return verif();">
        <input name="Submit2" type="reset" class="generalS" value="Effacer">
        


        le javascript qui controle les champs , jave.js:
        function verif() 
        { 
        	var nom = document.formulaire.nom.value;
        	if(document.formulaire.nom.value == "")
        	{
        		alert ('Veuillez entrer votre nom');
        		document.formulaire.nom.focus();
        		return false;
        	}
        	else
        	if(document.formulaire.mail.value == "") {
          		alert("Veuillez entrer votre adresse electronique");
          		document.formulaire.mail.focus();
          		return false;
         	}
         	else
        	if(document.formulaire.mail.value.indexOf('@') == -1) {
          		alert("Ce n'est pas une adresse electronique valide, verifiez la svp");
          		document.formulaire.mail.focus();
          		return false;
         	}
         	if(document.formulaire.message.value == "")
        	{
          		alert("Veuillez entrer votre message");
          		document.formulaire.message.focus();
          		return false;
         	}
        	else {return true;}
        
        }


        et enfin le formu.php :
        <?php 
        
        $formNom = $_POST['nom']; 
        $formPrenom = $_POST['prenom']; 
        $formMail = $_POST['mail']; 
        $formSujet = $_POST['sujet']; 
        $formTel = $_POST['tel']; 
        $formMessage = $_POST['message']; 
        
        
        $email = "xxxx@free.fr"; 
        $message = "Nom : \n".$formNom."\n\n"; 
        $message .= "Prénom : \n $formPrenom\n\n"; 
        $message .= "Email : \n $formMail \n\n"; 
        $message .= "Téléphone : \n $formTel\n\n"; 
        $message .= "Message : \n $formMessage\n"; 
        
        mail($email,$sujet,$message); 
        
        header("Location:confirmation.htm"); 
        
        ?> 
        


        a savoir que le javascript et le php sont des fichiers externes

        merci de votre aide
        1. j'ai parler trop vite sa a fonctionner 2 fois et hop plus rien j'ai du changer le code alor qu'il été bon

          je rapel mon probleme je ercoi pas les dooné rempli dans le formulaire, je recoi bien le mail mais le contenu rempli dans le formulaire
          le javascript fonctionne bien

          le formulaire html :
          <code>
          <form method="post" action="formu.php" enctype="text/plain" name="formulaire">
          <input type="text" name="nom" size="30" />
          <input type="text" name="prenom" size="30" />
          <input type="text" name="mail" size="30" />
          <input type="text" name="sujet" size="30" />
          <input type="text" name="tel" size="30" />
          <textarea name="message" rows="6" wrap="virtual" cols="30">
          1. c'est résolu j'avais inversé betement le "method" et le "action"

            bon code
            <form method="post" action="formu.php" enctype="text/plain" name="formulaire">


            mauvais code
            <form action="formu.php" method="post" enctype="text/plain" name="formulaire">


            O_o merci a tous

            pour ceux que sa interesse voila le bon code PHP:

            <?php 
            
            $formNom = $_POST['nom']; 
            $formPrenom = $_POST['prenom']; 
            $formMail = $_POST['mail']; 
            $formSujet = $_POST['sujet']; 
            $formTel = $_POST['tel']; 
            $formMessage = $_POST['message']; 
            
            
            $email="votre-email"; 
            $sujet="$formSujet"; 
            $message="Nom : \n $formNom\n\n"; 
            $message.="Prénom : \n $formPrenom\n\n"; 
            $message.="Email : \n $formMail \n\n"; 
            $message.="Téléphone : \n $formTel\n\n"; 
            $message.="Message : \n $formMessage\n"; 
            
            
            mail($email,$sujet,$message); 
            
            header("Location:votre-page-de-confirmation-d'envoi.htm"); 
            
            ?> 
            1. j'ai désactiver le javascript, sa vien pas de la
              c'est un probleme au niveau de la récup des donnés, mais ou ?? .-)
              1. vous pouvez m'aider, mysql ne se lance pas par contre l'apache fonctionne parfaitement,t
                1. peut etre un conflit avec le javascript ! j'ai tester un formulaire php que j'ai trouver sur le net sans controle des champs en js , sa a fonctionner
                  1. bonjour merci pour ton aide

                    alor avec ton code , j'ai sa dans le navigateur :

                    Email envoyé :
                    Sujet : 
                    Message : Nom : Prénom : Email : Téléphone : Message : 


                    et dans le mail (toujour pas de contenu):
                    Nom : 
                    
                    
                    Prénom : 
                    
                    
                    Email : 
                     
                    
                    Téléphone : 
                    
                    
                    Message : 
                    1. Qu'a retourné mon script ? Fait un copier coller de la page du navigateur stp. Sinon, il n'y a aucune erreur de syntaxe
                      1. j'ai l'impression qu'il y a une erreur de syntaxe ici
                        $message = "Nom : \n".$formNom."\n\n"; 
                        $message .= "Prénom : \n $formPrenom\n\n"; 
                        $message .= "Email : \n $formMail \n\n"; 
                        $message .= "Téléphone : \n $formTel\n\n"; 
                        $message .= "Message : \n $formMessage\n"; 
                        1. bonsoir merci pour ta reponse
                          l'envoi foncionne correctement
                          je recoi le mail, par contre, dans le corp du mail il n'y a toujour pas les donnée saisie
                          :-(
                          1. <?php 
                            
                            $formNom = $_POST['nom']; 
                            $formPrenom = $_POST['prenom']; 
                            $formMail = $_POST['mail']; 
                            $formSujet = $_POST['sujet']; 
                            $formTel = $_POST['tel']; 
                            $formMessage = $_POST['message']; 
                            
                            $email = "xxxxx@free.fr"; 
                            $message = "Nom : \n".$formNom."\n\n"; 
                            $message .= "Prénom : \n $formPrenom\n\n"; 
                            $message .= "Email : \n $formMail \n\n"; 
                            $message .= "Téléphone : \n $formTel\n\n"; 
                            $message .= "Message : \n $formMessage\n"; 
                            
                            if (mail($email,$formSujet,$message)) {
                                echo "Email envoyé :<br>";
                                echo "Sujet : <b>".$formSujet."</b><br>";
                                echo "Message : <b>".$message."</b><br>";
                            } else {
                                echo "Erreur lors de l'envoie du mail !";
                            }
                            // header("Location: confirmation.htm"); <-- Pas de header après un echo.
                            
                            ?>

                            Essayes ça et dis moi ce que ça retourne.
                            1. c'eest toujour pareil la verif javascript fonctionne , lenvoi du mail fonctionne mais le contenu saisi n'est pas dan le mail
                              merci quan meme pour ton aide
                              1. pardon plutot ça...

                                mon formu.php :

                                <?php

                                $formNom = $_POST['nom'];
                                $formPrenom = $_POST['prenom'];
                                $formMail = $_POST['mail'];
                                $formSujet = $_POST['sujet'];
                                $formTel = $_POST['tel'];
                                $formMessage = $_POST['message'];

                                $email="xxxxx@free.fr";
                                $sujet="$formSujet";
                                $message="Nom : \n".$formNom."\n\n";
                                $message.="Prénom : \n $formPrenom\n\n";
                                $message.="Email : \n $formMail \n\n";
                                $message.="Téléphone : \n $formTel\n\n";
                                $message.="Message : \n $formMessage\n";

                                mail($email,$sujet,$message);

                                header("Location:confirmation.htm");

                                ?>

                                mon formulaire html:

                                <script language=javascript>

                                function verif()
                                {
                                var nom = document.formulaire.nom.value;
                                if(document.formulaire.nom.value == "")
                                {
                                alert ('Veuillez entrer votre nom');
                                document.formulaire.nom.focus();
                                return ;
                                }

                                if(document.formulaire.mail.value == "") {
                                alert("Veuillez entrer votre adresse electronique");
                                document.formulaire.mail.focus();
                                return ;
                                }

                                if(document.formulaire.mail.value.indexOf('@') == -1) {
                                alert("Ce n'est pas une adresse electronique valide, verifiez la svp");
                                document.formulaire.mail.focus();
                                return ;
                                }
                                if(document.formulaire.message.value == "")
                                {
                                alert("Veuillez entrer votre message");
                                document.formulaire.message.focus();
                                return ;
                                }

                                document.formulaire.submit();

                                }

                                </script>

                                <form action="formu.php" method=POST enctype="text/plain" name="formulaire">
                                <input name="nom" size="30" />
                                <input name="prenom" size="30" />
                                <input name="mail" size="30" />
                                <input name="sujet" size="30" />
                                <input name="tel" size="30" />
                                <textarea name="message" rows="6" wrap="virtual" cols="30"></textarea>
                                <input type="button" name="btn" value="Valider" onClick="verif();">
                                • 1
                                • 2
                                • 3