Intégrer un captcha dans un formulaire php

Résolu
bg62 Messages postés 23732 Date d'inscription   Statut Modérateur Dernière intervention   -  
 vegamax -
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
A voir également:

21 réponses

PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
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