Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Demande aide pour mon script captcha [ Réseau & Internet / Autre ] (Jarod1980)

mardi 14 août 2007 à 21:09:09 | Demande aide pour mon script captcha

Jarod1980

Bonjour,
J'ai essayé de mettre en place une methode de captcha mais mon image aléatoire ne s'affiche jamais dans ma page formulaire que ce soit avec IE ou Firefox, j'ai vérifié si la librairie GD est activée sur mon serveur en faisant un phpinfo() et c'est le cas. Est ce que quelqu'un pourrait m'aider à résoudre ce problème, svp? Je mets mes 2 fichiers php ci-dessous.
Merci.

Mon fichier image.php :

<?php
// On démarre une session
session_start();
/*
Pour créer une image, on envoie un en-tête avec la fonction header()
pour dire au navigateur qu'on envoie une image
Lorsqu'on va appeler l'image avec <img src="..." /> on utlisera
bien image.php et non bruit.png
*/
header("Content-Type: image/png");
/**
  mt_rand() génère un nombre aléatoire : cette fonction est
  plus rapide que rand() de la bibliothèque standard
  sha1() renvoie une chaine cryptée de son paramètre. Elle est similaire
  à md5() mais renvoie une chaine plus longue, la probabilité de
  collision est donc réduite
  substr() retourne le segement d'une chaine. Dans notre cas on prend un segment
  de 5 caractères en partant du caractère 0
  On stocke alors la chaine obtenue dans $rand_str
  */
  $rand_str = substr( sha1( mt_rand() ), 0, 5);
// On hash ensuite cette valeur avec md5() puis on stocke ce résultat dans variable de session $_SESSION['valeur_image'] de la session en cours
  $_SESSION['valeur_image'] = md5($rand_str);
// Afin de personnaliser chacun de nos caractères, on les stocke un par un dans des variables
  $char1=substr($rand_str,0,1);
  $char2=substr($rand_str,1,1);
  $char3=substr($rand_str,2,1);
  $char4=substr($rand_str,3,1);
  $char5=substr($rand_str,4,1);
/*
  imagecreatefrompng() crée une nouvelle image PNG à partir d'un
  fichier
  On la stocke dans $image pour pouvoir y mettre ensuite nos caractères
  */
  $image=imagecreatefrompng("bruit.png");
/*
  putenv() fixe la valeur de la variable d'environnement pour GD. Cette valeur
  n'existera que durant la vie du script courant, et l'environnement initial sera
  restauré lorsque le script sera terminé
  Cette ligne est utile si vous avez des problèmes lorsque la police de
  caractère réside dans le même dossier que le script qui
  l'utilise
  Remarquez que lorsqu'on utilisera les polices, il faudra enlever l'extension
  .tff
  */
  putenv('GDFONTPATH=' . realpath('.'));
/*
  glob() retourne un tableau contenant les fichiers trouvés dans le dossier
  avec l'extension .ttf
  Vous pouvez donc ajouter autant de police TTF que vous voulez
  */
  $files = glob("*.ttf");
/*
  Pour chaque nom de fichier trouvé, on retire l'extension .tff
  Et on l'ajoute au tableau $font[]
  */
  foreach ($files as $filename) {
  $filename = substr($filename,0,-4); // retire l'extension .tff
  $fonts[] = $filename; // ajoute les noms des polices sans leur extension dans un tableau
  }
/*
  imagecolorallocate() retourne un identifiant de couleur
  On définit les couleurs RVB qu'on va utiliser pour nos polices et on
  les stocke dans le tableau $colors[]
  Vous pouvez ajouter autant de couleurs que vous voulez
  */
  $colors = array(imagecolorallocate($image, 255,0,0), // rouge
  imagecolorallocate($image, 109,30,100), // violet
  imagecolorallocate($image, 30,80,180), // bleu
  imagecolorallocate($image, 40,100,20), // vert
  imagecolorallocate($image, 255,90,0), // orange
  imagecolorallocate($image, 130,130,130)); // gris
/*
  On crée la fonction aleatoire() qui va retourner une valeur prise au hasard dans un tableau
  Elle sera utilisée pour piocher une couleur et une police au hasard pour chaque caractère
  */
  function aleatoire($tab){
  $max = count($tab)-1;
  $hasard = mt_rand(0,$max);
  return ($tab[$hasard]);
  }
/*
  On met en forme nos caractères un par un pour les disposer sur notre
  image d'origine bruit.png
  imagettftext(image, taille_de_la_police, angle, coordonnée_X_à_partir_du_bord,
  coordonnée_Y_à_partir_du_bord, couleur_RVB, police_de_caractères,
  texte) dessine un texte avec une police TrueType
  */
  imagettftext($image, 25, -10, 10, 35, aleatoire($colors), aleatoire($fonts), $char1);
  imagettftext($image, 25, 20, 40, 35, aleatoire($colors), aleatoire($fonts), $char2);
  imagettftext($image, 25, -35, 60, 35, aleatoire($colors), aleatoire($fonts), $char3);
  imagettftext($image, 25, 25, 100, 35, aleatoire($colors), aleatoire($fonts), $char4);
  imagettftext($image, 25, -15, 120, 35, aleatoire($colors), aleatoire($fonts), $char5);

  // imagepng() crée une image PNG en utilisant l'image $image
  imagepng($image);

  //L'image a été créée, on appelle donc imagedestroy() qui libère toute la mémoire associée à l'image $image
  imagedestroy($image);
  ?>

Mon fichier form.php :

<?php
/** On démarre une session pour pouvoir récupérer le code généré */
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
/>
<title>Formulaire avec captcha</title>
</head>
<body>
  <?php
  /** Si le formulaire a été soumis */
  if(isset($_POST['submit'])) {
  $nombre = $_POST['nombre']; // on stocke dans $nombre la valeur tapée dans le formulaire
 // si le code ne correspond pas à celui déjà stocké dans la variable de session après l'avoir hashé avec md5() comme l'autre
  if(md5($nombre) != $_SESSION['valeur_image'])
  // on affiche une erreur
  echo '<h1>Le code ne correspond pas, réessayez !</h1>';
 // sinon le code est exact
  else echo '<h1>Le code est exact !</h1>';
  }
  ?>
<!-- Formulaire $_SERVER['PHP_SELF'] signifie que le traitement du formulaire se fait sur la même page -->
  <form name="verify_form" method="post" action="<?
  $_SERVER['PHP_SELF'] ?>">
  <!-- Affichage de l'image créée par image.php -->
  <img src="image.php" alt="Captcha" id="captcha"/><br>
   <br /><br />
  <label for="Verification">Recopiez le code ci-dessus</label>
  <br />
  <input name="nombre" type="text" id="nombre">
  <br />
  <input type="submit" name="submit" value="Envoyer"/>
  </form>
  </body>
  </html>
 


Jarod_Delaware

mardi 14 août 2007 à 21:26:34 | Re : Demande aide pour mon script captcha

Jarod1980

Je voulais juste rajouter que la font ne s'affiche jamais malgré le fait que j'ai mis sur le serveur des fichiers.ttf. J'ai également essayé cette solution ci-dessous mais l'image ne s'affiche pas dans le formulaire, j'ai juste un carré avec une croix rouge. Si quelqu'un peut m'aider à comprendre ce qui foire ça serait bien .

Mon autre test pour générer l'image :

session_start();

header("Content-Type: image/jpeg");
create_image();
die();


function create_image()
{
    $md5 = md5(rand(0,9999));
    $pass = substr($md5, 10, 5);
   
    $_SESSION["pass"] = $pass;
   
    $image = ImageCreatetruecolor(100, 20); 

    $clr_white = ImageColorAllocate($image, 255, 255, 255);
    $clr_black = ImageColorAllocate($image, 0, 0, 0);

    imagefill($image, 0, 0, $clr_black);

    imagefontheight(15);
    imagefontwidth(15);

   imagestring($image, 5, 30, 3, $pass, $clr_white);
   
    imageline($image, 5, 1, 50, 20, $clr_white);
    imageline($image, 60, 1, 96, 20, $clr_white);

    imagejpeg($image);
   
   imagedestroy($image);
}
?>


Jarod_Delaware

mercredi 15 août 2007 à 12:03:03 | Re : Demande aide pour mon script captcha

pysco68

jette un coup d'oeil ma source.... sur mon serveur elle marche... compare avec ce que tu fais....


Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo


mercredi 15 août 2007 à 12:17:14 | Re : Demande aide pour mon script captcha

coucou747

Salut

t'as aucun message d'erreur ?

vire le header, et met le juste avant le  imagepng($image); ca te permetra de verifier si tu as une erreur ou non


une recherche sur exalead vous aurait peut-etre evite de poser cette question
In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy

jeudi 16 août 2007 à 10:47:25 | Re : Demande aide pour mon script captcha
jeudi 16 août 2007 à 19:52:56 | Re : Demande aide pour mon script captcha

Jarod1980

Salut,
Désolé pour le poste précédent vide, j'ai un petit soucis avec mon navigateur IE, c'est vraiment de la daube, vive firefox. Bref, j'ai essayé de changer de place le header juste avant le imagepng($image), j'ai pas d'erreur mais tjs pas d'image qui s'affiche. Est ce que ça peut venir mon hebergeur?
Au sinon, je vais essayer ton script pysco68, histoire de voir si ça marche chez mon herbergeur.
Merci pour votre aide.
@+


Jarod_Delaware

vendredi 17 août 2007 à 11:43:48 | Re : Demande aide pour mon script captcha

aroh

hello,
chez moi ça marche pas le code suivant: ça ne ressort que du rouge à chaque fois

$colors

=array(
imagecolorallocate
($im,255,0,0),// rouge
imagecolorallocate($im,109,30,100),// violet
imagecolorallocate($im,30,80,180),// bleu
imagecolorallocate($im,40,100,20),// vert
imagecolorallocate($im,255,90,0),// orange
imagecolorallocate($im,130,130,130));// gris

functionaleatoire($tab){
$max
=count($tab)-1;
$hasard
=mt_rand(0,$max);
return($tab[$hasard]);
}

$couleur_fond
=aleatoire($colors);



Cette discussion est classé dans : image, str, rand, substr, aleatoire


Répondre à ce message

Sujets en rapport avec ce message

tag [img] avec preg_match_all [ par cid0u ] Salut, j'ai un petit probleme avec mes tag bbcode IMG lorsque je colle deux images avec [*img]image[*/img] ca m'affiche une "image" ayant pour adress concaténation séparation entre tableau [ par alexius ] Bonjours à tous, dans le cadre d'une application que je réalise je suis confronté a séparer des donner concaténan dans des tableau différents, je vous Petit problème avec mt_rand [ par astuces_jeux ] Bonjour  J'ai un problème avec mt_rand je l'utilise pour faire un image avec des caractères à remettre à l'inscritiption. Pour avoir une image au h [ URGENT] prob tableau aleatoire [URGENT] [ par bsketeur ] bonjour a tous j'ai un gros problemeje doit faire un tableau avec la function rand.je vous ecrie le sujet de mon exercicevous dever faire un tableau d comment afficher un captcha à la fin d'un formulaire ? [ par tiger159 ] Bonjour,j'aimerais savoir comment intégrer un captchaà la suite de l'affichage d'un formulaire.(Il semble que ce soit dû à 'header' qui a déjàenvoyé s Lib. GD, Texte sur image [ par DarkM60 ] Bonjour tout le monde, J'aimerai creer une fonction qui met des retour a la ligne avec du texte sur une image(selon si le texte est grand ou pas quoi Réduire la taille d'une image puis la sauvegarder réduite [ par Animax77 ] Je suis en train de faire un site dont le principe est d'uploader des dessins pour les partager. ( je fais un peu de pub en passant ^^, il est ici, ma Menu/ lien "interactif" [ par CCJ ] Bonjour! Voila mon probleme est en html ou php.JE voudrai faire un menu pour mon site de facon a ce que lorque le visiteur passe sur un lien du menu , Image,upload et unlink [ par Steph666 ] Bonjour à tous,Existe-t-il un moyen de supprimer une image uploadée sur le serveur lorsque l'utilisateur ferme de façon intempestive son navigateur, e image liens [ par amaamaa ] j'ai inseré des photo sur mon site et je vx q'ils soient des liens


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.