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

iPascal

Membre confirmé
20 Novembre 2007
54
2
Paris
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 :
Bloc de code:
<?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="[email protected]"; 
$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 :
  • Nom (nom)
  • Prénom (prenom)
  • Adresse email (email)
  • Téléphone (telephone)
  • Votre message (texte)
  • <form action="http://www.multiplix.net/test/traitement.php" method="post" name="formulaire" id="formulaire" onSubmit="return verification()">
 
Heuu.. A moins que je n'aie pas compris le problème, ça parait tout bête :

Bloc de code:
<?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="[email protected]"; 
[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") ;
 
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;)
++
 
Bin c'était possible aussi :

Bloc de code:
<?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="[email protected]"; 
$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"; 
} 
?>
 
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. ;)
 
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:
 
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. ;)
 
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 :
Bloc de code:
.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.

Bloc de code:
<?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="[email protected]"; 
$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") ;
}
?>