captcha ne fonctionne pas

Petit nouveau ! | 1 Messages

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

	
?>  

Mammouth du PHP | 1339 Messages

11 juil. 2014, 14:21

<?php session_start();
$_SESSION['captcha']=$resultat;
$resultat n'est renseigné nul part ... Donc ta session = le vide ...

Ta session étant déclaré dans captcha() que ce passe t il si tu fais juste
<?php session_start();
print_r($_SESSION['captcha']);
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 15 Messages

11 juil. 2014, 19:15

Bonsoir Elie,

Quand je fais

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

 
les commentaires continuent d'être enregistrés dans ma bdd, que la réponse soit bonne ou fausse. Merci de t'intéresser à mon problème.

Mammouth du PHP | 1339 Messages

11 juil. 2014, 19:33

Ne brulons pas les étapes ...
Là on cherche a savoir si la $_SESSION marche bien ...
As-tu vu le captcha d'écrit ?

Met des // devant tes header('location: pour éviter la redirection...
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 15 Messages

11 juil. 2014, 19:49

Non je ne vois pas de captcha d'écrit et même en mettant // devant mes header il me redirige vers l'article.

Mammouth du PHP | 1339 Messages

11 juil. 2014, 19:55

Désolé mais je ne peux rien faire pour toi alors.
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 15 Messages

11 juil. 2014, 19:56

Merci quand même Elie