Comment faire foncitonne correctement mon captcha

ANTHURIUMRE Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour,

Je dois mettre sur un site un captcha pour canaliser les faux messages. J'ai trouvé sur le net un script bien que le captcha fonctionne bien sur mon formulaire de façon aléatoire les messages sont quand même postés dans ma bdd que la réponse soit bonne ou non. C'est à dire mon fichier post.php ne fonctionne pas. Pouvez-vous m'aider s'il vous plait. Merci par avance et voici ci dessous mes scripts :

formulaire.php

<label for="captcha">Combien font <?php echo captcha(); ?></label>
<input type="text" name="captcha" id="captcha"/><br/>


mafonction 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;
}
?>


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');
}


?>






4 réponses

DDD
 
!empty ($_Post['captcha']))

Maybe?
0
ANTHURIUMRE Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonsoir DDD,

J'ai mis en majuscule mais cela ne change rien. Merci de t'intéresser à mon cas.

I put in capital letter but nothing change. Thank your for your help.
0
Utilisateur anonyme
 
As-tu bien mis session_start(); dans la page où se trouve ta fonction captcha?

Je n'arrive pas non plus à comprendre le début de post.php

<?php session_start();
$_SESSION['captcha']=$resultat;
//La valeur de $resultat n'est pas déclarée avant qu'elle soit attribuée
//à $_SESSION['captcha']!?


Peu importe le nombre qu'on entre dans l'input captcha, le message est envoyé vers la bdd, c'est ça?
0
ANTHURIUMRE Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonsoir Sunr,

J'ai mis dans la page de mon formulaire

<?php
session_start();
print_r($_SESSION['captcha']);
?>

et entre temps j'ai mis aussi ce code en haut de ma page post.php.

Mais rien n'y fait. En effet peu importe le nombre qu'on entre dans l'input captcha, le message est envoyé vers la bdd.

Merci de chercher à m'aider.
0
Utilisateur anonyme
 
Je n'ai cependant aucune idée de ce que pourrait être le problème...
0