Création d'une image pour valider un formulaire

Création d'une image pour valider un formulaire - PHP - Programmation

Marsh Posté le 24-08-2007 à 16:39:06    

Bonjour,
 
Je cherche à créer une image en php pour vérifier que l'utilisateur est bien "humain". Pour cela, je crée une image en jpeg avec 5 caractères aléatoires que j'envoie ensuite sur mon formulaire. Je vérifie ensuite la saisie de l'utilisateur et compare.  
 
Enfin pour l'instant je compare pas grand chose, car voici mon problème. Pour afficher l'image générée dynamiquement, j'utilise une balise IMG avec comme SRC le fichier php qui contient mon script. Seulement, de ce fait, je n'arrive pas à récupérer la valeur du texte que je génère :/
 
Quelqu'un aurait il une idée pour contourner ce problème ?  
 
Merci par avance...
 
Au cas ou, voici mon script qui génère l'image :  
 

Code :
  1. <?
  2. $fond = @imagecreatefromjpeg("pic1.jpg" ) or die("Erreur de création de l'image" );
  3. $largeur = 120;
  4. $hauteur = 60;
  5. $image = ImageCreate($largeur, $hauteur);
  6. ImageCopy($image, $fond, 0, 0, 0, 0, $largeur, $hauteur);
  7. ImageDestroy($fond);
  8. $tab=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');
  9. $texte="";
  10. for($i=0;$i<5;$i++) {
  11. $offset=rand(0,61);
  12. $texte=$texte.$tab[$offset]." ";
  13. }
  14. $fontes = array("tahoma.ttf" );
  15. $rnd = rand(0, count($fontes)-1);
  16. $police = $fontes[$rnd];
  17. $couleurTexte = imagecolorallocate($image, 255,255,255); // blanc  
  18. ImageTTFText($image, 12, 12, 30, $hauteur/(3/2), $couleurTexte, $police, $texte);
  19. $_SESSION['texteimage']=$texte;
  20. imagejpeg($image);
  21. imagedestroy($image);
  22. ?>

Reply

Marsh Posté le 24-08-2007 à 16:39:06   

Reply

Marsh Posté le 24-08-2007 à 16:50:12    

rajoute un session_start au debut

Reply

Marsh Posté le 24-08-2007 à 16:54:22    

Hmmm effectivement je n'avais pas pensé à cela... par contre, même après l'avoir ajouté, rien n'y fait. On dirait que l'appel de ce code par la balise img m'interdit l'accès aux variables qui y sont utilisées...

Reply

Marsh Posté le 24-08-2007 à 16:57:29    

Ah ca avance... apparemment il y'avait un problème de rafraichissement. Bon, maintenant, ça m'affiche l'ancienne variable :p
Si je génère une fois E0TX8, la fois suivante l'image affiche abcde et la variable E0TX8 ... ça devrait se résoudre rapidement ^^
 
Merci pour ton aide flo ^^

Reply

Marsh Posté le 24-08-2007 à 17:20:23    

rajoute des header pour que le navigateur ne mette pas l'image en cache  

Reply

Marsh Posté le 25-08-2007 à 14:58:13    

Et supprime aussi les lettres o, O, I et B et les chiffres 0, 1 et 8 qui posent toujours problème aux utilisateurs faiblement humains...

Reply

Marsh Posté le 26-08-2007 à 10:28:37    

Salut,
 
Juste pour info, il existe JpGraph, une lib qui génère tout un tas de graphiques et aussi le type d'images aléatoires dont tu as besoin, en qqs lignes de code seulement.
 
Ci-dessous l'exemple qui est donné avec JpGraph ( http://www.aditus.nu/jpgraph/ ) :

Code :
  1. <?php
  2. // Antispam example using a random string
  3. require_once "../jpgraph_antispam.php";
  4. // Create new anti-spam challenge creator
  5. // Note: Neither '0' (digit) or 'O' (letter) can be used to avoid confusion
  6. $spam = new AntiSpam();
  7. // Create a random 5 char challenge and return the string generated
  8. $chars = $spam->Rand(5);
  9. // Stroke random cahllenge
  10. if( $spam->Stroke() === false ) {
  11.     die('Illegal or no data to plot');
  12. }
  13. ?>


 
Je souhaite moi aussi inclure ce type de protection sur un formulaire, mais je voulais savoir si je suis obligé de créer physiquement le fichier Jpeg pour l'afficher ou pas ?
 
Si on reprend l'exemple de code ci-dessus, la méthode Stroke() (la méthode qui crée l'image) se termine par :

Code :
  1. [...]
  2. header("Content-type: image/jpeg" );
  3. imagejpeg($resimg);


 
Et dans ma page j'ai donc une balise <img src="" />, mais je ne sais pas comment faire apparaître l'image dedans... vous avez une idée ?
 
Au début j'avais commencé à modifier la méthode Stroke afin de créer un fichier Jpeg, mais à chaque fois que le formulaire est lancé, il génère donc un Jpeg... au bout d'un moment ça va me faire tout un tas de Jpeg inutiles.
 
Si vous avez une idée, je suis preneur !!
Lionel.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed