OVH Cloud OVH Cloud

une petite erreur avec PHP mail(), help!

9 réponses
Avatar
sab
Bonjour et d'avance merci:

J'ai un formulaire que j'envoie par PHP mail()

mon formulaire commence bien evidemment par:
<form method="post" action="envoi.php">
Ci dessous le code de: ENVOI.PHP

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>envoi.php</title>
</head>
<body>
<?php

// récuperation des variables provenant du formulaire
$prenomnom = $_POST['T1'];
$email = $_POST['T4'];
$qualite = $_POST['T2'];
$adresse = $_POST['T3'];
$telephone = $_POST['T5'];
$mobile = $_POST['T6'];

//E-mail auquel sera envoyé le formulaire
$destinataire = 'xxxxxx@club-internet.fr';

//sujet du mail envoyé
$sujet = 'Formulaire d'inscription';

//test pour vérifier que les champs sont bien tous remplis !!
if( !empty($prenomnom) && !empty($email) && !empty($adresse) ){

// création du message, les \n permettent de faire un saut de ligne
$message = "Une réponse est parvenue sur le
site\n\nNom:\n$prenomnom\n\nEmail:\n$email\n\nQualité:\n$qualite
\n\nAdresse:\n$adresse\n\nTéléphone:\n$telephone\n\nMobile:\n$mobile";

// On envoi le mail
if( mail($destinataire, $sujet, $message, "From: $email") )

// Si tout se passe bien on affiche un message de succès d'envoi
{header("Location: http://a.demxxxeurop.fr/merci.htm");}

// Si on rencontre un problème de réseau (connection serveur etc...)
else{ echo 'Une erreur est survenue lors de l\'envoi du message';}

}

// Si tous les champs ne sont pas remplis
else{ echo 'Merci de remplir tous les champs';}
?>
</body>
</html>

Lorsque je ne rempli pas les 3 champs obligatoire j'ai bien le
message:"merci de remplir tous les champs" et lorsque tous les champs
sont remplis et que je fais envoi le formulaire est bien expédié sur
mon email. MAIS je n'ai pas la page de remerciement et qui indique que
le formulaire est bien parti: nommmée "merci.htm" . A la place
s'affiche ma un message d'erreur:

Warning: Cannot modify header information - headers already sent by
(output started at /mnt/147/sda/5/8/a.demxxxeurop/envoi.php:9) in
/mnt/147/sda/5/8/a.demxxxeurop/envoi.php on line 43

Il y a forcement une erreur quelque part dans mon code qui empeche
d'afficher apres l'envoi la page de remerciement

Chercher l'erreur!!

9 réponses

Avatar
Olivier Miakinen
[ je ne suis pas sûr d'avoir déjà envoyé cette réponse ou non -- pardon
si c'était le cas ]

Bonjour,

Le 20/03/2009 12:10, sab a écrit :

J'ai un formulaire que j'envoie par PHP mail()

mon formulaire commence bien evidemment par:
<form method="post" action="envoi.php">
Ci dessous le code de: ENVOI.PHP

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">



Moui bof... il y a un peu plus standard comme jeu de caractères que
windows-1252...

[...]
<?php

[...]
$email = $_POST['T4'];
[...]

//test pour vérifier que les champs sont bien tous remplis !!
if( !empty($prenomnom) && !empty($email) && !empty($adresse) ){



Tu n'as pas vérifié que $email ne contenait pas de sauts de ligne.

// création du message, les n permettent de faire un saut de ligne
$message = "Une réponse est parvenue sur le
sitennNom:n$prenomnomnnEmail:n$emailnnQualité:n$qualite
nnAdresse:n$adressennTéléphone:n$telephonennMobile:n$mobile";



Attention, tu utilises autre chose que de l'US-ASCII (« réponse »,
« Qualité », « Téléphone »), aussi il serait bon de déclarer le jeu de
caractères. Cela dit, si c'est toi le destinataire et que tu n'es pas
gêné, c'est ton problème.

// On envoi le mail
if( mail($destinataire, $sujet, $message, "From: $email") )



Avec un $email si peu vérifié, ton formulaire peut servir de relais à
spam, par paquets de mille destinataires. Cf. la réponse que j'ai déjà
faite à remy.

// Si tout se passe bien on affiche un message de succès d'envoi
{header("Location: http://a.demxxxeurop.fr/merci.htm");}



Ça ne peut pas marcher : les entêtes ont déjà été envoyés.

[...] message d'erreur:

Warning: Cannot modify header information - headers already sent by
(output started at /mnt/147/sda/5/8/a.demxxxeurop/envoi.php:9) in
/mnt/147/sda/5/8/a.demxxxeurop/envoi.php on line 43



RTFM !

Qui plus est, c'est exactement le même problème que remy, et je l'ai
déjà renvoyé vers <http://faqfclphp.free.fr/#rub2.12>.

Chercher l'erreur!!



Y a qu'à lire la doc.

<cit. http://fr.php.net/header>
Remember that header() must be called before any actual output is
sent, either by normal HTML tags, blank lines in a file, or from PHP.
</cit.>

<cit. http://fr.php.net/manual/fr/function.header.php>
N'oubliez jamais que header() doit être appelée avant que le moindre
contenu ne soit envoyé, soit par des lignes HTML habituelles dans le
fichier, soit par des affichages PHP.
</cit.>
Avatar
Olivier Miakinen
Bonjour,

Le 20/03/2009 12:10, sab a écrit :

J'ai un formulaire que j'envoie par PHP mail()

mon formulaire commence bien evidemment par:
<form method="post" action="envoi.php">
Ci dessous le code de: ENVOI.PHP

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">



Moui bof... il y a un peu plus standard comme jeu de caractères que
windows-1252...

[...]
<?php

[...]
$email = $_POST['T4'];
[...]

//test pour vérifier que les champs sont bien tous remplis !!
if( !empty($prenomnom) && !empty($email) && !empty($adresse) ){



Tu n'as pas vérifié que $email ne contenait pas de sauts de ligne.

// création du message, les n permettent de faire un saut de ligne
$message = "Une réponse est parvenue sur le
sitennNom:n$prenomnomnnEmail:n$emailnnQualité:n$qualite
nnAdresse:n$adressennTéléphone:n$telephonennMobile:n$mobile";



Attention, tu utilises autre chose que de l'US-ASCII (« réponse »,
« Qualité », « Téléphone »), aussi il serait bon de déclarer le jeu de
caractères. Cela dit, si c'est toi le destinataire et que tu n'es pas
gêné, c'est ton problème.

// On envoi le mail
if( mail($destinataire, $sujet, $message, "From: $email") )



Avec un $email si peu vérifié, ton formulaire peut servir de relais à
spam, par paquets de mille destinataires. Cf. la réponse que j'ai déjà
faite à remy.

// Si tout se passe bien on affiche un message de succès d'envoi
{header("Location: http://a.demxxxeurop.fr/merci.htm");}



Ça ne peut pas marcher : les entêtes ont déjà été envoyés.

[...] message d'erreur:

Warning: Cannot modify header information - headers already sent by
(output started at /mnt/147/sda/5/8/a.demxxxeurop/envoi.php:9) in
/mnt/147/sda/5/8/a.demxxxeurop/envoi.php on line 43



RTFM !

Qui plus est, c'est exactement le même problème que remy, et je l'ai
déjà renvoyé vers <http://faqfclphp.free.fr/#rub2.12>.

Chercher l'erreur!!



Y a qu'à lire la doc.

<cit. http://fr.php.net/header>
Remember that header() must be called before any actual output is
sent, either by normal HTML tags, blank lines in a file, or from PHP.
</cit.>

<cit. http://fr.php.net/manual/fr/function.header.php>
N'oubliez jamais que header() doit être appelée avant que le moindre
contenu ne soit envoyé, soit par des lignes HTML habituelles dans le
fichier, soit par des affichages PHP.
</cit.>
Avatar
CrazyCat
Olivier Miakinen wrote:
// Si tout se passe bien on affiche un message de succès d'envoi
{header("Location: http://a.demxxxeurop.fr/merci.htm");}


Ça ne peut pas marcher : les entêtes ont déjà été envoyés.



Au risque d'être hors-sujet, je me permet tout de même cette remarque:
autant que faire se peut, effectuer d'abord les traitements PHP et
ensuite la génération de la page.

Dans le cas de pages traitant des formulaires, j'irais même plus loin:
faire le traitement dans une autre page qui ensuite effectuera une
redirection vers la page html, afin d'éviter un multipostage à coup de
rechargements.

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Avatar
sab
Olivier Miakinen a écrit :
[ je ne suis pas sûr d'avoir déjà envoyé cette réponse ou non -- pardon
si c'était le cas ]

Bonjour,

Le 20/03/2009 12:10, sab a écrit :

J'ai un formulaire que j'envoie par PHP mail()

mon formulaire commence bien evidemment par:
<form method="post" action="envoi.php">
Ci dessous le code de: ENVOI.PHP

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">



Moui bof... il y a un peu plus standard comme jeu de caractères que
windows-1252...


Ah ben ça s'est front Page!! un peu vieillot mais pour ce que je fais
cela me suffit!!



[...]
<?php

[...]
$email = $_POST['T4'];
[...]

//test pour vérifier que les champs sont bien tous remplis !!
if( !empty($prenomnom) && !empty($email) && !empty($adresse) ){



Tu n'as pas vérifié que $email ne contenait pas de sauts de ligne.


Que veux tu dire $email est l'email que la personne a rempli dans le
champs "mail" du formulaire.


// création du message, les n permettent de faire un saut de ligne
$message = "Une réponse est parvenue sur le
sitennNom:n$prenomnomnnEmail:n$emailnnQualité:n$qualite
nnAdresse:n$adressennTéléphone:n$telephonennMobile:n$mobile";



Attention, tu utilises autre chose que de l'US-ASCII (« réponse »,
« Qualité », « Téléphone »), aussi il serait bon de déclarer le jeu de
caractères. Cela dit, si c'est toi le destinataire et que tu n'es pas
gêné, c'est ton problème.



oui c'est moi qui receptionne le formulaire sur mon mail et cela
fonctionne tres bien la presentation est tout a fait correcte et je ne
sais surtout pas comment faire autremùent!!

Ça ne peut pas marcher : les entêtes ont déjà été envoyés.

[...] message d'erreur:

Warning: Cannot modify header information - headers already sent by
(output started at /mnt/147/sda/5/8/a.demxxxeurop/envoi.php:9) in
/mnt/147/sda/5/8/a.demxxxeurop/envoi.php on line 43



RTFM !

Qui plus est, c'est exactement le même problème que remy, et je l'ai
déjà renvoyé vers <http://faqfclphp.free.fr/#rub2.12>.

Chercher l'erreur!!





Ben comme je ne fais que de l'html et de temps en temps j'accomode un
petit script PHP "à ma sauce" c'est pour cela que je viens demander un
petit depannage , car cela ne doit pas etre grand chose a changer dans
le script...
mais quoi..??
Avatar
Olivier Miakinen
Le 20/03/2009 20:26, sab a écrit :

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">



Moui bof... il y a un peu plus standard comme jeu de caractères que
windows-1252...


Ah ben ça c'est front Page!! un peu vieillot mais pour ce que je fais
cela me suffit!!



Ah ! ;-)

Note que tu peux toujours remplacer windows-1252 par ISO-8859-1 après
coup, si jamais tu n'utilises aucune des caractères spécifiques à
windows-1252.

[...]
<?php

[...]
$email = $_POST['T4'];
[...]

//test pour vérifier que les champs sont bien tous remplis !!
if( !empty($prenomnom) && !empty($email) && !empty($adresse) ){



Tu n'as pas vérifié que $email ne contenait pas de sauts de ligne.


Que veux tu dire $email est l'email que la personne a rempli dans le
champs "mail" du formulaire.



Je veux dire que si tu remplaces « la personne » par « un robot
spammeur », alors dans $_POST['T4'] il peut remplacer :
""
par :
"
To:
To:
...
...
To:
Subject: achetez mon
rn
... contenu du spam ..."

Ledit robot spammeur peut t'envoyer cette requête POST à raison de
quelques centaines par minute, ce qui fait plusieurs centaines de
milliers d'adresses spammées à la minute grâce à ton formulaire.

// création du message, les n permettent de faire un saut de ligne
$message = "Une réponse est parvenue sur le
sitennNom:n$prenomnomnnEmail:n$emailnnQualité:n$qualite
nnAdresse:n$adressennTéléphone:n$telephonennMobile:n$mobile";



Attention, tu utilises autre chose que de l'US-ASCII (« réponse »,
« Qualité », « Téléphone »), aussi il serait bon de déclarer le jeu de
caractères. Cela dit, si c'est toi le destinataire et que tu n'es pas
gêné, c'est ton problème.



oui c'est moi qui receptionne le formulaire sur mon mail et cela
fonctionne tres bien la presentation est tout a fait correcte et je ne
sais surtout pas comment faire autremùent!!



Pour faire autrement, il faudrait rajouter les entêtes MIME qui vont
bien dans le paramètre header. Si tu as envie de bien faire les choses,
va voir les réponses que j'ai faites il y a quelques jours à Pascale.
Mais bon, ne t'embête pas avec ça tant que tu es le seul concerné et
que « chez toi ça marche »©.

Ça ne peut pas marcher : les entêtes ont déjà été envoyés.
[...]
<http://faqfclphp.free.fr/#rub2.12>.



Ben comme je ne fais que de l'html et de temps en temps j'accomode un
petit script PHP "à ma sauce" c'est pour cela que je viens demander un
petit depannage , car cela ne doit pas etre grand chose a changer dans
le script...
mais quoi..??



En clair, au lieu d'avoir :

-----------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>envoi.php</title>
</head>
<body>
<?php
...
if (...) { header(...) }
else { echo 'Merci de remplir tous les champs'; }
?>
</body>
</html>
-----------------------------------------------------------

... tu dois avoir :
-----------------------------------------------------------
<?php
...
if (...) { header(...); exit; }
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>envoi.php</title>
</head>
<body>
<p>
Merci de remplir tous les champs
</p>
</body>
</html>
-----------------------------------------------------------

*MAIS* à moins d'être parfaitement au point en ce qui concerne la
sécurité et les techniques de spam, il est *TRÈS* déconseillé d'utiliser
la fonction mail() en lui passant des données venant d'un formulaire...


Cordialement,
--
Olivier Miakinen
Avatar
sab
Bonjour et merci de vos reponses..
Je veux dire que si tu remplaces « la personne » par « un robot
spammeur », alors dans $_POST['T4'] il peut remplacer :
""
par :
"
To:
To:
...
...
To:
Subject: achetez mon
rn
... contenu du spam ..."


dans:
if( mail($destinataire, $sujet, $message, "From: $email") )

je peux tres bien ne pas mettre "from: $email" si cela pose trop de
probleme de securité ça ne me derange pas c'etait simplement par
facilité ainsi quand je recevais sur mon mail le formulaire , je
n'avais qu'a faire "répondre" dans mon logiciel de messagerie pour
repondre à la personne qui avait envoyé le formulaire depuis le site
mais je peux tout aussi bien recopier le champ email dans le formulaire
que j'ai reçu.
A moins qu'il y est une façon simple d'empecher les sauts de lignes
dans le champ email.



En clair, au lieu d'avoir :

-----------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>envoi.php</title>
</head>
<body>
<?php
...
if (...) { header(...) }
else { echo 'Merci de remplir tous les champs'; }
?>
</body>
</html>
-----------------------------------------------------------

... tu dois avoir :
-----------------------------------------------------------
<?php
...
if (...) { header(...); exit; }
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>envoi.php</title>
</head>
<body>
<p>
Merci de remplir tous les champs
</p>
</body>
</html>



Donc dans "envoi.php" il suffit de commencer par le code php: <?php
........?> et ensuite le code html : <html> avec bien evidemment son
head et ensuite son body </html>
Un truc qui me semble byzarre tout de meme c'est que dans le code php
j'ai un "if" mais je n'ai plus aucun "else"

Bon je vais essayer tout de meme

Merci
Avatar
Olivier Miakinen
Le 22/03/2009 23:28, sab a écrit :
[...]
dans:
if( mail($destinataire, $sujet, $message, "From: $email") )

je peux tres bien ne pas mettre "from: $email" si cela pose trop de
probleme de securité ça ne me derange pas c'etait simplement par
facilité ainsi quand je recevais sur mon mail le formulaire , je
n'avais qu'a faire "répondre" dans mon logiciel de messagerie pour
repondre à la personne qui avait envoyé le formulaire depuis le site



Oui, je comprends bien.

mais je peux tout aussi bien recopier le champ email dans le formulaire
que j'ai reçu.
A moins qu'il y ait une façon simple d'empecher les sauts de lignes
dans le champ email.



Oui, par une expression rationnelle. Tu peux même en profiter pour
rejeter un grand nombre de chaînes qui n'ont aucune chance d'être une
adresse de courriel. Cf. <http://faqfclphp.free.fr/#rub5.3>.

$ltext = '[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+';
$rtext = '[A-Za-z0-9-]+';
$pattern = ":^$ltext(.$ltext)*@$rtext(.$rtext)+$:";
if (preg_match($pattern, $email)) {
// Ok, adresse non dangereuse
$safefrom = "From: $email";
} else {
// pas une vraie adresse, danger !
$message .= "nadresse de courriel prétendue=$email";
$safefrom = "From: $destinataire"; // défini en dur plus haut
}
if (mail($destinataire, $sujet, $message, $safefrom)) {
...
}

En clair, au lieu d'avoir :
[...]
... tu dois avoir :
[...]





Merci d'alléger au maximum les citations quand tu réponds. Il est rare
qu'une citation si longue passe le cap de la modération.

Donc dans "envoi.php" il suffit de commencer par le code php: <?php
........?> et ensuite le code html : <html> avec bien evidemment son
head et ensuite son body </html>



Exactement. Parce que les entêtes ne peuvent être envoyés qu'au début.
Au premier octet de contenu envoyé, cela clôt la liste des entêtes.

Un truc qui me semble bizarre tout de meme c'est que dans le code php
j'ai un "if" mais je n'ai plus aucun "else"



Pour simplifier le code, j'ai mis un « exit » juste après la commande
header().

Tu peux préférer mettre un :
else {
suivi de :
?>
suivi du code HTML,
pour finir par :
<?php
}
?>
mais moi je trouve ça peu lisible (et pour tout dire très moche). Il y a
d'autres possibilités mais je trouve que la solution du « exit » est la
plus propre.
Avatar
sab
Bonjour et merci...

tel quel cela ne fonctionnait pas encore...(j'avais encore une alerte)
j'ai adapté un tout petit peu (en supprimant le double "If" ) et c'est
nickel! J'ai rajouté la vérification de l'email qui elle aussi en cas
de "faux" emails est parfaite et fonctionne. J'arrive donc à ce code ci
dessous. Mon formulaire ainsi renvoyé est il maintenant sécurisé?

<?php
// récuperation des variables provenant du formulaire
$prenomnom = $_POST['T1'];
$email = $_POST['T4'];
$qualite = $_POST['T2'];
$adresse = $_POST['T3'];
$telephone = $_POST['T5'];
$mobile = $_POST['T6'];

//E-mail auquel sera envoyé le formulaire
$destinataire = '';

//on verifie le champs email pour ne pas avoir de spam
$ltext = '[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+';
$rtext = '[A-Za-z0-9-]+';
$pattern = ":^$ltext(.$ltext)*@$rtext(.$rtext)+$:";
if (preg_match($pattern, $email)) {
// Ok, adresse non dangereuse
$safefrom = "From: $email";
} else {
// pas une vraie adresse, danger !
$message .= "nadresse de courriel prétendue=$email";
$safefrom = "From: $destinataire"; // défini en dur plus haut
}
//sujet du mail envoyé
$sujet = 'Formulaire de contact';

// création du message, les n permettent de faire un saut de ligne
$message = "Une réponse est parvenue sur le site
nnNom:n$prenomnomnnEmail:n$emailnnQualité:n$qualite
nnAdresse:n$adressennTéléphone:n$telephonennMobile:n$mobile";

//test pour vérifier que les champs sont bien tous remplis !!
if( !empty($prenomnom) && !empty($email) && !empty($adresse) ){

// On envoi le mail
mail($destinataire, $sujet, $message, $safefrom);

//et on affiche un message de succès d'envoi
header("Location: http://a.dexxxxrope.free.fr/merci.htm"); }

else {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>envoi.php</title>
</head>
<body>
<p> Merci de remplir les champs obligatoires: nom, adresse et email
</p>
</body>
</html>
<?php
}
?>

Voila j'ai mis l'option else (avec exit cela fonctionnait aussi)
uniquement pour moi car dans 6 mois quand j'aurais besoin de revenir
dessus ou autre, j'aurais la bonne syntaxe if..else et la façon de
l'ecrire.!!

Si l'on voulait pinailler on pourrait rajouter une alerte au cas ou il
y ait une panne duserveur qui ne veuille pas envoyer le mail et
afficher une page ou l'on dirait que le formulaire n'a pu etre envoyé
et de recommencer ulterieurement...mais je suppose que si la fonction
Php mail d'un serveur ne fonctionne pas le serveur lui meme doit
envoyer une alerte non? dans ce cas cela ferait double emploi...

Merci bien
Avatar
Olivier Miakinen
Le 23/03/2009 17:19, sab a écrit :

[...] Mon formulaire ainsi renvoyé est il maintenant sécurisé?



Ça me semble bon. J'ai juste une remarque mais sans impact sur la sécurité.

$message .= "nadresse de courriel prétendue=$email";



Je ne l'avais pas précisé, mais ceci est à faire *après* avoir rempli
$message avec tout le reste (nom, prénom, etc.), sinon la valeur est
écrasée par la suite.

// création du message, les n permettent de faire un saut de ligne
$message = "Une réponse est parvenue sur le site
nnNom:n$prenomnomnnEmail:n$emailnnQualité:n$qualite
nnAdresse:n$adressennTéléphone:n$telephonennMobile:n$mobile";



C'est ça qu'il fallait mettre avant le « $message .= ... ».

Voila j'ai mis l'option else (avec exit cela fonctionnait aussi)
uniquement pour moi car dans 6 mois quand j'aurais besoin de revenir
dessus ou autre, j'aurais la bonne syntaxe if..else et la façon de
l'ecrire.!!



Tu fais bien comme tu veux ! ;-)

Si l'on voulait pinailler on pourrait rajouter une alerte au cas ou il
y ait une panne duserveur qui ne veuille pas envoyer le mail et
afficher une page ou l'on dirait que le formulaire n'a pu etre envoyé
et de recommencer ulterieurement...



Si le serveur web fonctionne mais pas le serveur SMTP, alors
effectivement tu pourrais envisager une page d'erreur spécifique
car je ne vois pas, sinon, comment l'utilisateur pourrait être
prévenu. Mais j'ai une meilleure idée : l'utilisateur n'en a rien
à faire de tes problèmes internes, alors plutôt que lui retourner
un code d'erreur tu pourrais stocker dans un fichier ou une base de
données les infos que tu n'as pas pu t'envoyer par courriel.

À charge pour toi, ensuite, de vérifier de temps en temps s'il n'y
a pas justement des données en attente.

mais je suppose que si la fonction
Php mail d'un serveur ne fonctionne pas le serveur lui meme doit
envoyer une alerte non?



Je ne pense pas, non. Mais je peux me tromper.

Sinon, voici un code un peu amélioré par rapport au précédent :

<?php
// récuperation des variables provenant du formulaire
$prenomnom = $_POST['T1'];
$email = $_POST['T4'];
$qualite = $_POST['T2'];
$adresse = $_POST['T3'];
$telephone = $_POST['T5'];
$mobile = $_POST['T6'];

//E-mail auquel sera envoyé le formulaire
$destinataire = '';

//test pour vérifier que les champs sont bien tous remplis !!
if( !empty($prenomnom) && !empty($email) && !empty($adresse) ){

// création du message, les n permettent de faire un saut de ligne
$message = "Une réponse est parvenue sur le sitenn" .
"Nom:n$prenomnomnnEmail:n$emailnnQualité:n$qualitenn" .
"Adresse:n$adressennTéléphone:n$telephonennMobile:n$mobile";

//on verifie le champ email pour ne pas avoir de spam
$ltext = '[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+';
$rtext = '[A-Za-z0-9-]+';
$pattern = ":^$ltext(.$ltext)*@$rtext(.$rtext)+$:";
if (preg_match($pattern, $email)) {
// Ok, adresse non dangereuse
$safefrom = "From: $email";
} else {
// pas une vraie adresse, danger !
$message .= "nnadresse de courriel prétendue=$email";
$safefrom = "From: $destinataire"; // défini en dur plus haut
}
//sujet du mail envoyé
$sujet = 'Formulaire de contact';

// On envoi le mail
mail($destinataire, $sujet, $message, $safefrom);

//et on affiche un message de succès d'envoi
header("Location: http://a.dexxxxrope.free.fr/merci.htm");

} else {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>envoi.php</title>
</head>
<body>
<p> Merci de remplir les champs obligatoires: nom, adresse et email
</p>
</body>
</html>
<?php
} // fin du « if (champs non vides) ... else ... »
?>


Cordialement,
--
Olivier Miakinen