UN CAPTCHA, AVEC GD, SUPER SIMPLE, POUR LES NOOB'S :)

Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 30 sept. 2008 à 16:07
nax333 Messages postés 3 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 4 mai 2009 - 24 avril 2009 à 11:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48090-un-captcha-avec-gd-super-simple-pour-les-noob-s

nax333 Messages postés 3 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 4 mai 2009
24 avril 2009 à 11:17
J'ai un code pas plus compliqué mais un bien meilleur résultat :
http://www.phpcs.com/codes/CAPTCHA-ANTI-BOT-FICHIER-SON-WAV_47544.aspx

Bien entendu il est pas parfait, mais il est quand même bien plus resistant que le tien.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
9 oct. 2008 à 19:08
un OCR est un type d'algo qui permet de lire les caracteres sur une image.
cf : http://fr.wikipedia.org/wiki/OCR

(ouais moi non plus je ne lis pas ce qu'il y a plus haut avant de poster...)
cs_Kendo Messages postés 2 Date d'inscription samedi 12 octobre 2002 Statut Membre Dernière intervention 9 octobre 2008
9 oct. 2008 à 10:28
Un OCR est un logiciel de reconnaissance optique de caractères. Voir :
http://fr.wikipedia.org/wiki/OCR
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
8 oct. 2008 à 17:30
OCR ou optical character recognition ou reconnaissance optique de caractères en français dans le texte... il sagit d'algo introduit dans les bots pour que ces dernier puissent lire du texte sur des images... pour plus d'infos...

http://fr.wikipedia.org/wiki/OCR

Sinon si tu veux une captcha avec les explications du code tu as celle que j'ai laissé en lien...

http://www.phpcs.com/codes/CAPTCHA-VISUELLE_42607.aspx

@ tchaOo°
cs_baloc Messages postés 56 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 29 octobre 2010
7 oct. 2008 à 11:37
le jour où le débutant le lira est arrivé...


je suis désolé mais je ne comprends pas ton code. Il y a deux choses qui me choque en faite
la première, c'est que si un code est adressé à des débutants, un minimum de commentaire est recquis. J'en ai pas vu.
la deuxième c'est que tout reste à la même ligne.
celui de Yoman64 est plus clair, on repère rapidement les blocs d'instruction.
et si quelqu'un pouvait m'exliquer ce qu'est un ORC s'il vous plait. Merci
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 oct. 2008 à 08:36
un jours un debutant lira ca et dira :

ce code m'a permi d'apprendre a faire du html sale
ce code m'a permi de ne plus etre spamme par les robots minables, mais je suis toujours floode par les gens qui me detestent (bon ok, 70% des captchas sont dans ce cas, mais c'est pas une raison pour faire pire que les autres...)

ce code m'a permi d'apprendre a ne pas indenter mes sources, comme ca elles ne sont pas lisibles par les mechants. (en plus, ca m'apprend a faire du python)

bon, sans rire :
-t'indentes mal
-ta gestion des erreurs est foireuse (meme pour un debutant)
-j'aime les chips
-ton html est mauvais

Bref, un type a poste un tuto pour faire un captcha sur le sdz, si tu t'arretes a la premiere partie, ca ne sert a rien de partager ton captcha, parce-que c'est un captcha faible...
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
3 oct. 2008 à 17:50
Moi j'adore les débutants qui postent des codes pour les débutants et qui refusent les critiques constructive... .. .

Pour en revenir au code moi ce que je n'aime pas avant tout c'est que tu ne sépare pas ton captcha du reste... tu dois séparer l'affichage du traitement surtout pour un captcha... si un débutant copie colle ton script dans une de ses pages ton code ne marchera pas car le code de l'image sera pollué par le code du reste de la page... d'ailleurs avec ton echo $msg; à la fin je suis surpris que l'image s'affiche... .. .

Pour finir... ce n'est pas parce que quelqu'un est débutant que d'une part il est complètement demeuré et que d'autre part ses attente sont aussi basique... ton code aurait été interessant pour un débutant si tu l'avais intégré à un tuto sur les bases de l'utilisation de la lib GD avec création d'une petite captcha comme exemple/TP... tel quel je ne pense pas qu'il soit très utile dans le sens ou un débutant ne codera pas une captcha lui même, et ne reprendra donc pas ton code, mais utilisera un code déja fait et pour cela ta captcha est trop simpliste... .. .

En parallèle comme dit précédemment un OCR cassera facilement ta captcha et comme la plupart des boot en intègrent un, ta captcha ne protègera réellement que des sites qui ne seront pas la cible de boot et donc qui n'ont pas besoin de captcha... pour parer à cela varie la taille, l'espacement de tes caractères et crée des zones parasites sur le fond de ton image comme par exemple des lignes... .. .

Si ça peut t'inspirer...

http://www.phpcs.com/codes/CAPTCHA-VISUELLE_42607.aspx

Bonne continuation à toi... .. .

@ tchaOo°
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
2 oct. 2008 à 09:19
@Dededede4 : Tu vois comme c'est chian de lire ma phrase (je l'avoue, j'ai aussi eu du mal à me relire :p), imagine comme ca l'est quand tu indente pas ton code ?

Ce que j'essaye de te dire par là, c'est que ce n'est pas en utilisant la raison du débutant que l'on peux se permettre tout et n'importe quoi. Au contraire ! Le fait que c'est des débutants, il vaut mieux les entrainer à faire un bon code, propre et indenté, afin qu'ils apprennent les bonnes manières dès le début.

@Teclis01 : j'ai aussi eu du mal après l'avoir éclatée, à me relire :p
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
2 oct. 2008 à 09:15
@codefalse
Lire ta chaine de caractère représentant une phrase éclatée m'a vraiment perturbé en arrivant au travail (avant le café ^^) t'es fou!!! Sur le coup j'me dis oulala je comprend rien de rien ce matin >_<

@dededede4
On te demande pas de partir, juste d'améliorer :)
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
2 oct. 2008 à 07:13
Ce n'est pas méchant, juste une remarque "pertinante" !

a++
dededede4 Messages postés 235 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 11 septembre 2009
1 oct. 2008 à 22:28
Bon,
se faire prendre comme ça...

Je vais voir ailleurs =)

A+
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
1 oct. 2008 à 22:25
tach angéquo idan ston co de?yato ujou rsp asdi dent a tion!c est tou jourspl usf acil e delir euncod e inden téc omm eunt e xteb ien esp acé!
dededede4 Messages postés 235 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 11 septembre 2009
1 oct. 2008 à 22:22
Voila, vous le trouver comment ?
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
1 oct. 2008 à 17:21
@Yoman64 : Bah ché pas, je comprenais pas trop justement :p Il aurait pu, mai du coup il aurait du expliquer parce que j'aurai pas compris pourquoi :p
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
1 oct. 2008 à 17:08
@dededede4:

Hum je vois vraiment pas pourquoi un switch serait plus compliqué pour un débutant qu'un if/then/else.
Honnêtement, dès que tu pige ce que fait le switch tu peux pas vraiment ne pas comprendre...

De toute façon, les points à retenir de mon code n'est pas switch vs if, mais code indenté et propre vs pas indenté, laid, plein de mauvaises habitudes et bourré de fautes d'orthographe.

= vs == fond la même chose dans ton cas, oui et alors ? En programmation le typage est la chose la plus basique et la plus essentielle.

Je vois que tu es débutant, tu ne l'as peut être pas encore appris, mais si des personnes plus expérimentées que toi tel que Codefalse, Teclis01 ou encore moi même te dise que quelques chose est mal fait ou mauvais, faudrait peut être remettre en doute tes connaissances aux lieu de dire qu'on a tord...

@Teclis01:
C'est vrai pour la coloraison, j'avais pas pensé ;-). Toutefois pour la vitesse, moi je dis que c'est à bencher :P

@Codefalse:
Ben voyons, ça ne va pas aujourd'hui ? T'as vraiment cru que Teclis en avait contre toi :P
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
1 oct. 2008 à 16:39
arf :p
J'espère juste qu'il va améliorer son code car sinon je serai contraint de le supprimer.
La version actuelle incite les développeurs débutant à prendre de mauvaise habitudes, c'est donc pas conseillé.
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
1 oct. 2008 à 16:08
@codefalse
non non, Je deconnais codefalse >_< c'etait l'attitude de dire non a plein de choses de dededede4 qui me titillais mais il va en s'améliorant... En espérant voir une suite favorable.
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
1 oct. 2008 à 16:04
@Teclis01 : Qu'est-ce que j'ai dit ou fait qui te titille ?
dededede4 Messages postés 235 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 11 septembre 2009
1 oct. 2008 à 15:36
J'ai un correcteur XD

Je sais que il y a plein de captcha, j'en rajoute un :)
De plus tu m'a aider !Si je ne t'avais pas parler, j'utiliserais encore au lieu de ;p
Il y aurais pas non plus de else a la fin de mon code :)

On n'a jamais encore jamais fait quelque chose de parfait,

fait le. ;)

Bonne continuation.
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
1 oct. 2008 à 15:26
@dededede4
La prochaine fois déjà, commences par utiliser un correcteur d'orthographe
Tu sais les gens qui files des sources ne sont pas intouchables même les meilleurs!
Depuis que je suis ici je vois des gens qui posent encore des formulaires pour enregistrer un contact genre carnet d'adresse et qui ont l'impression d'inventer le code sans écrire ne serait ce qu'une ligne dite en PHP5. Je crois que je suis ici pour aider mais aussi pour donner de mon expérience et pour fournir du code réutilisable (facilement) et utile. C'est pour cette raison que je ne pose aucune source depuis un moment car je cherches une certaine perfection et je ne l'atteint pas. Mais un jour qui sait :)

@codefalse
Toi évidement :p
dededede4 Messages postés 235 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 11 septembre 2009
1 oct. 2008 à 15:17
J'ai 15 zans ;p

codeflase, je panse que au niveau compatibilité, j'utilise des fonction qui sont sur toutes les versions de php,
sauf celle qui on pas GD :/.
@teclis01
2. La prochaine foix, je mais rien.
3. J'avais appris ça comme ça, prochaine foix aussi.
4. On s'en fou.
5. Quand j'ai appris le php, les code de cs m'on vraiment pas aider. =D
Presque chaque ligne est expliquée, et il ne fait pas "peur" au noobs,
A vous, peux être.
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
1 oct. 2008 à 15:15
@Teclis01 : Quelle genre d'attitude ? la mienne ou celle de Dededede4 ? :p
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
1 oct. 2008 à 14:13
1. ok sorry ^^
2. Pas tout a fait un default car le default ne doit pas (je pense) être utilisé ainsi afin de facilité la relecture du code.
3. c'est plus rapide je pense et surtout on obtient la coloration syntaxique du langage (ici le html)

@dededede4
1.
Si je passe ici : if ( $adresse == "" )
j'ai rien dans $msg ( a vu de nez) donc variable a null mais tu fais un echo dessus (problème d algo)
2.
Code toujours pas indenté
3.
L'intérêt du type existe dès que tu travailles en entreprise (qui se veut faire du code propre)... Tu comprendras l'utilité de vérifier la valeur mais aussi le type (avec === et !==) avec les objets...
4.
ça fonctionne qu'avec les PNG ...
5.
Je continue de critiquer ou tu calmes tes ardeurs? on essaye de te donner des conseils utiles. Si tu veux aucune remarque tu postes pas de code et surtout... surtout... ne "vends" pas ton code comme un code pédagogique.

@codefalse
Désolé mais ce genre d'attitude me titille... :/
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
1 oct. 2008 à 13:58
les switchs, les isset, les ===, biensûr, ca aboutit au même résultat.

C'est juste une question de bon sens.

On peux aussi dire au débutants de coder en utilisant <?= $var; ?> tant qu'à faire.

Ca s'appelle juste la compatibilité ...
dededede4 Messages postés 235 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 11 septembre 2009
1 oct. 2008 à 13:45
Petite correction sur mon dernier commentaire :

Si les commentaire vous aimer, vous lisez pas.
Si les commentaires vous aimer pas, vous lisez pas.

On peux pas éditer ;(
dededede4 Messages postés 235 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 11 septembre 2009
1 oct. 2008 à 13:43
Ecoute, if / elseif / else c'est mille foix plus claire qu'un switch, pour un débutent.

Pour des confirmée, je dit pas....

Si les commentaire vous aimer, vous lisez pas.

isset c'est l'équivalent de if( $varible == "" ) // Même résulta a l'écran, et peux être même plus rapide, et sourtout plus clair.
Rajouter au lieu de > Aucun intéré u_u // Si le mec tape "2" au lieu de 2, il aura la page 2, c'est tout.
Sa peux même corriger des erreur de codage, si on rajoute des "" pour rien.

L'example de yoman est pas mal du tout,
mais pas envis de le vérifier, le corriger, puis le remplacer :p

Bref, il y a un truc pas mal sur se code, on a qu'a le copier coller sur un index pour le faire marcher ;p

J'ai corriger la petite faille sur le pg=verifie,
et rajouter le else.

A+
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
1 oct. 2008 à 10:03
1. Je sais à quoi sert exit, c'est que lui avait mis le echo $msg à la fin, au moment d'écrire le exit je n'avais pas encore déplacé le echo.

2. Ouais on devrait remplacer case '' par un default.
3. Pourquoi ne pas afficher le form via un echo ? D'après toi c'est plus rapide d'ouvrir/fermer les balises php que de passer par un echo ?

De plus l'utilisation d'un default revient à ce que je fais, si le $_GET est pas setté, on le set pour pas que PHP affiche une notice.

En fait dans un vrai projet la conception de l'auteur de mettre le captcha et le formulaire dans le même script est simplement non viable, donc un tel débat/dilemme n'a pas lieu d'être :P.
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
1 oct. 2008 à 09:56
Cen'estpasparcequ'undébutantdécouvrelephpqu'onpeuxsepermettredefaireunco
dedemauvaisequalitéensedisantquecasuffitlargementpourundébutant...

c'estchiantdepasespacersoncodehein?
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
1 oct. 2008 à 08:57
Sans hésiter plus clair.
exit; ... ?
1/exit sert à "tuer" l'exécution d'un script or on a pas besoin.
2/et le default du swith hum ? ^^
j'aimerais taper en url index.php?pg=Teclis01estUnDieuMaisLeDitesPas
3/on initialise pas un GET! pour le traiter après !!!
isset($_GET['pg']) or $_GET['pg'] = '';

if(isset($_GET['pg']){
//je traite
}
else{
//j'affiche le form et pas via un echo :p
}
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
1 oct. 2008 à 08:51
Afin de te donner un coup de main, j'ai réorganisé ton code pour le rendre plus clair:

<?php
session_start();
isset($_GET['pg']) or $_GET['pg'] = '';

switch($_GET['pg']) {
case '':
echo '
Tape le code :
<form method="post" action="index.php?pg=verifie">

</form>';
break;

case 'verifie':
if ( isset($_POST['code']) && $_SESSION['chaine'] === $_POST['code'] ) {
$msg = 'Bon';
} else {
$msg = 'Pas bon';
}
echo $msg;
unset($_SESSION['chaine']);
break;

case 'image':
header ('Content-type: image/png');
$chaine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789';
$chaine = str_shuffle($chaine);
$_SESSION['chaine'] = substr($chaine, 0, 5);
$image = imagecreate(42,15);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 4, 1, 0, $chaine, $blanc);
imagepng($image);
exit;
break;
}
?>

À mon avis, le code que je viens de faire est beaucoup plus clair, simple et utile pour un débutant que ton code. Si je me trompe n'hésitez pas à me contredire ;)
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
1 oct. 2008 à 08:41
Salut,

Aussi après avoir vérifié si l'image était valide ou pas tu dois détruire la variable de session, sinon ton captcha sert à rien, une fois qu'on a le bon code stocké en session on peut très bien flooder puisque le code ne changera pas tant qu'on ne réaffiche pas l'image...

Et teclis a bien raison, ton code manque cruellement d'indentation. On s'en fiche qu'il soit simple, si il n'est pas facile à lire ça ne sert à rien.

Dernière chose ton captcha se casse en quelques secondes avec un OCR, il faudrait ajouté quelques difficultés !

Bonne continuation
a++
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
30 sept. 2008 à 19:47
désolé pour le double post, il était involontaire !

Petite remarque :

Tu peus remplacer AND par && et OR par ||

Tu peus aussi remplacer par dans certain cas (c'est plus strict, ça prend en compte le type de la variable(par exemple "2" est diférent de 2))

a++
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
30 sept. 2008 à 19:43
C'est pas une question de fonctions mais une question de lisibilité !

a++
danieljackson11 Messages postés 4 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 30 septembre 2008
30 sept. 2008 à 18:50
Il s'écrit un code pour lui même xD.
dededede4 Messages postés 235 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 11 septembre 2009
30 sept. 2008 à 17:09
Heu...

Fin, si y'a une fonction que l'on connais pas, y'a qu'a regarder à droite de la ligne...
Pour les noob ;p

Tu n'a même pas besoin de lire...
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
30 sept. 2008 à 16:07
indente
ton
code
sinon
(
car il faut le dire
)
c'
est
chiant
Rejoignez-nous