pierrewebaster
Invité n'ayant pas de compte PHPfrance
04 août 2015, 15:49
Yes ! J'ai testé la solution avec une variable pour chaque type de message qui me parait plus facilement maitrisable pour le simple designer que je suis, enfin j'ai tenté d'adapter cette solution à mon code...
Ça fonctionne presque bien, les erreurs (champs vides, pb sur format mail) apparaissent bien, le mail est bien envoyé mais le message success n'apparait pas
En fait j'ai remplacé les $alert par $error sur les messages d'erreurs et remplacé $alert par $success sur le message de validation, comme ceci
if (mail($to, $msg, $headers))
{
$success = 'Merci pour votre message';
je dois avoir un problème de logique que je ne comprend pas.
Voilà mon code, nettoyé de l'inutile :
<?php
if (isset($_POST['envoye']))
{
if (get_magic_quotes_gpc())
{
$nom = stripslashes(trim($_POST['nom']));
$expediteur = stripslashes(trim($_POST['email']));
$message = stripslashes(trim($_POST['message']));
}
else
{
$sujet = "Demande de contact depuis http://www.wambaugh.us";
$nom = trim($_POST['nom']);
$expediteur = trim($_POST['email']);
$message = trim($_POST['message']);
$message = utf8_decode($message);
}
/* Expression régulière permettant de vérifier si le
* format d'une adresse e-mail est correct */
$regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';
/* Expression régulière permettant de vérifier qu'aucun
* en-tête n'est inséré dans les champs */
$regex_head = '/[\n\r]/';
/* Si le formulaire n'est pas posté de notre site on renvoie
* vers la page d'accueil */
if($_SERVER['HTTP_REFERER'] != 'http://www.monsite.com')
{
header('Location: http://www.monsite.com/');
}
/* On vérifie que tous les champs sont remplis */
elseif (empty($nom)
|| empty($expediteur)
|| empty($message))
{
[b]$error[/b] = 'Oups, vous avez du oublier quelque chose';
}
/* On vérifie que le format de l'e-mail est correct */
elseif (!preg_match($regex_mail, $expediteur))
{
[b]$error[/b] = 'Oups, il doit y avoir une erreur sur l\'adresse : '.$expediteur.'';
}
/* On vérifie qu'il n'y a aucun header dans les champs */
elseif (preg_match($regex_head, $expediteur)
|| preg_match($regex_head, $nom)
|| preg_match($regex_head, $sujet))
{
[b]$error[/b] = 'En-têtes interdites';
}
/* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
elseif (!isset($_COOKIE['sent']))
{
/* Destinataire (votre adresse e-mail) */
$to = '[email protected]';
/* Construction du message */
$msg = ''."\r";
$msg .= 'Ce mail a été envoyé depuis http://www.monsite.com par :'."\r\n\r\n";
$msg .= ''.$nom."\r\n\r\n";
$msg .= 'Voici son message :'."\r\n";
$msg .= ''."\r";
$msg .= $message."\r\n";
/* En-têtes de l'e-mail */
$headers = 'From: '.$nom.' <'.$expediteur.'>'."\r\n\r\n";
/* Envoi de l'e-mail */
if (mail($to, $msg, $headers))
{
[b]$success[/b] = 'Merci pour votre message';
/* On crée un cookie de courte durée (ici 120 secondes) pour éviter de
* renvoyer un mail en rafraichissant la page */
setcookie("sent", "1", time() + 60);
/* On détruit la variable $_POST */
unset($_POST);
}
else
{
$error = 'Erreur d\'envoi de l\'e-mail';
}
}
/* Cas ou le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
else
{
unset($_POST);
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Contact</title>
</head>
<body>
<div class="contenuContact">
<form action="contact.php" method="post">
<div class="col-sm-12"><div class="contact"><input type="text" id="nom" name="nom" class="form-control" placeholder="Nom"
value="<?php echo (isset($_POST['nom'])) ? $nom : '' ?>"
/></div></div>
<div class="col-sm-12"><div class="contact"><input type="text" id="email" name="email" class="form-control" placeholder="Adresse email"
value="<?php echo (isset($_POST['email'])) ? $expediteur : '' ?>"
/></div></div>
<div class="col-sm-12"><div class="contact"><textarea style="width:100%" id="message" name="message" class="textarea" placeholder="Message"><?php echo (isset($_POST['message'])) ? $message : '' ?></textarea></div></div>
<div class="col-sm-12"><div class="contact" style="text-align:center"><input class="btn btn-default" type="submit" name="envoye" value="Envoyer" /></div>
</div>
</form>
<?php
if (!empty([b]$error[/b]))
{
echo '<div class="col-sm-12"><div class="contact"><p style="color:#a69a91; background-color:#660000; text-align:center; font-size:16px; border-radius: 4px; margin: 10px 0; padding:10px;">'.$error.'</p></div></div>';
}
?>
</body>
</html>
Merci encore de votre aide