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 images


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut CAPTCHA images
    Bonjour

    j'essaye de créer un capchca basé sur la vision d'une image choisit aléatoirement. Dans un premier temps je créé mon formulaire est le nombre aléatoire. (form.php)

    Code : 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
     
    <?php
    //je créé mon nombre alétoire parmis mes 4 images
    function random($car) {
    $string = "";
    $chaine = "1234";
    srand((double)microtime()*1000000);
    for($i=0; $i<$car; $i++) {
    $string .= $chaine[rand()%strlen($chaine)];
    }
    return $string;
    }
     
    $chaine = random(1); ?>
     
     
    <form action="record_form.php?chaine=<?php echo $chaine; ?>" method="post">
    <textarea name="message" cols="" rows=""></textarea><br />
    <img src="/essence/capchca_img/<?php echo $chaine; ?>.gif" /> Que voyez-vous? <input name="id" type="text" maxlength="20" /><br />
    <input name="bouton" type="submit" />
    </form>
    dans un deuxième temps je vérifie le formulaire record_form.php

    Code : 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
     
    <?php
    //je récupère les variables de chaine.php
    $message = $_POST["message"];
    $chaine = $_POST["chaine"];
    $id = $_POST["id"];
     
    		//je me connecte et je sélectionne ma base
    		$db = mysql_connect('localhost', 'root', ''); 
    		mysql_select_db('capchca',$db);
     
    		//ma requête
    		$sql = "SELECT id FROM data where img = '$id'";
     
    		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
     
    		$data = mysql_fetch_assoc($req);
     
    		// je vérifie la concordance de chaine et d'id dans ma base mysql
    		if($data['id'] != $id) { 
    		echo 'mauvais';
        	exit;
      		}
     
    		// Si ça passe j'enregistre le message dans ma table
    		else {
    		$recording_message = "INSERT INTO message (texte) VALUES ('$message')";
    		mysql_query($recording_message) or die('eh merde dans l\'enregistrement');
    		echo 'Le message est dans la boite';
    		mysql_close();
    		}
    ?>
    Le problème (sinon ça ne serait pas drôle ... ) c'est que record_form.php ne trouve pas $chaine . Je pense que mon problème vient de form.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form action="record_form.php?chaine=<?php echo $chaine; ?>"
    Pourtant , j'ai vu le conseil de Kerod, qui fait la même chose

    Citation Envoyé par Kerod Voir le message
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="authentifie.php?log=<?php echo $login; ?>">....</form>
    sinon j'ai trouvé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form method="post" action="record_form.php?">
    <input type="hidden" name="dir" value="<? echo $chaine; ?>" />
    </form>

    Qu'en pensez-vous? merci pour vos conseils

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    $chaine étant transmis dans l'URL, il faut y accéder par $_GET['chaine'] et non pas $_POST['chaine']

    PS : transmettre le captcha dans une variable visible c'est bof :s utilise plutot les $_SESSION

  3. #3
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    $chaine étant transmis dans l'URL, il faut y accéder par $_GET['chaine'] et non pas $_POST['chaine']

    PS : transmettre le captcha dans une variable visible c'est bof :s utilise plutot les $_SESSION
    heu ça ne marche pas plus avec get ... moi qui voulais éviter les sessions ...

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    baaah faut voir ce que t'as testé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form method="post" action="record_form.php?">
    <input type="hidden" name="dir" value="<? echo $chaine; ?>" />
    </form>
    Déjà ça tel quel ça renvera rien du tout car pas de submit....

    Et sinon de écrit de cette façon, (en rajoutant un submit) il faudra tester $_POST['dir']

    Donc tant que tu n'aurais pas montré un bout de code complet, difficile de t'aider... déjà est-ce que $chaine vaut quelque chose dans form.php ?

    PS : Les sessions c'est plus facile qu'on ne le pense...

  5. #5
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message

    PS : Les sessions c'est plus facile qu'on ne le pense...
    heu pas sur ....

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Code form.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    // session_start doit toujours être utilisé avant le moindre affichage (un espace blanc et c'est mort !)
    session_start(); // a'y'est t'as une session ^^
     
    $_SESSION['captcha'] = ta_fonction_qui_retourne_un_captcha();
    /* reste du code avec le formulaire ici */

    Code record_form.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    session_start(); // important il faut relancer la session et récupérer les infos
    /**** traitement du formulaire ****/
    // Test du captcha
    if( empty($_POST['captcha'])) {
         echo "veuillez écrire le code CAPTCHA";
    } else {
         if ($_POST['captcha'] != $_SESSION['captcha']) { // Vérification du captcha, $_SESSION['captcha']
              echo "CAPTCHA incorrect";
         }
    }
    ?>

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

Discussions similaires

  1. Zend Captcha Image
    Par m4riachi dans le forum Zend
    Réponses: 1
    Dernier message: 02/12/2010, 20h05
  2. Rafraîchir captcha à partir d'une image
    Par beji15 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/04/2008, 01h09
  3. Comment créer un captcha sans des images TTF
    Par pierrot10 dans le forum Langage
    Réponses: 2
    Dernier message: 08/08/2007, 15h04
  4. [ImageMagick] Captcha crytographp image toute noire
    Par vodasan dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/02/2007, 08h35
  5. Génération d'image de sécurité (captcha) et système alternatif
    Par eric41 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/05/2006, 13h24

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