Voilà j'ai codé une classe anti-spam facile à utiliser, et il y a plusieurs type de questions (génération de code, questions sur des nombres, questions sur les genres) et si aucun mode n'est définit il y aura un choix aléatoire dans toutes les questions.
Et vous pouvez aussi ajouter des questions à votre guise avec un système d'ajout simple qui est expliqué plus bas.
Voilà comment l'utiliser:
<?php
/* Insertion du fichier: */
include('class_captcha.php');
/* Déclaration de la classe: */
$captcha = new Captcha('', '1 ou 2 ou 3');
/*
1 ou 2 ou 3 correspond au type de captcha que vous désirez utiliser.
Légende:
1 => Questions sur les nombres
2 => Question sur les genres
3 => Gestion de code automatique
*/
/* Affichage du captcha: */
echo $captcha->self_Output_Html();
/* Vérification du captcha: */
$captcha->captcha = $_POST['Captcha'];
$captcha->verif = $_POST['Captcha_Verif'];
if($captcha->self_Verif() == 1)
{
// Code bon. Envoi du formualaire
}
else
{
// Code mauvais. Retour au formulaire
}
/* Pour rajouter des questions faites comme la suite: */
$array = array(
array('la question', 'la réponse'),
array(' la question', 'la réponse')
);
$captcha = new Captcha($array, '1');
/* A la place du 1 vous pouvez mettre 2. */
/* Mais vous mettez 3 vos questions ne seront plus prises en considérations */
?>
Attention:Placez bien le code
echo $captcha->self_Output_Html();
A l'endroit on vous souhaitez faire apparaitre l'anti-spam car cette fonction génére le code html associé.Et voici la classe complète:
<?php
/*----------------------------------------------------
@
@ Filename: Class_captcha.php
@
@ ----------------------------------------------------
@
@ Author: Djtec
@ Url author: http://djtec.ovh.org/
@ Create: 28/09/2008
@ Version: 1.2
@
@ License: http://creativecommons.org/licenses/by-nc-sa/2.5/deed.fr_CA
@
----------------------------------------------------*/
class Captcha
{
private $tab;
private $type_tab;
var $captcha;
var $verif;
/*
@ Constructeur de la classe
*/
public function __construct ($tab = array (), $type_tab)
{
// Questions réponses type = 1
$Type_Number = array(
array('Combien font 4+4 ?', 'huit'),
array('Combien font 2+2 ?', 'quatre'),
array('Combien font 5+5 ?', 'dix'),
array('Combien font 5-3 ?', 'deux'),
array('Combien font 5+3 ?', 'huit'),
array('Combien font 4+2 ?', 'six'),
array('Combien font 6+2 ?', 'huit'),
array('Combien font 1+5 ?', 'six'),
array('Combien font 9-1 ?', 'huit'),
array('Combien font 10-5 ?', 'cinq')
);
// Questions réponses type = 2
$Type_Letter = array(
array('Parmi ces mots, lequel n\'est pas un légume: tomate, courgette, voiture ?', 'voiture'),
array('Parmi ces mots, lequel n\'est pas un légume: épinard, haricot, avion ?', 'avion'),
array('Parmi ces mots, lequel n\'est pas un fruit: bannane, vélo, voiture ?', 'vélo'),
array('Parmi ces mots, lequel n\'est pas un fruit: fraise, tomate, framboise ?', 'tomate'),
array('Parmi ces mots, lequel n\'est pas un légume: tomate, fraise, courgette ?', 'fraise'),
array('Parmi ces mots, lequel n\'est pas un instrument de musique: guitare, courgette, piano ?', 'courgette'),
array('Parmi ces mots, lequel n\'est pas un moyen de transport: tomate, bus, voiture ?','tomate'),
array('Parmi ces mots, lequel n\'est pas un moyen de transport: tramway, courgette, trotinette ?', 'courgette'),
array('Parmi ces mots, lequel n\'est pas un instrument de musique: flute, batterie, voiture ?', 'voiture'),
array('Parmi ces mots, lequel n\'est pas un légume: bol, choux, tomate ?', 'bol')
);
// Variables de génération de code
$this->CodeSize = 8;
$this->CodeConsonnes = "bcdfghjklmnpqrstvwxz";
$this->CodeVoyelles = "aeiouy";
$this->CodeNumeros = "0123456789";
// Sélectionne le type de tableau selon le choix
if($type_tab == 1)
{
$sed_tab = $Type_Number;
}
elseif($type_tab == 2)
{
$sed_tab = $Type_Letter;
}
if($type_tab == 3)
{
$this->CodeSize = 8;
$this->CodeConsonnes = "bcdfghjklmnpqrstvwxz";
$this->CodeVoyelles = "aeiouy";
$this->CodeNumeros = "0123456789";
$c[0] = $this->CodeConsonnes;
$c[1] = $this->CodeVoyelles;
$c[2] = $this->CodeNumeros;
$c[3] = $this->CodeConsonnes;
$c[4] = $this->CodeVoyelles;
$c[5] = $this->CodeNumeros;
$c[6] = $this->CodeConsonnes;
$c[7] = $this->CodeNumeros;
$code = "";
for ($i = 0; $i < $this->CodeSize; $i++)
{
$code.=substr($c[$i],(rand()%(strlen($c[$i]))),1);
}
$this->_q = 'Veuillez recopier le code suivant: '.$code;
$this->_r = sha1($code);
}
else
{
// Vérifie si des donnés externes sont remplis
if (!empty ($tab))
{
$tab = array_merge($tab + $sed_tab);
$go = count($tab) -1;
$rand = rand(0, $go);
$this->_q = $tab[$rand][0];
$this->_r = sha1($tab[$rand][1]);
}
else
{
$go = count($sed_tab) -1;
$rand = rand(0, $go);
$this->_q = $tab[$rand][0];
$this->_r = sha1($tab[$rand][1]);
}
}
}
/*
@ Fonction de génération du code Html
*/
public function self_Output_Html()
{
$html = '<p>'.$this->_q.'</p>
<p><input type="text" size="25" name="Captcha" id="Captcha" />
<input type="hidden" name="Captcha_Verif" id="Captcha_Verif" value="'.$this->_r.'" /></p>';
return $html;
}
/*
@ Fonction de vérification
*/
public function self_Verif()
{
if(sha1($this->captcha) == $this->verif)
{
return 1; // Code valide
}
else
{
return 0; // Code non valide
}
}
}
?>
J'ai un sujet qui traite cette classe à cette adresse: http://djtec.ovh.org/contribution/?/pos ... i-spam_1.2Et vous pouvez aussi télécharger les archives:
Télécharger au format .rar
Télécharger au format .zip
Voilà ++