IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Captcha : ne rentrer que certaines couleurs


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Captcha : ne rentrer que certaines couleurs
    Bonjour,
    Je souhaiterai realiser un captcha un peu spécial: l'utilisateur a devant lui un captcha normal avec plusieurs nombres de différentes couleurs.
    Pour valider le formulaire, il va devoir ne rentrer QUE les nombres de couleurs vertes par exemple.
    Voici donc mon code


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?php
    session_start();
    //
    /*
     * Genere plusieurs nombres aleatoires suivant la variable $nombre
     */
    $nombre = 8;
    $generate = '';
    for ($i=0;$i<$nombre;$i++) {
    	$generate .= rand(0,9);	
    }	
     
     
    /*
     * Genere une image png avec les nombres précedemments géneré
     */
     
    $largeur = strlen($generate) * 10;
    $hauteur = 25;
    $image = imagecreate($largeur, $hauteur);
    $blanc = imagecolorallocate($image, 255, 255, 255); 
    $noir = imagecolorallocate($image, 0, 0, 0);
    $milieu = ($hauteur / 2) -8;
    $couleur_verte = '';
    $couleur = array(
    	'bleu' => imagecolorallocate($image,0,0,255),//bleu
    	'rouge' => imagecolorallocate($image,255,0,0),
    	'vert' => imagecolorallocate($image,0,255,0)//vert
    	);
     
    for ($i=0;$i < strlen($generate);$i++) {
    	$texte = $generate[$i];
    	$couleur_aleatoire = $couleur[array_rand($couleur)];
    	imagestring($image, 8, strlen($generate) /2 + $i * 9 , $milieu,$texte,$couleur_aleatoire); // on ecrit nos nombre
     
     
     
    	/*
          fonction qui "déconne" genere une erreur de type
    Warning: array_key_exists() expects parameter 2 to be array, string given in /var/www/sententiae/fonctions/captcha.php on line 36 
    */
    	if (array_key_exists('vert',$couleur_aleatoire)) { 
    			$couleur_verte = $generate[$i]; 
    		}
     
    	}
    $couleur_verte = $_SESSION['captcha'];
     
     
    imageline($image, 2,mt_rand(2,$hauteur), $largeur-2, mt_rand(2,$hauteur), $noir); // on rajoute une barre
    imagerectangle($image, 1, 1, $largeur -1, $hauteur - 1, $noir); // et une petite bordure toute belle
    header("Content-type: image/png");
    imagepng($image);	
    imagedestroy($image);
     
     
     
    ?>

    Il semblerait donc que cela soit la fonction array_key_exists qui n'aime pas ça.
    Si qqun aurait une solution!
    Merci à vous!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne sais pas ce que tu essayais de faire avec le array_key_exist :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    or ($i=0;$i < strlen($generate);$i++) {
    	$texte = $generate[$i];
     
     
    	$couleur_aleatoire = array_rand($couleur);
    	imagestring($image, 8, strlen($generate) /2 + $i * 9 , $milieu,$texte,$couleur[$couleur_aleatoire]); // on ecrit nos nombre
     
    if ($couleur_aleatoire == 'vert') { 
    	$couleur_verte = $generate[$i]; 
    }
    Il y a par contre un gros problème avec ton systeme : que se passe t'il si la couleur attendue n'est jamais tirée ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Salut,
    Je cherchais la complication avec le array_key_exist, ça doit surement être ça.
    Voici le code exacte
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $texte = $generate[$i];
     
     
    	$couleur_aleatoire = array_rand($couleur);
     
    	imagestring($image, 8, strlen($generate) /2 + $i * 9 , $milieu,$texte,$couleur[$couleur_aleatoire]); // on ecrit nos nombre
     
    	if ($couleur_aleatoire == 'vert') { 
    	$couleur_verte .= $generate[$i]; 
    	}

    Mais en effet, je n'ai pas reflechi à ce problème, si je n'ai aucune couleur verte.
    Passer à deux couleurs seulement? Augmenter le nombre de nombre? Ou imposer un minimum de nombre vert!
    A méditer et merci à toi!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/06/2015, 22h18
  2. Ne voire que certaines extensions et masquer les autres
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 04/12/2005, 23h04
  3. Ne rentrer que des chiffes dans une stringgrid
    Par rvzip64 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/08/2005, 11h06
  4. [Oracle 8i] ne garder que certains enregistrements (COUNT ?)
    Par delphim dans le forum Langage SQL
    Réponses: 13
    Dernier message: 23/02/2005, 14h30
  5. 1 Table, Des doublons, ne rertenir que certains d'entre eux
    Par Dragano dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/01/2005, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo