PHP|Débutant :: Forums

Advertisement

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

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

#1 30-05-2018 08:44:36

Loic_75
Membre
Inscription : 30-05-2018
Messages : 1

Combinaison Captcha + formulaire

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

Hors ligne

#2 30-05-2018 14:16:47

tof73
Membre
Inscription : 21-12-2014
Messages : 134
Site Web

Re : Combinaison Captcha + formulaire

if($_POST['captcha'] == $_SESSION['captcha']) {
      echo "Captcha valide !";
   } else {
      echo "Captcha invalide...";
   }

cela ne fait qu'afficher quelque chose. cela n'empêche en rien l'exécution de la suite du code quelque soit le captcha saisi.
dans le cas 1, il faut faire les autres tests. dans le else, il ne faut pas que les autres tests soient exécutés.

Hors ligne

Pied de page des forums