[PHP] Insertion d'un captcha
Résolu/Fermé
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
-
17 oct. 2009 à 19:35
digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 - 22 oct. 2009 à 17:59
digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 - 22 oct. 2009 à 17:59
A voir également:
- [PHP] Insertion d'un captcha
- Insertion liste déroulante excel - Guide
- Insertion sommaire word - Guide
- Insertion signature word - Guide
- Easy php - Télécharger - Divers Web & Internet
- Insertion filigrane word - Guide
22 réponses
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
21 oct. 2009 à 19:53
21 oct. 2009 à 19:53
Enlève l'include de ton image ;)
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
18 oct. 2009 à 20:06
18 oct. 2009 à 20:06
Accède directement à l'url de ton image dans ton navigateur.
En ajoutant une condition avant d'envoyer tes headers.
A vue de nez, je dirais que ça vient de imagestring().
En ajoutant une condition avant d'envoyer tes headers.
if( !headers_sent() ) { header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header("Content-type: image/jpeg"); }
A vue de nez, je dirais que ça vient de imagestring().
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
18 oct. 2009 à 20:30
18 oct. 2009 à 20:30
Salut,
Oui, c'est ça, ça permet de ne pas envoyer le content-type si une sortie texte a déjà été faites, donc pour visualiser l'erreur.
J'ai du faire un copié coller de ta ligne pour voir que tu avais mit un espace entre le . et le = de ta concaténation, il n'en faut pas.
Sinon, pour générer plus facilement ta chaine, tu peux utiliser str_shuffle() et substr() ;)
Oui, c'est ça, ça permet de ne pas envoyer le content-type si une sortie texte a déjà été faites, donc pour visualiser l'erreur.
J'ai du faire un copié coller de ta ligne pour voir que tu avais mit un espace entre le . et le = de ta concaténation, il n'en faut pas.
Sinon, pour générer plus facilement ta chaine, tu peux utiliser str_shuffle() et substr() ;)
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
19 oct. 2009 à 19:39
19 oct. 2009 à 19:39
Pour la notice, logique, tu n'as que 35 caractères dans ta chaine, donc 0,34.
Pour la seconde, GD n'est pas installé ou activé sur ton serveur, tout du moins je ne vois que ça.
Pour la seconde, GD n'est pas installé ou activé sur ton serveur, tout du moins je ne vois que ça.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
20 oct. 2009 à 21:46
20 oct. 2009 à 21:46
Tu as mis du html dans ton code.
Comme je te l'ai indiqué précédemment, tu ne dois n'envoyer rien d'autres que ton image, donc tu ne gardes que ce qu'il y a entre <?php et ?> et tu vires le reste.
Et déplace les headers en les plaçant juste avant le imagejpeg.
Comme je te l'ai indiqué précédemment, tu ne dois n'envoyer rien d'autres que ton image, donc tu ne gardes que ce qu'il y a entre <?php et ?> et tu vires le reste.
Et déplace les headers en les plaçant juste avant le imagejpeg.
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
18 oct. 2009 à 19:54
18 oct. 2009 à 19:54
-ceci est un back up -
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
18 oct. 2009 à 20:14
18 oct. 2009 à 20:14
Salut P@t@ch0n
Tout d'abord, merci de ta réponse, mais excuse-moi je n'ai pas du bien comprendre car c'est toujours faux...
-> Ton code, je le met bien à la place de :
// FILTRE du CACHE des navigateurs :
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
P.S: Mon localhost m'indique une 'parse error' dans la page de création de mon captcha à dans ' {$code. = $liste [rand (0,36)];} ' .
Tout d'abord, merci de ta réponse, mais excuse-moi je n'ai pas du bien comprendre car c'est toujours faux...
-> Ton code, je le met bien à la place de :
// FILTRE du CACHE des navigateurs :
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
P.S: Mon localhost m'indique une 'parse error' dans la page de création de mon captcha à dans ' {$code. = $liste [rand (0,36)];} ' .
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
19 oct. 2009 à 19:18
19 oct. 2009 à 19:18
Cool, y'a plus l'erreur...
Mais maintenant c'est ça qui s'affiche :
Notice: Uninitialized string offset: 35 in ... (désignant toujours {$code.= $liste [rand (0,36)];} )
Fatal error: Call to undefined function imageCreate() in...(désignant : $img = imageCreate(70, 20) or die ('...'); )
? ! ? !
Mais maintenant c'est ça qui s'affiche :
Notice: Uninitialized string offset: 35 in ... (désignant toujours {$code.= $liste [rand (0,36)];} )
Fatal error: Call to undefined function imageCreate() in...(désignant : $img = imageCreate(70, 20) or die ('...'); )
? ! ? !
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
19 oct. 2009 à 20:25
19 oct. 2009 à 20:25
Mais alors comment faire pour réaliser une bonne notice ? (Celle-ci est tirée du tuto sans avoir été changée)
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
19 oct. 2009 à 20:57
19 oct. 2009 à 20:57
Je n'ai pas compris ce que tu dis.
Réaliser une notice de quoi ?
Réaliser une notice de quoi ?
graffx
Messages postés
6506
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
24 mars 2019
1 975
19 oct. 2009 à 21:02
19 oct. 2009 à 21:02
Les captcha sont bien sympas mais tres dur a mettre en place pour les debutants.
Je peux te conseiller une alternative simple.
Créer une question sur une image, une question ne comportement pas de mot universel.
Par exemple:
Quel est le chef de l' etat de notre pays?
et non pas:
Quel est le president de la france?
En effet, president est utilisé dans beaucoup de langue et donc compréhensible, et "france", forcement aussi.
Non seulement tu eviteras aussi bien les bots (puisque ca sera une image) mais aussi les etrangers venus spammer ton forum de lien moisis.
C' est une methode facile, juste au cas ou.
Je peux te conseiller une alternative simple.
Créer une question sur une image, une question ne comportement pas de mot universel.
Par exemple:
Quel est le chef de l' etat de notre pays?
et non pas:
Quel est le president de la france?
En effet, president est utilisé dans beaucoup de langue et donc compréhensible, et "france", forcement aussi.
Non seulement tu eviteras aussi bien les bots (puisque ca sera une image) mais aussi les etrangers venus spammer ton forum de lien moisis.
C' est une methode facile, juste au cas ou.
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
20 oct. 2009 à 12:47
20 oct. 2009 à 12:47
merci de ton conseil, j'y penserai si vraiment je galère...
Mais je sens que je suis proche du but : les erreurs ont toutes disparues ! =)
Il ne manque plus qu'à savoir pourquoi, sur mon localhost, lorsque je vais sur la page de mon captcha ou de mon formulaire, ce n'est pas la page ni une erreur qui s'affiche, mais ' http://localhost/Mon%20site/Monsite/w.captcha.php ' ?!
P.S: J'ai actualisé mes pages du formulaires et du captcha sur mon client ftp, et voici ce qui s'affiche lorsque je vais sur la page du formulaire maintenant ! :
'ÿØÿà�JFIF������ÿþ�;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 30 ÿÛ�C� [...] (B+(%%(Q:=0B`Ued_U][jx™jqs[]…µ†ž£««g€¼Éº¦Ç™¨«¤ÿÛ�C(#(N++N¤n]n¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ÿÀ���Q@ÿÙ '
(ça s'affiche comme une erreur, en haut de la page...)
Mais je sens que je suis proche du but : les erreurs ont toutes disparues ! =)
Il ne manque plus qu'à savoir pourquoi, sur mon localhost, lorsque je vais sur la page de mon captcha ou de mon formulaire, ce n'est pas la page ni une erreur qui s'affiche, mais ' http://localhost/Mon%20site/Monsite/w.captcha.php ' ?!
P.S: J'ai actualisé mes pages du formulaires et du captcha sur mon client ftp, et voici ce qui s'affiche lorsque je vais sur la page du formulaire maintenant ! :
'ÿØÿà�JFIF������ÿþ�;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 30 ÿÛ�C� [...] (B+(%%(Q:=0B`Ued_U][jx™jqs[]…µ†ž£««g€¼Éº¦Ç™¨«¤ÿÛ�C(#(N++N¤n]n¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ÿÀ���Q@ÿÙ '
(ça s'affiche comme une erreur, en haut de la page...)
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
20 oct. 2009 à 19:34
20 oct. 2009 à 19:34
C'est parce que tu dois faire un echo de ton image au lieu de mettre l'url dans l'attribut src de img.
Comme ta sortie dans ta page de ton formulaire n'est pas en jpeg mais en html, il est normal d'obtenir ceci.
Comme ta sortie dans ta page de ton formulaire n'est pas en jpeg mais en html, il est normal d'obtenir ceci.
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
20 oct. 2009 à 20:37
20 oct. 2009 à 20:37
pourtant, dans le tuto, il est écrit qu'il est justement possible de faire cela ?!
Mais je n'ai pas compris ce que tu dis de faire :
j'ai essayé avec
<?php echo '$img' ?> (alors même résultat qu'avant et y'a afficher "$img" au lieu du "alt=" de "<img.../>")
<?php echo 'w.captcha.php' ?> (alors même résultat qu'avant)
<?php include('w.captcha.php') ?> (toujours comme avant mais ce script d'image est réaffiché au lieu du "alt=")
toujours à la place de <img src="w.captcha.php" alt="captcha" />
aucune de ces solutions n'est bonne =\
Mais je n'ai pas compris ce que tu dis de faire :
j'ai essayé avec
<?php echo '$img' ?> (alors même résultat qu'avant et y'a afficher "$img" au lieu du "alt=" de "<img.../>")
<?php echo 'w.captcha.php' ?> (alors même résultat qu'avant)
<?php include('w.captcha.php') ?> (toujours comme avant mais ce script d'image est réaffiché au lieu du "alt=")
toujours à la place de <img src="w.captcha.php" alt="captcha" />
aucune de ces solutions n'est bonne =\
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
20 oct. 2009 à 20:53
20 oct. 2009 à 20:53
Dans quel tuto ?
Non, ce n'est pas possible, soit tu envois du html, soit tu envois une image, les deux en même temps n'a pas de sens.Comme on dit, on ne mélange pas les torchons et les serviettes.
La bonne solution est donc bien.
Si tu n'obtiens toujours pas ton image, c'est que tu as toujours des erreurs dans celle-ci.
Donc même méthode que précédemment pour débuguer, accéde directement à l'image dans ton navigateur.
Non, ce n'est pas possible, soit tu envois du html, soit tu envois une image, les deux en même temps n'a pas de sens.Comme on dit, on ne mélange pas les torchons et les serviettes.
La bonne solution est donc bien.
<img src="w.captcha.php" alt="captcha" />
Si tu n'obtiens toujours pas ton image, c'est que tu as toujours des erreurs dans celle-ci.
Donc même méthode que précédemment pour débuguer, accéde directement à l'image dans ton navigateur.
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
20 oct. 2009 à 21:14
20 oct. 2009 à 21:14
"C'est parce que tu dois faire un echo de ton image au lieu de mettre l'url dans l'attribut src de img "
-> Où et Comment utiliser l'echo ?
" La bonne solution est donc bien. <img src="w.captcha.php" alt="captcha" /> "
-> C'est ce que j'avais fait =)
"Dans quel tuto ?"
-> Je ne le retrouve plus ! =\ (voir 1er post)
Donc comment afficher le captcha ?
P.S: Lorsque je vais directement sur la page de réalisation du captcha, les symboles du script de mon image s'affichent sur une page blanche.
-> Où et Comment utiliser l'echo ?
" La bonne solution est donc bien. <img src="w.captcha.php" alt="captcha" /> "
-> C'est ce que j'avais fait =)
"Dans quel tuto ?"
-> Je ne le retrouve plus ! =\ (voir 1er post)
Donc comment afficher le captcha ?
P.S: Lorsque je vais directement sur la page de réalisation du captcha, les symboles du script de mon image s'affichent sur une page blanche.
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
20 oct. 2009 à 21:21
20 oct. 2009 à 21:21
Hum, en effet ma phrase était ambigüe, quand je disais « tu dois faire », cela était dans le sens « tu as du faire ».
Il ne faut pas faire d'echo de l'image, mais bien mettre l'url de celle-ci dans la balise img.
Tu peux remontrer ton code de l'image ?
Il ne faut pas faire d'echo de l'image, mais bien mettre l'url de celle-ci dans la balise img.
Tu peux remontrer ton code de l'image ?
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
20 oct. 2009 à 21:26
20 oct. 2009 à 21:26
ah ok ! il y avait un malentendu =)
Voici mon script:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<body>
<?php
// CREATION & MEMORISATION du CAPTCHA :
$liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$code = '';
while (strlen($code) != 6)
{$code.= $liste [rand (0,34)];}
$_SESSION['code'] = $code;
// CREATION de l'IMAGE :
$img = imageCreate(70, 20) or die ("Une erreur s'est produite lors de la création de l'image. Recommence");
$background_color = imagecolorallocate ($img, 238, 238, 238);
$ecriture_color = imagecolorallocate ($img, 0, 0, 0);
$code_police = 5;
// FILTRE du CACHE des navigateurs :
if( !headers_sent() )
{
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
}
// INSERTION du CAPTCHA dans l'IMAGE :
imageString($img, $code_police,(70-imageFontWidth($code_police) * strlen(''.$code.''))/2,0, $code,$ecriture_color);
imagejpeg($img,'',30); // qualité
// LIBÉRATION de la MÉMOIRE :
imageDestroy($img);
?>
</body>
Voici mon script:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<body>
<?php
// CREATION & MEMORISATION du CAPTCHA :
$liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$code = '';
while (strlen($code) != 6)
{$code.= $liste [rand (0,34)];}
$_SESSION['code'] = $code;
// CREATION de l'IMAGE :
$img = imageCreate(70, 20) or die ("Une erreur s'est produite lors de la création de l'image. Recommence");
$background_color = imagecolorallocate ($img, 238, 238, 238);
$ecriture_color = imagecolorallocate ($img, 0, 0, 0);
$code_police = 5;
// FILTRE du CACHE des navigateurs :
if( !headers_sent() )
{
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
}
// INSERTION du CAPTCHA dans l'IMAGE :
imageString($img, $code_police,(70-imageFontWidth($code_police) * strlen(''.$code.''))/2,0, $code,$ecriture_color);
imagejpeg($img,'',30); // qualité
// LIBÉRATION de la MÉMOIRE :
imageDestroy($img);
?>
</body>
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
21 oct. 2009 à 19:03
21 oct. 2009 à 19:03
Cool, ça marche ! =)
Seulement j'ai toujours les symboles du script de l'image en haut de la page du formulaire...
Seulement j'ai toujours les symboles du script de l'image en haut de la page du formulaire...
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
21 oct. 2009 à 19:13
21 oct. 2009 à 19:13
Montre le code de la page du formulaire.