Bonjour,
J'ai un petit soucis qui à l'air bête mais je n'arrive pas à faire fonctionner mon captcha avec le formulaire. je m'explique : je peux très bien envoyer un message sans passer par le captcha !. Surement une erreur de placement ? je vois vraiment pas, que dois-je faire ?
Voici mon code index.php :
<?php
session_start();
/* captcha */
if(isset($_POST['captcha'])) {
if($_POST['captcha'] == $_SESSION['captcha']) {
echo "Captcha valide !";
} else {
echo "Captcha invalide...";
}
/* formulaire */
$VotreAdresseMail="test@gmail.com";//mettez ici votre adresse mail
if(isset($_POST['envoyer'])) { // si le bouton "Envoyer" est appuyé
//on vérifie que le champ mail est correctement rempli
if(empty($_POST['mail'])) {
echo "Le champ mail est vide";
} else {
//on vérifie que l'adresse est correcte
if(!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[a-zA-Z]{2,6}$#",$_POST['mail'])){
echo "L'adresse mail entrée est incorrecte";
}else{
//on vérifie que le champ sujet est correctement rempli
if(empty($_POST['sujet'])) {
echo "Le champ sujet est vide";
}else{
//on vérifie que le champ sujet est correctement rempli
if(empty($_POST['message'])) {
echo "Le champ message est vide";
}else{
//tout est correctement renseigné, on envoi le mail
//on renseigne les entêtes de la fonction mail de PHP
$Entetes = "MIME-Version: 1.0\r\n";
$Entetes .= "Content-type: text/html; charset=iso-8859-1\r\n";
$Entetes .= "From: Nom de votre site <".$_POST['mail'].">\r\n";//de préférence une adresse avec le même domaine de là où, vous utilisez ce code, cela permet un envoie quasi certain jusqu'au destinataire
$Entetes .= "Reply-To: Nom de votre site <".$_POST['mail'].">\r\n";
//on sécurise les champs
$Mail=htmlentities($_POST['mail'],ENT_QUOTES,"ISO-8859-1"); //ENT_QUOTES Convertit les guillemets doubles et les guillemets simples, en entitès HTML, ISO-8859-1 est la norme pour les langues occidentales
$Sujet=htmlentities($_POST['sujet'],ENT_QUOTES,"ISO-8859-1");
$Message=htmlentities($_POST['message'],ENT_QUOTES,"ISO-8859-1");
//en fin, on envoi le mail
if(mail($VotreAdresseMail,utf8_encode($Sujet),nl2br($Message),$Entetes)) { //la fonction nl2br permet de conserver les sauts de ligne et la fonction urf8_encore de conserver les accents dans le titre
echo "Le mail à été envoyé avec succès !";
} else {
echo "Une erreur est survenue, le mail n'a pas été envoyé";
}
}
}
}
}
}
}
?>
<form method="POST" action="index.php">
Mail: <input type="text" name="mail" value="" />
Sujet: <input type="text" name="sujet" value="" />
Message: <textarea name="message" cols="40" rows="20"></textarea>
<img src="captcha.php" />
<input type="text" name="captcha" />
<input type="submit" name="envoyer" value="Envoyer"/>
<!-- <input type="submit" name="envoyer" value="Envoyer" /> -->
</form>
captcha.php
<?php
session_start();
$_SESSION['captcha'] = mt_rand(1000,9999);
$img = imagecreate(65,30);
$font = 'fonts/@El&Font Destroy!.ttf';
$bg = imagecolorallocate($img,255,255,255);
$textcolor = imagecolorallocate($img, 0, 0, 0);
imagettftext($img, 23, 0, 3, 30, $textcolor, $font, $_SESSION['captcha']);
header('Content-type:image/jpeg');
imagejpeg($img);
imagedestroy($img);
?>