Je suis en train de préparer une page d'envoi de message en PHP, avec confirmation visuelle.
Lorsque les champs obligatoires sont remplis et que les champs à confirmation confirment bien ceux qu'ils doivent confirmer, le formulaire doit en principe céder à la place à un message disant que le message a été envoyé. Or, quand je valide le valide, une fois les conditions ci-dessus remplies, le formulaire s'affiche à nouveau.
Voici le fichier en question.
<?php
session_start();
// Paramètres du courriel
$destinataire='[email protected]';
$courriel=(!isset($_POST['courriel']))? '': $_POST['courriel'];
$courriel_confirmation=(!isset($_POST['courriel_confirmation']))? '': $_POST['courriel_confirmation'];
$objet=(!isset($_POST['objet']))? '': $_POST['objet'];
$message=(!isset($_POST['message']))? '': $_POST['message'];
$en_tete='From: '.$courriel.'\nReply-to: '.$courriel.'\n';
$en_tete=str_replace('\r\n', '\n', $en_tete);
// Envoi du courriel
if (isset($_POST['courriel']) && isset($_POST['courriel_confirmation']) && isset($_POST['message']) && isset($_POST['saisie']) && !empty($courriel) && !empty($courriel_confirmation) && !empty($message) && !empty($saisie) && $saisie==$_SESSION['confirmation_visuelle'] && $courriel_confirmation==$courriel){
mail($destinataire, htmlentities($objet), stripslashes(htmlentities($message)), $en_tete);
$avis='Votre message a bien été envoyé. Cliquez <a href="index.php" title="Contact">ici</a> pour revenir à l’accueil.';
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="imagetoolbar" content="no">
<title>Contact</title>
<link href="css/styles.css" rel="stylesheet" type="text/css">
<link href="css/corps.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="page">
<?php
require ("pages/en-tete.php");
?>
<div id="corps">
<h1>CONTACT</h1>
<?php
if (!isset($_POST['courriel']) || empty($courriel) || !isset($_POST['courriel_confirmation']) || empty($courriel_confirmation) || $courriel_confirmation!=$courriel || !isset($_POST['message']) || empty($message) || !isset($_POST['saisie']) || empty($saisie) || $saisie!=$_SESSION['confirmation_visuelle']){
// Afficher le formulaire
?>
<p>Pour écrire au webmestre, veuillez remplir le formulaire ci-dessous. Les champs accompagnés d’un * sont obligatoires.</p>
<form action="contact.php" method="post" name="contact" id="contact">
Votre adresse électronique* :<br>
<input name="courriel" type="text" id="courriel" size="70" value="<?php echo $courriel ?>"><br>
Confirmez votre adresse électronique* :<br>
<input name="courriel_confirmation" type="text" id="courriel_confirmation" size="70"><br>
Objet de votre message :<br>
<input name="objet" type="text" id="objet" size="70" value="<?php echo $objet ?>"><br>
Votre message* :<br>
<textarea name="message" cols="60" rows="6" id="message"><?php echo $message ?></textarea><br>
Veuillez saisir les caractères apparaissant ci-dessous*.<br>
<img src="confirmation-visuelle.php" alt="Confimation visuelle" title="Confirmation visuelle"><br>
<input name="saisie" type="text" id="saisie"><br>
<input name="annul" type="reset" id="annul" value="Annuler" onClick="window.location.href='index.php'">
<input name="envoi" type="submit" id="envoi" value="Envoyer">
</form>
<?php
}
else{
?>
<p><?php echo $avis ?></p>
<?php
}
?>
</div>
<?php
require ("pages/pied.php");
?>
</div>
</body>
</html>
Le script permettant de générer le code de confirmation visuelle.
<?php
session_start();
$caracteres='abcdefghijklnmopqrstuvwxyz0123456789';
$code='';
mt_srand((double)microtime()*1000000);
for ($i=1; $i<=8; $i++){
$code.=$caracteres[mt_rand(0, 35)];
}
$_SESSION['confirmation_visuelle']=$code;
header("Content-type: image/png");
$image_confirmation=imagecreate(160, 40);
$blanc=imagecolorallocate($image_confirmation, 200, 200, 200);
$noir=imagecolorallocate($image_confirmation, 0, 0, 0);
$bleu=imagecolorallocate($image_confirmation, 51, 102, 255);
imagettftext($image_confirmation, 20, 0, 0, 30, $noir, "sncf.ttf", $code);
$ordonnee=array(5, 10, 15, 20, 25, 30, 35);
for ($i=0; $i<sizeof($ordonnee); $i++){
imagefilledrectangle($image_confirmation, 0, $ordonnee[$i]-0.5, 160, $ordonnee[$i]+0.5, $bleu);
}
imagepng($image_confirmation);
//imagedestroy($image_confirmation);
?>
Et si vous voulez la police utilisée, elle est disponible ici.