Formulair envoi email PHP

cs_byters Messages postés 8 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 8 décembre 2009 - 8 déc. 2009 à 22:15
cs_byters Messages postés 8 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 8 décembre 2009 - 8 déc. 2009 à 23:10
Bonjour à tous,

Je suis débutant et j'ai fais avec l'assistance d'un ami un formulaire d'envoi email avec captcha récupéré sur le net (le captcha).

Mon formulaire fonctionne bien mais par momment je recois des emails vide pourtant j'ai fais en sorte qu'ils ne le soient pas je vous mets ci-dessous mon code

Code formulaire :

<?PHP
session_start();
   		$txt_erreur="";
if (isset($_GET['txt_erreur']))
{
$txt_erreur=stripslashes(urldecode($_GET['txt_erreur']));
}

   		$txt_nom="";
if (isset($_GET['nom']))
{
$txt_nom=$_GET['nom'];
}

$txt_prenom="";
if (isset($_GET['prenom']))
{
$txt_prenom=$_GET['prenom'];
}

$txt_mail="";
if (isset($_GET['email']))
{
$txt_mail=$_GET['email'];
}

$txt_titre="";
if (isset($_GET['titre']))
{
$txt_titre=$_GET['titre'];
}

$txt_message="";
if (isset($_GET['message']))
{
$txt_message=$_GET['message'];
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Contactez-nous !</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script language="javascript">
function validform(){
err=0;
if(document.form_contact.txt_nom.value==""){
err=1;
document.form_contact.txt_nom.style.backgroundColor='#FFCCCC';
}else{
document.form_contact.txt_nom.style.backgroundColor='#FFFFFF';
}
if(document.form_contact.txt_prenom.value==""){
err=1;
document.form_contact.txt_prenom.style.backgroundColor='#FFCCCC';
}else{
document.form_contact.txt_prenom.style.backgroundColor='#FFFFFF';
}
if(document.form_contact.txt_mail.value==""){
err=1;
document.form_contact.txt_mail.style.backgroundColor='#FFCCCC';
}else{
mon_mail = document.form_contact.txt_mail.value;
if (!mon_mail.match('^[-_\.0-9a-zA-Z]{1,}@[-_\.0-9a-zA-Z]{1,}[\.][0-9a-zA-Z]{2,}$')) {
                err=1;
document.form_contact.txt_mail.style.backgroundColor='#FFCCCC';
        }else{
document.form_contact.txt_mail.style.backgroundColor='#FFFFFF';
}

}
if(document.form_contact.txt_message.value==""){
err=1;
document.form_contact.txt_message.style.backgroundColor='#FFCCCC';
}else{
document.form_contact.txt_message.style.backgroundColor='#FFFFFF';
}
if(document.form_contact.captcha.value==""){
err=1;
document.form_contact.captcha.style.backgroundColor='#FFCCCC';
}else{
document.form_contact.captcha.style.backgroundColor='#FFFFFF';
}
//alert(err);
if (err==0){
return true;
}else{
return false;
}


}
</script>

<style type="text/css">
<!--
body {
background-image:none;
}
.Style1 {color: #FF0000}
-->
</style>
</head>


<form id="form_contact" name="form_contact" method="post" action="reponse.php" onsubmit="return validform()">
  Nom :,
<label>
" size="25" />
</label>,
Prénom
:   " size="25" />,

----

Email :,
" size="40" />,

----

Titre :,
" size="30" />,

----

Message :,
<label>
<textarea name="txt_message" cols="50" class="champ" id="txt_message"><?php echo($txt_message);?></textarea>

</label>,

----

Recopiez les chiffres :,
<label for="captcha"> </label>

<?PHP echo $txt_erreur; ?>,

----

,


</form>
<?php include ("referencement.php");
?>

</html>


Code vérification d'envoi :

<?php
session_start();

// variables du formulaire	 
$nom = $_POST['txt_nom'];
$prenom = $_POST['txt_prenom'];
$mail = $_POST['txt_mail'];
$titre = $_POST['txt_titre'];
$mess = $_POST['txt_message'];
/////////////////////////////////////////////

     $captcha =  $_POST['captcha'];
 $sess_captcha = $_SESSION['captcha'];
 if ($captcha<>$sess_captcha){
 	header("location:contact.php?txt_erreur=Chiffres incorrects&nom=$nom&prenom=$prenom&email=$mail&titre=$titre&message=$mess");
 }else
 {
 // Plusieurs destinataires
     $to  = 'adresse@email.com';

     // Sujet et dans le sujet on rajoute le nom et le prénom
     $subject = "Mon sujet email - ".$_POST['txt_nom']." ".$_POST['txt_prenom'];
 


     // message
     $message = "
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Email</title>
</head>


nom,
".$nom.",

----

prenom,
".$prenom.",

----

email,
".$mail.",

----

titre,
".$titre.",

----

message,
".$mess."


</html>
";

     // Pour envoyer un mail HTML, l'en-tete Content-type doit etre defini
     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

     // En-etes additionnels
     $headers .= 'To: Moi ' . "\r\n"; //destinataire
     $headers .= 'From: Sujet du formulaire ' . "\r\n"; //expediteur 
     //$headers .= 'Cc: toto ' . "\r\n"; //copie conforme
     //$headers .= 'Bcc:' . "\r\n"; copie cachée

  
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Message envoyé !</title>
</head>


<?php
     mail($to, $subject, utf8_decode(stripslashes($message)), $headers);
?>
 Message envoyé !

</html>
<?php
}
?>


malgré la vérification je reçois des mails vide, moi quand je le test ca fonctionne je ne fois pas ou est l'erreur. Peut-on encore l'améliorer.

Cordialement,
Bruno

2 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
8 déc. 2009 à 22:33
Salut,

par momment je recois des emails vide pourtant j'ai fais en sorte qu'ils ne le soient pas

Non, tu n'as rien fait de fiable pour empêcher ce cas. L'utilisation du JavaScript pour cela n'apporte qu'un confort d'utilisation masi n'est pas fiable du tout, l'utilisateur peut à loisir le modifier ou ne pas du tout en prendre compte (et c'est le cas de pas mal de bots).

De plus, ta protection par captcha ne sert à rien ici, l'utilisateur est bien redirigé mais le mail est tout de même envoyé : il te faut mettre un die, exit ou autre chose de ce genre après le header afin de terminer immédiatement le script.

En plus de ceci il te faut refaire la vérification du remplissage des champs côté serveur et non côté client, toujours en pensant à ne pas aller envoyer le mail si ce n'est pas bon.
0
cs_byters Messages postés 8 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 8 décembre 2009
8 déc. 2009 à 23:10
Merci je vais essayer de faire ca.


Cordialement,
Bruno
0
Rejoignez-nous