Page 1 sur 1

Comment modifier mon formulaire de contact php

Posté : 20 févr. 2014, 18:33
par GregD_I
Bonjour à tous, tâtonnant encore en php je me casse la tête depuis quelques heures sur un formulaire de contact et je viens donc vous demander assistance :)
C'est un formulaire que j'ai trouvé sur un site de tutoriel, il fonctionne très bien et j'ai bien compris le fonctionnement des vérifications qui était ce qui m'intéressait dans ce formulaire.
Cependant il ne propose que les champs "email" "sujet du message" et "message " je souhaiterai le compléter en ajoutant trois zone de saisie : une pour le nom de l'expéditeur, une pour le nom de la société de l'expéditeur et l'autre pour le numéro de téléphone et que ces information soit reportées dans le corps du mail.
J'ai tout essayé sans succés ....

Voici le code original du formulaire :
 <?php
    define( 'MAIL_TO', /* >>>>> */'[email protected]'/* <<<<< */ );  //ajouter votre courriel
    define( 'MAIL_FROM', '[email protected]' ); // valeur par défaut
    define( 'MAIL_OBJECT', 'objet du message' ); // valeur par défaut
    define( 'MAIL_MESSAGE', 'votre message' ); // valeur par défaut

    $mailSent = false; // drapeau qui aiguille l'affichage du formulaire OU du récapitulatif
    $errors = array(); // tableau des erreurs de saisie
    
    if( filter_has_var( INPUT_POST, 'send' ) ) // le formulaire a été soumis avec le bouton [Envoyer]
    {
        $from = filter_input( INPUT_POST, 'from', FILTER_VALIDATE_EMAIL );
        if( $from === NULL || $from === MAIL_FROM ) // si le courriel fourni est vide OU égale à la valeur par défaut
        {
            $errors[] = 'Vous devez renseigner votre adresse de courrier &eacute;lectronique.';
        }
        elseif( $from === false ) // si le courriel fourni n'est pas valide
        {
            $errors[] = 'L\'adresse de courrier &eacute;lectronique n\'est pas valide.';
            $from = filter_input( INPUT_POST, 'from', FILTER_SANITIZE_EMAIL );
        }

        $object = filter_input( INPUT_POST, 'object', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_LOW );
        if( $object === NULL OR $object === false OR empty( $object ) OR $object === MAIL_OBJECT ) // si l'objet fourni est vide, invalide ou égale à la valeur par défaut
        {
            $errors[] = 'Vous devez renseigner l\'objet.';
        }

        /*     pas besoin de nettoyer le message. 
        /    http://www.phpsecure.info/v2/article/MailHeadersInject.php
        /    Logiquement, les parties message, To: et Subject: pourraient servir aussi à injecter quelque chose,     mais la fonction mail()
        /    filtre bien les deux dernières, et la première est le message, et à partir du moment où on a sauté une ligne dans l'envoi du mail,
        /    c'est considéré comme du texte; le message ne saurait donc rester qu'un message.*/
        $message = filter_input( INPUT_POST, 'message', FILTER_UNSAFE_RAW );
        if( $message === NULL OR $message === false OR empty( $message ) OR $message === MAIL_MESSAGE ) // si le message fourni est vide ou égale à la valeur par défaut
        {
            $errors[] = 'Vous devez &eacute;crire un message.';
        }

        if( count( $errors ) === 0 ) // si il n'y a pas d'erreurs
        {
            if( mail( MAIL_TO, $object, $message, "From: $from\nReply-to: $from\n" ) ) // tentative d'envoi du message
            {
                $mailSent = true;
            }
            else // échec de l'envoi
            {
                $errors[] = 'Votre message n\'a pas &eacute;t&eacute; envoy&eacute;.';
            }
        }
    }
    else // le formulaire est affiché pour la première fois, avec les valeurs par défaut
    {
        $from = MAIL_FROM;
        $object = MAIL_OBJECT;
        $message = MAIL_MESSAGE;
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <title>Contact</title>
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
        <meta http-equiv="content-language" content="fr" />
        <style type="text/css">
html{ font-family:Geneva, Arial, Helvetica, sans-serif; margin:0; padding:0; font-size:.88em;}
body{ width:772px; margin:0 auto; padding:0; }
textarea{ width:772px; }
label{ display:block; font-weight:bold; }
p#welcome{ padding:10px 20px; border:1px dotted #00f; color:#00f; font-weight:bold; }
ul{ padding:10px 20px; border:1px dotted #f00; color:#f00; font-weight:bold; }
p#success{ padding:10px 20px; border:1px dotted #0f0; color:#0f0; font-weight:bold; }
p em{ display:block; font-weight:normal; }
        </style>
    </head>
    <body>
        <h1>Contact</h1>
        <hr />
<?php
    if( $mailSent === true ) // si le message a bien été envoyé, on affiche le récapitulatif
    {
?>
        <p id="success">Votre message a bien &eacute;t&eacute; envoy&eacute;.</p>
        <p><strong>Courriel pour la r&eacute;ponse&nbsp;:</strong><br /><?php echo( $from ); ?></p>
        <p><strong>Objet&nbsp;:</strong><br /><?php echo( $object ); ?></p>
        <p><strong>Message&nbsp;:</strong><br /><?php echo( nl2br( htmlspecialchars( $message ) ) ); ?></p>
<?php
    }
    else // le formulaire est affiché pour la première fois ou le formulaire a été soumis mais contenait des erreurs
    {
        if( count( $errors ) !== 0 )
        {
            echo( "\t\t<ul>\n" );
            foreach( $errors as $error )
            {
                echo( "\t\t\t<li>$error</li>\n" );
            }
            echo( "\t\t</ul>\n" );
        }
        else
        {
            echo( "\t\t<p id=\"welcome\"><em>Tous les champs sont obligatoires</em></p>\n" );
        }
?>
        <form id='contact' method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
            <p>
                <label for="from">Courriel pour la r&eacute;ponse</label>
                <input type="text" name="from" id="from" value="<?php echo( $from ); ?>" />
            </p>
            <p>
                <label for="object">Objet</label>
                <input type="text" name="object" id="object" value="<?php echo( $object ); ?>" />
            </p> 
            <p>
                <label for="message">Message</label>
                <textarea name="message" id="message" rows="20" cols="80"><?php echo( $message ); ?></textarea>
            </p>
            <p>
                <input type="reset" name="reset" value="Effacer" />
                <input type="submit" name="send" value="Envoyer" />
            </p>
        </form>
<?php
    }
?>
    </body>
</html> 
Quelqu'un aurait une idée de comment résoudre mon casse-tête et parvenir à ajouter les champs de saisi supplémentaire ?

Merci d'avance :D

Re: Aide sur formulaire de contact php

Posté : 20 févr. 2014, 19:19
par moogli
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP !", "Aidez-moi", "J'ai un problème", "Ça marche pas",...
n'apportent rien à la compréhension de ta demande.

Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.

Tu peux corriger ton titre en éditant ton premier message.

Merci de prendre le temps de lire les règlements.

Re: Comment modifier mon formulaire de contact php

Posté : 20 févr. 2014, 19:26
par moogli
salut,

qu'as tu essayé ?

parce que la on ne peux pas t'aider (t on ne va pas le faire).

dit nous où tu bloque, ce que tune comprend pas et la on va pouvoir t'aider (avec ton code ;) ).

pour commencer Comment récupérer les données d'un formulaire et la concaténation.

tu as besoin des ces deux tutos pour récupérer les nouveaux champs et les ajouters au corps du messages.
si tu veux que l'expéditeur apparaisse dans le champs expéditeurde ton butineur mail c'est aussi possible.
Pour cela tu va devoir ajouter des entêtes au mail.
Il y a un exemple dans la doc de la fonction mail de php.

test et revient nous dire ce qui ne va (ou envois direct ton dernier test avec les éventuels messages d'erreurs, choses qui te chiffonne etc etc).

@+