Traitement FORMULAIRE PHP

Bonjour,
J'ai créé un site Internet (http://www.gundermann.fr) avec un formulaire tout simple, de base. Lorsque mon visiteur m'écrit, je ne reçois pas les informations qu'il a saisies dans les champs du formulaire, C'EST VIDE. Qui peut m'aider ?

Tout ce que je reçois, c'est :
MESSAGE VENANT DE : avec rien derrière
"TELEPHONE : avec rien derrière
LE MESSAGE EST LE SUIVANT : avec rien derrière

Le formulaire de départ fonctionne, gestion automatique par QuarkXPress. Ce qui ne fonctionne pas, c'est le traitement des informations. Voici le script de traitement php que j'ai créé. Qu'est-ce qui coince ?

Merci beaucoup


Pour info :
Configuration: Mac OS X / Safari 533.19.4

SCRIPT PHP de TRAITEMENT DE FORMULAIRE

<?php
$subject="Message venant du site";
$destinataire="contact@gundermann.fr";
header("Location: http://www.gundermann.fr/Reception.htm");

$genre = $_POST['genre'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];
$mobile = $_POST['mobile'];
$textemail = $_POST['textemail'];

//voici la version Mine
$headers = "MIME-Version: 1.0\r\n";

//ici on détermine le mail en format texte
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";

$body ="MESSAGE VENANT DE : ".$genre." ".$prenom." ".$snom.".\n";
$body .= "TELEPHONE : ".$telephone." ".$mobile.".\n";
$body .= "LE MESSAGE EST LE SUIVANT : ".$textemail.".\n";

//Envoie du mail

mail($destinataire,$subject,$body,$headers);

?>

26 réponses

Résumé de la discussion

Le problème central est que les champs du formulaire ne transmettent pas leurs valeurs dans l'e-mail reçu, malgré l'envoi du formulaire et le script de traitement. Les échanges soulignent des erreurs potentielles dans le script PHP, comme une variable mal nommée ($snom au lieu de $nom), l'envoi du mail après une redirection et une configuration d'en-têtes inadaptée. D'autres points soulevés invitent à afficher les valeurs des variables lors de l'exécution et à vérifier que l'attribut action du formulaire pointe vers le bon script et le bon type d'encodage. En pratique, il est recommandé d'envoyer le mail avant toute redirection et de corriger les noms de champs pour garantir l'envoi fiable des données du formulaire.

Bobot (l’IA à votre service)
  1. Erreur sur l'adresse ci-dessus

    http://www.gundermann.fr/Contact.htm
    1. Bonjour essayez d'ajouter cette ligne en début de script php :
      extract($_POST);

      Cordialement.
  2. à
    HOSTOFSERAPHIM
    JARVISS
    A.NONYMOUS


    Merci pour votre aide. Il va sans dire, à titre de remerciement, que je vous ferai parvenir le script complet aussitôt que celui-ci fonctionnera (faites-moi parvenir votre adresse email s'il vous plaît).

    A l'heure actuelle, si vous essayez le formulaire sur
    http://www.gundermann.fr/contact.htm
    vous verrez que (malgré le dernier rajout proposé (if empty...) le résultat est surprenant, vous obtiendrez un autre formulaire que le mien, vide.

    Bonne soirée, encore tous mes remerciements et bien cordialement. Yves
    1. A insérer en début de script :

      if(empty($_POST))
      {
      header('Location: /');
      die();
      }

      A priori, aucun des scripts proposés n'interrompait le traitement quand le contenu de $_POST est vide, d'où la possibilité d'envoyer un mail avec des infos vides.
      1. Merci encore mais cela ne fonctionne pas. Votre script m'envoie sur un formulaire vide. Bonne journée.
        1. Je pense que vous trouverez toutes les informations directement sur ma page de formulaire :
          http://www.gundermann.fr/contact.htm

          Cordialement, et désolé car vous bloquez la possibilité à d'autres de m'apporter les réponses que j'attends.

          Si vous avez des questions précises, utilisez s'il vous plaît la fonction ci-dessous :
          Créer un nouveau sujet
          1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
            <html>
            <head>
            <title>Formulaire de Contact</title>
            <meta http-equiv="content-type" content="text/html; charset=utf-8">
            <link rel="stylesheet" media="screen" type="text/css" title="Design" href="" />

            </head>
            <body>
            <h1 align=center > Formulaire de Contact </h1>
            <form type="formulaire" method="post" action="http://www.gundermann.fr/cgi-bin/formyv.cgi">

            Quel est votre civilité:
            <input name="genre" type="radio" value="m"/>M.
            <input name="genre" type="radio" value="mme"/>Mme
            <input name="genre" type="radio" value="mlle"/>Mlle
            <br/>
            Votre nom:
            <input type="text" name="nom" size="40"/>
            Votre prénom:
            <input type="text" name="prenom" size="40"/>
            <br/>
            Votre adresse e-mail:
            <input type="text" name="email" size="50"/>
            <br/>
            Votre n° de téléphone:
            <input type="text" name="telephone" size="10"/>
            Votre mobile:
            <input type="text" name="mobile" size="10"/>
            <br/>
            Votre texte:<br/>
            <textarea name="textemail" cols="100" rows="5"/>

            <input value="Envoyer" type="submit"/><br/>
            <input value="Annulation" type="reset"/><br/><br/>

            </form>

            <?php

            if(isset($_POST['Envoyer'])){

            $nom=$_POST['nom'];
            $prenom=$_POST['prenom'];
            $email=$_POST['email'];
            $telephone=$_POST['telephone'];
            $mobile=$_POST['mobile'];
            $textemail=$_POST['textemail'];
            }

            voila je pense que se code fonctionne inserer le a votre site et ajouter y les fonction manquante et cela devrait fonctionnait
        2. oui, bouton "envoyer"
          1. ok quel son les differentes information que vous demander et quel est la page d'action suivant la validation dut au bouton envoyer?
        3. Bonjour

          Non, le formulaire est prévu pour être transmis directement sur mon mail. Le problème c'est que les informations saisies ne me parviennent pas, en l'état actuel.

          Bien cordialement.
          1. d'accord une autre question a la fin du formulaire y a t'il un bouton pour valider le formulaire?
        4. tres bien votre formulaire envoi t'il les donné entrez dans une base de donné?
          1. Merci de ton aide du matin, c'était super sympa. Dommage que tu n'as pas réussi à résoudre mon problème.
            Bon après-midi, bon week-end. Et bien cordialement. Yves
          2. Je suis vraiment désolé, je suis en train de te faire devenir dingue avec mon souci, cela fait des heures que tu te penches sur mon script...
            Je ne sais même pas quoi dire pour m'en excuser... et te remercier sincèrement et chaleureusement.
            Yves
            1. Je l'avais déjà fait, ça ne fonctionne pas davantage, et OVH m'a demandé de mettre le fichier "contact.php" dans un dossier "cgi-bin" au niveau zéro de mon site
              1. Contributeur
                Le "formyv.cgi" qui apparaît plus haut, c'est quoi, en fait ?
            2. Contributeur
              Essaye de mettre le fichier contact.php au même niveau que le fichier du formulaire, j'suis pas sûr que ça influe, mais on ne sait jamais...

              (et pense à changer le chemin du coup dans la balise FORM)

              1. Je suis revenu, actuellement, au script suivant (merci d'oublier tous les autres scripts sinon nous ne parlerons pas de la même chose)

                Voici mon script PHP de contact
                <?php

                define('MAIL_DESTINATAIRE','contact@gundermann.fr'); // remplacez par votre email
                define('MAIL_SUJET','Formulaire de contact');

                foreach($_POST as $index => $valeur) {
                $$index = stripslashes(trim($valeur));
                }

                $pref = $_POST['pref'];
                $sqlpref = '';
                for ($i=0; $i<count($pref); $i++)
                {
                $sqlpref .= $pref[$i];
                $sqlpref .= ', ';
                }

                $genre = $_POST['genre'];
                $nom = $_POST['nom'];
                $prenom = $_POST['prenom'];
                $email = $_POST['email'];
                $telephone = $_POST['telephone'];
                $mobile = $_POST['mobile'];
                $textemail = $_POST['textemail'];

                //Préparation de l entête du mail:
                $mail_entete = "MIME-Version: 1.0\r\n";
                $mail_entete .= "From: {$_POST['nom']} "
                ."<{$_POST['email']}>\r\n";
                $mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
                $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
                $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
                $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";

                // préparation du corps du mail

                $mail_corps .= "CIVILITE :".$genre."\n\n";
                $mail_corps .= "NOM :".$nom."\n\n";
                $mail_corps .= "PRENOM :".$prenom."\n\n";
                $mail_corps .= "ADRESSE EMAIL :".$email."\n\n";
                $mail_corps .= "TELEPHONE :".$telephone."\n\n";
                $mail_corps .= "MOBILE :".$mobile."\n\n";
                $mail_corps .= "VOTRE TEXTE :".$textemail."\n\n";

                // envoi du mail
                if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete))

                {

                // si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
                $genre = (isset($_POST['genre'])) ? Rec($_POST['genre']) : '';
                $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
                $prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
                $email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
                $telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : '';
                $mobile = (isset($_POST['mobile'])) ? Rec($_POST['mobile']) : '';
                $textemail = (isset($_POST['textemail'])) ? Rec($_POST['textemail']) : '';

                if (isset($_POST['envoi']))
                {
                // On va vérifier les variables et l'email ...
                $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
                $err_formulaire = (IsEmail($email)) ? false : true;

                if (($nom != '') && ($prenom != '') && ($email != '') && ($mobile != '') && ($textemail != ''))
                {
                // les 5 variables sont remplies, on génère puis envoie le mail
                $headers = 'From: '.$nom.' <'.$email.'>' . "\r\n";

                // envoyer une copie au visiteur ?
                if ($copie == 'oui')
                {
                $cible = $destinataire.','.$email;
                }
                else
                {
                $cible = $destinataire;
                };

                // Remplacement de certains caractères spéciaux
                $message = html_entity_decode($message);
                $message = str_replace(''',"'",$message);
                $message = str_replace('’',"'",$message);
                $message = str_replace('<br>','',$message);
                $message = str_replace('<br />','',$message);

                // Envoi du mail
                if (mail($genre, $nom, $prenom, $email, $telephone, $mobile, $textemail))
                {
                echo '<p>'.$message_envoye.'</p>'."\n";
                }
                else
                {
                echo '<p>'.$message_non_envoye.'</p>'."\n";
                };
                };
                }; // fin du if (!isset($_POST['envoi']))

                if (($err_formulaire) || (!isset($_POST['envoi'])))

                //Le mail est bien expédié

                header("Status: 301 Moved Permanently", false, 301);
                header("Location: http://www.gundermann.fr/Reception.htm");
                exit();

                }
                ?>

                SACHANT que ce script m'envoie le mail suivant :

                CIVILITE :

                NOM :

                PRENOM :

                ADRESSE EMAIL :

                TELEPHONE :

                MOBILE :

                VOTRE TEXTE :
                1. La page PHP où le traitement du formulaire est fait s'appelle :
                  contact.php

                  La page HTML où le formulaire est saisi s'appelle :
                  http://www.gundermann.fr/Contact.htm

                  La page de retour après réception du mail s'appelle :
                  http://www.gundermann.fr/Reception.htm

                  Mon adresse mail directe est :
                  contact@gundermann.fr
                  1. Contributeur
                    Comment s'appelle la page PHP où le traitement du formulaire est fait ? La page .cgi mise dans la propriété "ACTION" ne semble pas exister sur le serveur...

                    1. Voici le formulaire d'origine

                      <HTML>
                      <HEAD>
                      <TITLE>
                      Formulaire de Contact
                      </TITLE>
                      </HEAD>
                      <BODY>
                      <H1 align=center>
                      Formulaire de Contact
                      </H1>
                      <P>
                      <FORM METHOD="POST" ACTION="http://www.gundermann.fr/cgi-bin/formyv.cgi" ENCTYPE="PLAIN">
                      <INPUT TYPE=HIDDEN NAME="recipient" VALUE="contact@gundermann.fr">
                      <INPUT TYPE=HIDDEN NAME="from" VALUE="Visiteur">
                      <INPUT TYPE=HIDDEN NAME="email" VALUE="visiteur@toto.com">
                      <INPUT TYPE=HIDDEN NAME="subject" VALUE="Réponses de ma page Web">
                      <INPUT TYPE=HIDDEN NAME="required" VALUE="nom,prenom,email,textemail">
                      <INPUT TYPE=HIDDEN NAME="redirect" VALUE="http://www.gundermann.fr/Reception.htm">
                      <br><br>
                      <tr>
                      <INPUT NAME="genre" TYPE="radio" VALUE="m">M.
                      <INPUT NAME="genre" TYPE="radio" VALUE="mme">Mme
                      <INPUT NAME="genre" TYPE="radio" VALUE="mlle">Mlle<br><br>
                      </tr>
                      <tr>
                      <td>Votre nom</td><br>
                      <td>
                      <INPUT TYPE=TEXT NAME="nom" SIZE="40"><br><br>
                      </td>
                      </tr>
                      <tr>
                      <td>Votre prénom</td><br>
                      <td>
                      <INPUT TYPE=TEXT NAME="prenom" SIZE="40"><br><br>
                      </td>
                      </tr>
                      <tr>
                      <td>Votre adresse e-mail</td><br>
                      <td>
                      <INPUT TYPE=TEXT NAME="email" SIZE="50"><br><br>
                      </td>
                      </tr>
                      <tr>
                      <td>Votre texte</td><br>
                      <td>
                      <TEXTAREA NAME="textemail" COLS="100" ROWS="5">
                      Tapez ici le texte de votre mail</TEXTAREA><br><br>
                      </td>
                      </tr>
                      <tr>
                      <td>
                      <INPUT VALUE="Envoyer" TYPE="submit"><br>
                      <INPUT VALUE="Annulation" TYPE="reset"><br><br>
                      </td>
                      </tr>
                      </FORM>
                      </P>
                      </BODY>
                      </HTML>
                      1. Contributeur
                        Donc tes variables sont vides.

                        Tu peux faire un copier / coller du formulaire ? (entre les balises <form> et </form>, celles-ci comprises ?)

                        1. Voilà, c'est fait

                          Résultat : UNE PAGE BLANCHE en effet, et effectivement, PAS DE MAIL
                          • 1
                          • 2