[Réglé] Captcha sous PHP4

Ce forum aborde toutes les questions qu'un codeur ou webmaster pourrait se poser, et n'ayant aucun rapport direct avec phpBB.
Tout ce qui peut concerner la récupération des sessions de phpBB sur votre site, doit se faire dans cette section.

Modérateur: Equipe

Règles du forum
A lire impérativement : Règlement de phpBB-fr.com

[Réglé] Captcha sous PHP4

Messagepar Musimix.ca » 27 Oct 2008 à 19:56

Bonjour/Bonsoir,

Voilà la situation : je me suis trouvé un captcha dernièrement pour éliminer le span sur mon site et tout fonctionne très bien sur mon serveur WAMP5 hors ligne. Par contre, lorsque je passe à mon réel serveur en ligne, il y a un petit problème : le code de la captcha (celui qu'il faut entrer dans le formulaire) s'accumule au lieu de s'effacer totalement après la validation du formulaire ce qui fait que je me ramasse avec un code du genre à entrer malgré le fait que l'image nel'affiche pas en entier (et avec raison :!:) :

Code: Tout sélectionner
CIFFZF6SSZHU3DP76HYPZZGN31K99SJ1GL5BRJQLMW2DTMEKIRPL89OAUVMZVGKTDH1H7ORLH2Y

La résolution semble bien simple : "tuer" si on peut dire la série après validation du formulaire (mais je ne sais trop comment faire :shock:). Voici les fichiers rattachés à ce problème :

PS : Veuillez noter que le <?php echo $_SESSION['code']; ?> à la fin du formulaire me permet seulement de vérifier si la suite de caractères généré est exacte (donc temporaire).

Merci d'avance.
Modifié en dernier par Musimix.ca le 29 Oct 2008 à 17:19, modifié 1 fois.
L'équipe de
Musimix.ca
Avatar de l’utilisateur
Musimix.ca
Roi des posts
Roi des posts
 
Messages: 904
Enregistré le: 27 Juin 2006 à 21:58

Re: Captcha sous PHP4

Messagepar spitfire pat » 29 Oct 2008 à 11:34

ça vient du fait que, sur ton serveur en ligne, REGISTER_GLOBALS est à ON, ce qui fait que pour chaque clé de $_POST, $_GET et $_SESSION il est créé une une variable qui porte le même nom que la clé.
donc, dés le lancement de ta session, il est créé une variable $code ayant le même contenu que $_SESSION['code'].
donc pour corriger ça:
  • soit tu renommes ta variable de session (en $_SESSION['code_captcha'] par exemple)
  • soit tu vides $code en mettant dans captcha.php
    Code: Tout sélectionner
    $code='';
    après
    Code: Tout sélectionner
    //Boucle qui permet d'afficher 5 caractères
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15297
Enregistré le: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Captcha sous PHP4

Messagepar glouton » 29 Oct 2008 à 14:18

Salut,

la fonction deregister_globals() de fichier common.php de phpbb3 n'est pas censée, si j'en crois son nom, faire ce travail ?
glouton c'est wolverine en anglais.
C'est petit, tout rond et ça bouffe tout ! ;)
Web2Com | Ouverture Facile
glouton
Roi des posts
Roi des posts
 
Messages: 567
Enregistré le: 26 Sep 2008 à 00:41
Localisation: Youhou ! Je suis là. Pourquoi ne me voyez-vous pas ?

Re: Captcha sous PHP4

Messagepar Musimix.ca » 29 Oct 2008 à 14:43

Merci spitfire pat. Ça afonctionné.

Autre petite question : selon toi, lorsqu'un internaute tente d'envoyer un message et qu'il entre le bon code captcha mais qu'il se trompe dans son email, serait-il préférable lui faire entrer de nouveau le code en question (qui aura changé) ou encore lui remplir cette case avec le bon code pour qu'il ne fasse que changer l'adresse email ?

Alors voilà la requête : pourrais-tu me dire comment récupérer la valeur du captcha qui est affché PRÉSENTEMENT sur la page de navigation car si j'ajoute le code ci-dessous, il m'affiche le code précédent l'actualisation de la page (donc si je px me permettre de dire l'autre "session" ?!).

Merci d'avance.
L'équipe de
Musimix.ca
Avatar de l’utilisateur
Musimix.ca
Roi des posts
Roi des posts
 
Messages: 904
Enregistré le: 27 Juin 2006 à 21:58

Re: Captcha sous PHP4

Messagepar spitfire pat » 29 Oct 2008 à 15:27

si tu souhaites que l'utilisateur n'ait pas à retaper son code s'il était précédemment correct, alors on va créer une variable $found_captcha qui sera à true si le code est correct. dans le formulaire si cette variable existe, alors on met le champ de saisie en readonly et on envoie à captcha.php une variable $_GET contenant le code.
et enfin, dans la boucle de 5 caractères, si cette variable $_GET existe, alors on extrait le caractère correspondant au lieu de prendre un caractère aléatoire
dans contact.php ajoute après
Code: Tout sélectionner
	if (empty($captcha))
	{
		$erreur[] = "- La suite des 5 caractères";
		$captcha_txt = '<font color="#FF0000"><b>Retapez les<br />caractères : *</b></font>';
	}
	elseif ($_SESSION['code'] != $captcha)
	{
		$erreur[] = "- La bonne suite des 5 caractères";
		$captcha_txt = '<font color="#FF0000"><b>Retapez les<br />caractères : *';
	}
ces lignes
Code: Tout sélectionner
	else
	{
		$found_captcha = true;
	}

dans formulaire.php remplace
Code: Tout sélectionner
<input type="text" value="<?php echo $valeur; ?>" name="captcha"
par
Code: Tout sélectionner
<input type="text" value="<?php echo $captcha; ?>" <?php if(isset($found_captcha)) echo 'readonly="readonly"; ?> name="captcha"
et
Code: Tout sélectionner
<img src="captcha.php" width="175" height="50">
par
Code: Tout sélectionner
<img src="captcha.php"<?php if(isset($found_captcha)) echo "?captcha=$captcha"; ?>  width="175" height="50">


dans captcha.php, met au tout début
Code: Tout sélectionner
$captcha = (isset($_GET['captcha'])) ? $_GET['captcha'] : '';

et remplace
Code: Tout sélectionner
$v=mt_rand(0,34);
par
Code: Tout sélectionner
$v=($captcha == '') ? mt_rand(0,34) : substr($captcha, x, 1);


j'ai pas le temps de tester mais, sauf faute de frappe de ma part, ça devrait marcher (fait quand même une sauvegarde avant de faire les modifications)

PS glouton ces scripts ne tournent pas sous phpbb, c'est pour ça qu'il y a ces problèmes avec les variables globales

EDIT ah non, j'ai fait une bêtise pour la dernière modification, attend mon prochain post

EDIT: voilà, au lieu de remplacer
Code: Tout sélectionner
$v=mt_rand(0,34);
par
Code: Tout sélectionner
$v=($captcha == '') ? mt_rand(0,34) : substr($captcha, x, 1);

il faut remplacer
Code: Tout sélectionner
 //Caractère au hasard
 $v=mt_rand(0,34);
    
 //Le tout dans l'image
 imagettftext($image,$fontsize, mt_rand(0,25), $z, $y, $couleur, $font, $txt[$v]);
    
 //Le code
 $code.=$txt[$v];
par
Code: Tout sélectionner
//Caractère au hasard
$v=mt_rand(0,34);
$char = ($captcha == '') ? $txt[$v] : substr($captcha, $x, 1);
//Le tout dans l'image
imagettftext($image,$fontsize, mt_rand(0,25), $z, $y, $couleur, $font, $char);
    
//Le code
$code.=$char;
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15297
Enregistré le: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Captcha sous PHP4

Messagepar glouton » 29 Oct 2008 à 16:11

Je n'avais en effet pas lu avec attention mais toujours est-il que la fonction est utilisable, non ?

Enfin, c'était histoire de participer un peu quoi. :mrgreen:
glouton c'est wolverine en anglais.
C'est petit, tout rond et ça bouffe tout ! ;)
Web2Com | Ouverture Facile
glouton
Roi des posts
Roi des posts
 
Messages: 567
Enregistré le: 26 Sep 2008 à 00:41
Localisation: Youhou ! Je suis là. Pourquoi ne me voyez-vous pas ?

Re: Captcha sous PHP4

Messagepar Musimix.ca » 29 Oct 2008 à 17:01

Merci pour les infos.
Je vais l'essayer et vous revenir avec ça.

EDIT : Toue fonctionne à merveille. Merci encore.
L'équipe de
Musimix.ca
Avatar de l’utilisateur
Musimix.ca
Roi des posts
Roi des posts
 
Messages: 904
Enregistré le: 27 Juin 2006 à 21:58


Retourner vers Coding, Webmastering et Sécurité informatique

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités