PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Forum Général PHP » Combinaison Captcha + formulaire » 30-05-2018 14:16:47

Loic_75
Réponses : 1

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);
 
?>
 

Pied de page des forums

Propulsé par FluxBB