Traitement FORMULAIRE PHP

yves.gdn Messages postés 56 Statut Membre -  
 malor -
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

  • 1
  • 2
  1. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
     
    Il y a des chances pour que tes variables soient vides. Vérifie les noms des champs dans ton formulaire.

    0
  2. yves.gdn Messages postés 56 Statut Membre 2
     
    Merci HostofSeraphim, sympa de m'avoir répondu

    J'avais évidemment vérifié au préalable, tout est parfaitement compatible, le problème se situe ailleurs. J'avais fait un autre script, qui me pose les mêmes difficultés, je reçois le mail, il est VIDE.

    Voici l'autre script : (et MERCI encore)


    <?php

    define('MAIL_DESTINATAIRE','contact@gundermann.fr');
    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 .= ', ';
    }

    $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";

    $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";

    if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete))

    {
    function Rec($text)
    {
    $text = trim($text);
    if (1 === get_magic_quotes_gpc())
    {
    $stripslashes = create_function('$txt', 'return stripslashes($txt);');
    }
    else
    {
    $stripslashes = create_function('$txt', 'return $txt;');
    }

    $text = $stripslashes($text);
    $text = htmlspecialchars($text, ENT_QUOTES);
    $text = nl2br($text);
    return $text;
    };

    function IsEmail($email)
    {
    $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
    return (eregi($pattern,$email)) ? true : false;
    };

    $err_formulaire = false;

    $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['submit']))

    $email = (IsEmail($email)) ? $email : '';

    if (($genre != '') && ($nom != '') && ($prenom != '') && ($email != '') && ($telephone != '') && ($mobile != '') && ($textemail != ''))
    {

    $headers = 'From: '.$nom.' <'.$email.'>' . "\r\n";

    };

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

    }
    ?>
    0
  3. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
     
    Vérifie de cette façon histoire de voir où se situe à peu près le problème :

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

    echo $genre;
    echo $nom;
    echo $prenom;
    echo $email;
    echo $telephone;
    echo $mobile;
    echo $textemail;


    Et éventuellement, mets le reste du script en commentaire. Ensuite, lance le, et regarde si il y a quelque chose d'affiché ou non.

    0
  4. yves.gdn Messages postés 56 Statut Membre 2
     
    Encore merci. J'ai ajouté les "echo...", et testé, cela ne change rien pour l'instant. Voici le résultat du mail que je reçois, TOUJOURS VIDE :

    CIVILITE :

    NOM :

    PRENOM :

    ADRESSE EMAIL :

    TELEPHONE :

    MOBILE :

    VOTRE TEXTE :
    0
    1. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
       
      Refais-le, mais en mettant le reste du script en commentaire, histoire de voir si ça s'affiche ou non.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yves.gdn Messages postés 56 Statut Membre 2
     
    Encore et encore MERCI.

    ... sauf que, je ne sais pas faire cela, désolé. As-tu la possibilité de copier-coller mon script actuel que je reporte modifié suite à tes conseils, et me proposer la modification ?

    Le souci majeur est que je suis retraité, j'étais infographiste et me suis laissé dépasser par la programmation !
    J'étais déjà bien content d'en arriver jusque là. Merci de ta compréhension. Voici le script tel qu'il se présente maintenant.

    ET J'ESPERE NE PAS GACHER TON WEEK-END PAR L'AIDE QUE TU M'APPORTES


    <?php

    define('MAIL_DESTINATAIRE','contact@gundermann.fr');
    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 .= ', ';
    }

    $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";

    $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";

    echo $genre;
    echo $nom;
    echo $prenom;
    echo $email;
    echo $telephone;
    echo $mobile;
    echo $textemail;

    if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete))

    {
    function Rec($text)
    {
    $text = trim($text);
    if (1 === get_magic_quotes_gpc())
    {
    $stripslashes = create_function('$txt', 'return stripslashes($txt);');
    }
    else
    {
    $stripslashes = create_function('$txt', 'return $txt;');
    }

    $text = $stripslashes($text);
    $text = htmlspecialchars($text, ENT_QUOTES);
    $text = nl2br($text);
    return $text;
    };

    function IsEmail($email)
    {
    $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
    return (eregi($pattern,$email)) ? true : false;
    };

    $err_formulaire = false;

    $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['submit']))

    $email = (IsEmail($email)) ? $email : '';

    if (($genre != '') && ($nom != '') && ($prenom != '') && ($email != '') && ($telephone != '') && ($mobile != '') && ($textemail != ''))
    {

    $headers = 'From: '.$nom.' <'.$email.'>' . "\r\n";

    };

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

    }
    ?>
    0
  7. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
     
    Dans ce cas, le plus simple :

    Admettons que ton fichier s'appelle traitement.php. Renomme-le traitement2.php.

    Fais un nouveau fichier traitement.php, et colle le code suivant :

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

    echo $genre;
    echo $nom;
    echo $prenom;
    echo $email;
    echo $telephone;
    echo $mobile;
    echo $textemail;
    ?>


    Ensuite, refais le test avec ton formulaire : il n'y aura pas de mail envoyé, juste une page vierge ou avec quelques données. En fonction du résultat, on pourra voir où est à peu près le problème.

    (Une fois les tests finis, on supprimera traitement.php et on renommera traitement2.php en traitement.php pour retourner à l'état d'origine)

    0
  8. yves.gdn Messages postés 56 Statut Membre 2
     
    Voilà, c'est fait

    Résultat : UNE PAGE BLANCHE en effet, et effectivement, PAS DE MAIL
    0
  9. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
     
    Donc tes variables sont vides.

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

    0
  10. yves.gdn Messages postés 56 Statut Membre 2
     
    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>
    0
  11. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
     
    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...

    0
  12. yves.gdn Messages postés 56 Statut Membre 2
     
    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
    0
  13. yves.gdn Messages postés 56 Statut Membre 2
     
    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 :
    0
  14. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
     
    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)

    0
  15. yves.gdn Messages postés 56 Statut Membre 2
     
    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
    0
    1. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
       
      Le "formyv.cgi" qui apparaît plus haut, c'est quoi, en fait ?
      0
  16. yves.gdn Messages postés 56 Statut Membre 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
    0
  17. yves.gdn Messages postés 56 Statut Membre 2
     
    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
    0
    1. jarviss Messages postés 35 Statut Membre
       
      yves?
      0
  18. yves.gdn Messages postés 56 Statut Membre 2
     
    je suis là
    0
  19. jarviss Messages postés 35 Statut Membre
     
    tres bien votre formulaire envoi t'il les donné entrez dans une base de donné?
    0
  20. yves.gdn Messages postés 56 Statut Membre 2
     
    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.
    0
    1. jarviss Messages postés 35 Statut Membre
       
      d'accord une autre question a la fin du formulaire y a t'il un bouton pour valider le formulaire?
      0
  21. yves.gdn Messages postés 56 Statut Membre 2
     
    oui, bouton "envoyer"
    0
    1. jarviss Messages postés 35 Statut Membre
       
      ok quel son les differentes information que vous demander et quel est la page d'action suivant la validation dut au bouton envoyer?
      0
  • 1
  • 2