Intégrer un captcha dans un formulaire php

Résolu/Fermé
bg62 Messages postés 23594 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 1 mai 2024 - 27 sept. 2007 à 16:18
 vegamax - 14 juin 2010 à 11:18
Bonjour,
mon formulaire est terminé, bien comme je le voulais ....
( ajouter une info dans formulaire php#0 )
et maintenant j'aimerais intégrer une vérification avec un " captcha " mais je ne sais pas quelle commande insérer, ni où la mettre !!!
celui que j'ai trouvé est simple et sympa : question sur la place d'une lettre d'un mot généré au hasard (pas d'images) dont voici le code:
<?php

class capcha{

	var $min;
	var $max;
	var $alphabet;
	var $word;
	var $num;
	var $numletter;

	function capcha(){
		$this->min = 4;
		$this->max = 6;
		$this->alphabet = 'abcdefghijklmnopqrstuvwxyz';
		$this->grain_de_sel = '6tIb90ZAS11';
		$this->word = $this->createWord();
		$this->num = $this->chooseNum();
		$this->numletter = $this->num2letter();
	}
	
	function q(){
		return 'Quelle est la '.$this->numletter.' lettre du mot '.$this->word.' ?';
	}

	function createWord(){

		$len = rand($this->min,$this->max);
		for($i=0;$i<$len;$i++){
			$word[$i] = $this->alphabet[rand(0,strlen($this->alphabet)-1)];
		}
		return implode('',$word);
	}

	function chooseNum(){
		return rand(1,strlen($this->word));
	}

	function num2letter(){
		if($this->num == strlen($this->word)){
			return 'dernière';
		}
		$array = array('1' => 'première','2' => 'deuxième','3' => 'troisième','4' => 'quatrième','5' => 'cinquième','6' => 'sizième','7' => 'septième','8' => 'huitième','9' => 'neuvième','10' => 'dixième');
		if(isset($array[$this->num])){
			return $array[$this->num];
		}else{
			return $this->num.'.ème';
		}	
	}

	function r(){
		return md5($this->grain_de_sel.$this->word[$this->num-1]);
	}
}

?>

alors, encore une fois merci à l'avance pour toute aide que vous pourrez me donner
@mitiés
b g

21 réponses

PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
28 sept. 2007 à 18:16
Bsr,

Ben je sais pas tout tu vois car j'ignorais ce qu'était un captcha : on fait j'ignorais que les systèmes de sécurité à base de séquence tirée au hasard portaient ce nom ... lol

J'ai pas été voir si ta classe captcha fonctionne car le problème n'est pas là.


Le problème c'est de vérifier que l'utilisateur à bien entré la bonne lettre : donc PHP doit en quelque sorte s'en souvenir d'un page à l'autre.

Voilà ce qui se passe
1 : l'utilisateur appelle ta page qui génère un nouveau captcha en php sur le serveur web à partir de ta classe captcha
2 : la page est retournée à l'utilisateur avec le captcha et s'affiche sur son navigateur : c'est ton formulaire en HTML
3 : l'utilisateur valide ce qui envoie les données vers une autre page ou la même peu importe au serveur PHP avec une des lettres du captcha saisie par l'utilisateur
4 : PHP doit vérifier que la lettre saisie correspond bien à celle du captcha précédemment généré ... pour cet utilisateur et pas un autre !!
Oui mais comment ?
En effet ne perd pas de vue que plusieurs utilisateurs peuvent accèder en même temps à ton formulaire, chacun avec un captcha différent naturellement.
Je te rappelle aussi qu'une fois la page web générée par le moteur PHP sur le serveur WEB, puis envoyée au client, toutes les variables PHP sont effaçées : il ne reste aucune trace ...
Il faut donc trouver un moyen de ne pas perdre l'environnement entre 2 appels à 2 pages PHP (ce peut être la même page) tout en identifiant de façon unique l'utilisateur.
Pour ce faire tu peux soit utiliser MySQL pour stocker les variables que tu ne veux pas perdre et attribuer un identifiant unique à chaque utilisateur, soit utiliser les sessions : c'est la solution la plus simple !

D'où ma question sais-tu utiliser/as-tu déjà utilisé les sessions en PHP ?

-1