8792 sujets

Développement web côté serveur, CMS

Salut,
Je dois faire un formulaire de contact pour un site. Mais je suis tombé sur un os (ou plusieurs...) Smiley ohwell .
J'avais pensé le faire de la manière suivante:
Un page html avec le formulaire dedans avec la methode post et comme action appel de traitement.php.
Dans le fichier traitement.php je teste si tous les champs sont remplis et je mets en forme pour l'envoyer par mail.
Mes problèmes sont les suivants:
1. Si on utilise des caractère spéciaux genre "é" et autres, dans le mail que je reçois ça le traduit en "é"...
2. Si on ne remplis pas tous les champs il y a message qui vient et dit de les remplir (cf code traitement.php ->plus bas Smiley cligne ). Mais comment faire pour revenir sur la page du formulaire sans que les champs soient effacés?

Voila le script de traitement:

<?
$msg_erreur = "<br/><br/>Attention! Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "<br/><br/>Votre message a bien été envoyé et sera traité le plus rapidement possible.";
$message = $msg_erreur;
define('MAIL_DESTINATAIRE','sebaz@freesurf.ch');
define('MAIL_SUJET','Message du site EasyIn.ch');

// vérification des champs
if (empty($_POST['nom']))
$message .= "Votre nom<br/>";
if (empty($_POST['prenom']))
$message .= "Votre prénom<br/>";
if (empty($_POST['adresse']))
$message .= "Votre adresse<br/>";
if (empty($_POST['npa']))
$message .= "Votre code postal<br/>";
if (empty($_POST['localite']))
$message .= "Votre localité<br/>";
if (empty($_POST['telephone']))
$message .= "Votre N° de téléphone<br/>";
if (empty($_POST['email']))
$message .= "Votre adresse e-mail<br/>";
if (empty($_POST['message']))
$message .= "Votre message<br/>";

// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) {

  echo $message;

// sinon c'est ok
} else {

foreach($_POST as $index => $valeur) {
$$index = stripslashes(trim($valeur));
}

//Préparation de l'entête du mail:
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['nom']} "
             ."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-15"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-MailerPHP/' . phpversion()."\r\n";

// préparation du corps du mail
$mail_corps = "Message de : $nom $prenom\n";
$mail_corps .= "Adresse : $adresse, $npa, $localite, $pays\n";
$mail_corps .= "No tel : $telephone\n";
$mail_corps .= "E-mail : $email\n\n\n";
$mail_corps .= $message;

// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {

  //Le mail est bien expédié
  echo $msg_ok;
} else {

  //Le mail n'a pas été expédié
  echo 'Une erreur est survenue lors de l\'envoi du formulaire';
}

}
?>


En tous cas merci pour votre aide parce qu'en php je suis une cruche Smiley rolleyes
Modifié par climax (05 May 2007 - 11:35)
Hello,
climax a écrit :
1. Si on utilise des caractère spéciaux genre "é" et autres, dans le mail que je reçois ça le traduit en "é"...

C'est visiblement un problème d'encodage. Est-ce que la page HTML qui contient le formulaire est encodée en iso-8859-15 ?
climax a écrit :
Mais comment faire pour revenir sur la page du formulaire sans que les champs soient effacés?

Il me semble que la solution la plus simple est de mettre le formulaire dans une page PHP, et que l'attribut "action" du formulaire pointe vers la même page.

Au début de ta page PHP, tu testes si le formulaire a été envoyé, et en fonction tu l'affiches à nouveau s'il y a des erreurs ou tu affiches un message pour dire que le mail a bien été envoyé.
Julien Royer a écrit :
Hello,

C'est visiblement un problème d'encodage. Est-ce que la page HTML qui contient le formulaire est encodée en iso-8859-15 ?

En plein dans le mille...et moi qui cherchait des erreurs dans mon script ... Smiley rolleyes

Julien Royer a écrit :

Il me semble que la solution la plus simple est de mettre le formulaire dans une page PHP, et que l'attribut "action" du formulaire pointe vers la même page.

Au début de ta page PHP, tu testes si le formulaire a été envoyé, et en fonction tu l'affiches à nouveau s'il y a des erreurs ou tu affiches un message pour dire que le mail a bien été envoyé.


Je vais de ce pas tester ça...

En tous cas déjà merci Julien