PHP Problème formulaire

Fermé
nicos91 - 28 août 2010 à 15:38
 noux - 28 août 2010 à 16:18
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

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");
0
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
0
Oui c'est normal, tu n'as plus besoin d'utiliser htmlspecialchars ou addslashes si tu utilise htmlentities.
0