captcha ne fonctionne pas
Posté : 11 juil. 2014, 10:57
Bonjour,
Je veux mettre un captcha sur site afin d'éviter les messages des bots. J'ai trouvé des scripts sur le net. En mettant sur mon formulaire, les formules aléatoires du captcha s'affichent correctement mais quelle que soit la réponse vrai ou fausse, les commentaires sont enregistrés dans ma bdd. Cela est sûrement dû à une mauvaise interprétation du code. Pouvez-vous me dire comment je dois faire dans mon post.php qui est censé vérifié que tout soit correctement rempli. Merci pour votre aide.
Voici une partie de mon formulaire :
Je veux mettre un captcha sur site afin d'éviter les messages des bots. J'ai trouvé des scripts sur le net. En mettant sur mon formulaire, les formules aléatoires du captcha s'affichent correctement mais quelle que soit la réponse vrai ou fausse, les commentaires sont enregistrés dans ma bdd. Cela est sûrement dû à une mauvaise interprétation du code. Pouvez-vous me dire comment je dois faire dans mon post.php qui est censé vérifié que tout soit correctement rempli. Merci pour votre aide.
Voici une partie de mon formulaire :
<label for="captcha">Combien font <?php echo captcha(); ?></label>
<input type="text" name="captcha" id="captcha"/><br/>
voici la fonction captcha :
<?php
function captchaMath()
{
$n1 = mt_rand(0,10);
$n2 = mt_rand(0,10);
$nbrFr = array('zero','un','deux','trois','quatre','cinq','six','sept','huit','neuf','dix');
$resultat = $n1 + $n2;
$phrase = $nbrFr[$n1] .' plus '.$nbrFr[$n2];
return array($resultat, $phrase);
}
function captcha()
{
list($resultat, $phrase) = captchaMath();
$_SESSION['captcha'] = $resultat;
return $phrase;
}
?>
et mon post.php<?php session_start();
$_SESSION['captcha']=$resultat;
?>
<?php
//connexion à la base de donnée
try
{
$bdd= new PDO('mysql:host=localhost;dbname=bdd','pourquoipas','pw');
}
catch(Exception $e)
{
die('Erreur:'.$e->getMessage());
}
?>
$id_billet = (int) htmlspecialchars($_GET['billets']);
if( isset($_GET['billets'], $_POST['titre'], $_POST['auteur'], $_POST['mail'], $_POST['commentaire'], $_POST['botOrNotBot'],$_POST['captcha'])
&& !empty($_GET['billets']) && !empty($_POST['titre']) && !empty($_POST['auteur']) && !empty($_POST['mail']) && !empty($_POST['commentaire'])
&& !empty($_POST['imNotBot']) && !empty ($_Post['captcha']))
&& preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$_POST['mail'])
)
{ if($_POST['captcha']==$_SESSION['captcha']) }
{
// ON sécurise tout ça, très important !!
$titre = stripslashes (htmlspecialchars($_POST['titre']));
$auteur = stripslashes (htmlspecialchars($_POST['auteur']));
$mail = stripslashes (htmlspecialchars($_POST['mail']));
$commentaire = stripslashes (htmlspecialchars($_POST['commentaire']));
// Insertion des données à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO commentaires (id_billet, titre, auteur, mail, commentaire, date_commentaire) VALUES (?,?,?,?,?,NOW())');
if( $req->execute(array($id_billet, $titre, $auteur, $mail, $commentaire)) )
{
header('location: controleur/commentaire/index.php?billets='.$id_billet.'&msg=3');
}
else
{
header('location: controleur/commentaire/index.php?billets='.$id_billet.'&msg=4');
}
}
else
{
header('location: controleur/commentaire/index.php?billets='.$id_billet.'&msg=1');
}
?>