Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

[PHP/HTML] Formulaire de contact finalisé mais petit problèm

Discussion dans 'Développement web' créé par iPascal, 15 Novembre 2008.

Modérateurs: Nephou
  1. iPascal

    iPascal Membre junior

    Inscrit:
    20 Novembre 2007
    Messages:
    54
    J'aime reçus:
    2
    Salut à tous,

    J'ai besoin de mettre en place un formulaire de contact pour un site.
    J'ai donc créé un formulaire en html et un fichier "traitement.php" grandement inspiré de ce site et de cet autre site.
    (je précise que je n'y connais quasiment rien en PHP :siffle: je bidouille juste un peu)

    Ma question est comment fusionner deux variables dans une seule autre? Je m'explique...:D
    Sur mon formulaire j'ai un champs "nom" et un champs "prénom". Je voudrais qu'ils apparaissent en tant que destinataire du mail.
    De même j'ai un champs "téléphone" et je voudrais que le numéro de téléphone apparaisse à la fin du contenu de l'email. Je ne sais pas comment intégrer le téléphone dans $message.

    ++

    iPascal
    _______________________________________________________________________________________________________
    Voici mon fichier traitement.php :
    Code (Text):
    <?php
    $nom=$HTTP_POST_VARS['nom']; [COLOR="Red"]ici je voudrais mettre le nom et le prénom[/COLOR]
    $mail=$HTTP_POST_VARS['email'];
    $message=$HTTP_POST_VARS['texte']; [COLOR="red"]et là le message et le téléphone à la fin[/COLOR]
     
    $headers = "MIME-Version: 1.0\r\n";
     
    $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
     
    $headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer:PHP";
     
    $subject="Question";
    $destinataire="monadresse@gmail.com";
    $body="$message";
    if (mail($destinataire,$subject,$body,$headers)) {
     header("Location: http://www.site.net/message_envoye.html\n\n") ;
    } else {
    echo "Une erreur s'est produite";
    }
    ?>
    Et là la structure de mon formulaire :
     
  2. Dr_cube

    Dr_cube Membre confirmé

    Inscrit:
    27 Février 2006
    Messages:
    385
    J'aime reçus:
    28
    Heuu.. A moins que je n'aie pas compris le problème, ça parait tout bête :

    Code (Text):
    <?php
    $nom=$_POST['nom'];
    [COLOR="DarkOrchid"]$prenom=$_POST['prenom']; [/COLOR]
    $mail=$_POST['email'];
    $message=$_POST['texte'];
    [COLOR="DarkOrchid"]$telephone=$_POST['telephone']; [/COLOR]

    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
    $headers .= "From: [COLOR="DarkOrchid"]$prenom[/COLOR] $nom <$mail>\r\nReply-to : [COLOR="DarkOrchid"]$prenom[/COLOR] $nom <$mail>\nX-Mailer:PHP";
     
    $subject="Question";
    $destinataire="monadresse@gmail.com";
    [COLOR="DarkOrchid"]$body="$message\r\n$telephone"; // le message puis le téléphone (sur une nouvelle ligne) [/COLOR]
    if (mail($destinataire,$subject,$body,$headers)) {
     header("Location: http://www.site.net/message_envoye.html\n\n") ;
    } else {
    echo "Une erreur s'est produite";
    }
    ?>
    Edit : Oh, et pour répondre à ta question : pour concaténer deux chaînes de caractères (les mettre à la suite quoi), utilise l'opérateur binaire . (point) :
    $nouvelleChaine = $chaine1.$chaine2;
    (ou encore $nouvelleChaine = $chaine1."toto".$chaine2.'prout'.$chaine3."bonjour $chaine4 !"."..."; )
    Pour concaténer directement :
    $chaine = "debut de la phrase";
    $chaine .= "fin de la phrase";
    (C'est l'équivalent de += mais avec des chaînes de caractères..).

    Edit 2 : Je pense que tu peux enlever les deux \n à la fin du header :
    header("Location: http://www.site.net/message_envoye.html\n\n") ;
     
  3. iPascal

    iPascal Membre junior

    Inscrit:
    20 Novembre 2007
    Messages:
    54
    J'aime reçus:
    2
    Merci c'est exactement ça que je voulais ! :love:
    N'y connaissant pas grand chose je m'y prenais mal et j'essayais de faire rentrer le prénom dès la deuxième ligne.
    Il faudra peut être que je me mette un de ces jours à la programmation en PHP;)
    ++
     
  4. Dr_cube

    Dr_cube Membre confirmé

    Inscrit:
    27 Février 2006
    Messages:
    385
    J'aime reçus:
    28
    Bin c'était possible aussi :

    Code (Text):
    <?php
    [COLOR="DarkOrchid"]$nomComplet = $_POST['prenom']." ".$_POST['nom']; [/COLOR]
    $mail=$_POST['email'];
    $message=$_POST['texte'];
    $telephone=$_POST['telephone'];

    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
    $headers .= "From: [COLOR="DarkOrchid"]$nomComplet[/COLOR] <$mail>\r\nReply-to : [COLOR="DarkOrchid"]$nomComplet[/COLOR] <$mail>\nX-Mailer:PHP";
     
    $subject="Question";
    $destinataire="monadresse@gmail.com";
    $body="$message\r\n$telephone"; // le message puis le téléphone (sur une nouvelle ligne)
    if (mail($destinataire,$subject,$body,$headers)) {
     header("Location: http://www.site.net/message_envoye.html\n\n") ;
    } else {
    echo "Une erreur s'est produite";
    }
    ?>
     
  5. Anonyme

    Anonyme Invité

    Petit truc : tu as intérêt à insérer un anti-spam dans ton formulaire sinon tu vas avoir de drôles de surprises&#8230; :siffle: Pour ça, tu peux adapter le code de ploum. ;)

    J'ai mis ça dans un livre d'or et plus aucun spam n'est passé. En plus c'est accessible : même une personne aveugle peut utiliser le formulaire. ;)
     
  6. iPascal

    iPascal Membre junior

    Inscrit:
    20 Novembre 2007
    Messages:
    54
    J'aime reçus:
    2
    Maintenant le formulaire fonctionne parfaitement.:cool: Concernant les spams, les données du formulaire sont redirigées sur une boite gmail donc ça filtre déjà pas mal.

    Pour ce qui est de la protection proposée par gloup gloup, elle a l'air intéressante étant donné qu'elle est invisible pour l'utilisateur (si j'ai bien compris). Par contre, ne comprenait que quelques bribes d'anglais je vais avoir du mal à la mettre en place :D

    J'ai également trouvé une solution très simple sur internet mais je ne sais pas si elle est véritablement efficace. Il s'agit d'ajouter dans le formulaire un champs appelé par exemple "name". On le cache grâce à du CSS pour que l'utilisateur ne le voie pas. Et dans la page de traitement PHP, on refuse l'envoi des données du formulaire si le champs "name" est rempli.

    En tout cas merci pour votre aide:up:
     
  7. Anonyme

    Anonyme Invité

    Oui c'est une bonne technique, seulement les robots finissent par «apprendre» et passe outre, la technique utilisée par ploum est de faire un champ invisible avec un nom changeant (année+mois+semaine+textebidon) ainsi les robots ne peuvent pas apprendre le formulaire. ;)
     
  8. iPascal

    iPascal Membre junior

    Inscrit:
    20 Novembre 2007
    Messages:
    54
    J'aime reçus:
    2
    Je poste juste mon code PHP pour qu'il serve à quelqu'un si besoin.
    J'ai donc rajouté dans mon formulaire un champs nommé "lastname" que j'ai caché à l'oeil du visiteur (mais non du robot) grâce à du CSS :
    Code (Text):
    .lastname {
     visibility:hidden;
    }
    Donc si un robot tombe sur le formulaire, en principe il remplira le champs "lastname" automatiquement.
    Après il suffit de rajouter quelques lignes de code dans le fichier traitement.php pour empêcher l'envoi d'un message dès que le champs lastname est rempli.

    Code (Text):
    <?php
    if (empty($_POST['lastname'])) { [COLOR="DarkOrange"]//si le champs est vide, on continue l'envoi du message[/COLOR]
    $nom=$_POST['nom'];
    $prenom=$_POST['prenom'];
    $mail=$_POST['email'];
    $message=$_POST['texte'];
    $telephone=$_POST['telephone'];

    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
    $headers .= "From: $prenom $nom <$mail>\r\nReply-to : $prenom $nom <$mail>\nX-Mailer:PHP";
     
    $subject="Question";
    $destinataire="destinataire@mail.com";
    $body="$message\n\n$telephone"; // le message puis le téléphone (sur une nouvelle ligne)
    if (mail($destinataire,$subject,$body,$headers)) {
     header("Location: http://www.site.com/message_envoye.html\n\n") ;
    } else {
    echo "Une erreur s'est produite";
    }
    }
    else { [COLOR="DarkOrange"]//si le champs "lastname" est rempli, alors on envoi le robot sur la page suivante sans envoyer le message[/COLOR]
    header("Location: [COLOR="Lime"]http://www.site.com/page_sur_la_quelle_on_envoie_le_robot.html[/COLOR]\n\n") ;
    }
    ?>
     
Modérateurs: Nephou
Chargement...