PHP Problème formulaire

Bonjour à tous,
Sur mon site web j'ai créé un formulaire en utilisant du PHP. Celui ci propose à l'utilisateur d'entrer son nom, prénom, adresse e-mail, un message, et de choisir le destinataire en cochant un bouton radio parmi plusieurs choix. Chaque bouton envoie le message à une autre adresse mail.
Les problèmes sont les suivants :
- Lorsque je teste mon formulaire, et que j'écris un message qui contient des doubles guillemets, j'obtiens le résultat suivant dans ma boite mail :
Salut comment \"ca va\"?, si je ne fais pas de \"fautes\"

au lieu de : Salut comment "ca va" ?, si je ne fais pas de "fautes"
Vous constaterez dans mon code php que j'ai ajouté les lignes :
$message = htmlspecialchars(addslashes($message)); // pour ajouter des antislash

Cependant j'aimerais recevoir un mail sans antislash, comme écrit ci-dessus.

- Mon deuxième problème, c'est que j'aimerais pouvoir répondre directement à la personne qui a écrit le message (grâce à son adresse mail), en cliquant sur "répondre" dans mon logiciel de messagerie. Alors j'ai mis la ligne :
$entete = "From : $nom \n Reply-To : $email";

Est-elle correcte ? car quand je clique sur répondre dans mon logiciel de messagerie, j'obtiens la ligne suivante dans le destinataire :
nicos91@wanadoo.fr, nicos91@orange.fr, Reply-To:nicos91@wanadoo.fr
A noter que je ne sais pas d'où viens le "nicos91@orange.fr" car cette adresse n'existe pas (du moins ne m'appartient pas). Et pourquoi ma vraie adresse apparait-elle deux fois ? Est-ce du à mon fichier php.ini dans lequel j'ai renseigné cette adresse pour les tests avec smtp ?

Merci d'avance de votre précieuse aide.
Voilà le code php complet :

<?php

$erreur = NULL;
$info = NULL;

if(!empty($_POST['nom']) && !empty($_POST['prenom']) && !empty($_POST['email']) && !empty($_POST['message']))
{
	extract($_POST);
	if($_POST['RadioGroup1'] == 'webmaster')
	{
		if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$email))
		{
			$nom = htmlspecialchars(addslashes($nom));
			$prenom = htmlspecialchars(addslashes($prenom));
			$email = htmlspecialchars(addslashes($email));
			$message = htmlspecialchars(addslashes($message));
			$message = str_replace("\'","'",$message);
			$destinataire = "veroniq.schiff@orange.fr";
			$sujet = "Formulaire de contact";
			$entete = "From : $nom \n Reply-To : $email";
			$message = 
			"Vous venez de recevoir un nouveau message en provenance du site www.xxxxxxxx.fr \n
			Nom : $nom \n
			Prenom : $prenom \n
			Email : $email \n
			Message : $message";
			
			mail($destinataire, $sujet, $message, $entete);
			$info = "Votre message a bien été envoyé.";
			
			unset($_POST, $message, $nom, $prenom, $email);
		}
		else
		{
			$erreur="Adresse e-mail invalide";
		}
	}
	else ($_POST['RadioGroup1'] == 'president')
	{
		if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$email))
		{
			$nom = htmlspecialchars(addslashes($nom));
			$prenom = htmlspecialchars(addslashes($prenom));
			$email = htmlspecialchars(addslashes($email));
			$message = htmlspecialchars(addslashes($message));
			$destinataire = "philippe.schiff@orange.fr";
			$sujet = "Formulaire de contact";
			$entete = "From : $nom \n Reply-To : $email";
			$message = 
			"Vous venez de recevoir un nouveau message en provenance du site www.xxxxxxxxxxx.fr \n
			Nom : $nom \n
			Prenom : $prenom \n
			Email : $email \n
			Message : $message";
			
			mail($destinataire, $sujet, $message, $entete);
			$info = "Votre message a bien été envoyé.";
			
			unset($_POST, $message, $nom, $prenom, $email);
		}
		else
		{
			$erreur="Adresse e-mail invalide";
		}
	}
}
else
{
	$erreur = "Veuillez remplir tous les champs obligatoires*";
}
?>

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Merci beaucoup, en effet ça fonctionne, mais seulement en supprimant les lignes :

    $message = htmlspecialchars(addslashes($message));
    $message = str_replace("\'","'",$message);


    En laissant ces lignes, le message ne s'affichait pas, mais en les mettant en commentaires, plus de problèmes !! C'est normal ?

    Merci encore
    1. Oui c'est normal, tu n'as plus besoin d'utiliser htmlspecialchars ou addslashes si tu utilise htmlentities.
  2. Salut,

    pour afficher ton mail correctement, tu peux définir dans son entête que le contenu sera de l'HTML avec l'entête "Content-type". Puis tu utilise la fonction php htmlentities() pour afficher correctement le message.
    Par exemple:

    $entete = "Content-type: text/html; charset=utf-8";
    
    $message = htmlentities($message, ENT_QUOTES, "UTF-8");