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 :

verification du code captcha [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut verification du code captcha
    Salam ; suite a mon post http://www.developpez.net/forums/d11...rreur-captcha/ , et suite aux conseilles de christel et RunCodePhp , j'arrive pas a tombé a tombé sur le vrai contenu de la variable .
    et oui christel je suis tombé dans le piège
    attention j'ais dis également que si la page qui reçoit la saisie ...
    est la même que celle qui affiche le FORM l'image va donc se recréer et une nouvelle valeur va étre injectée dans la SESSION captcha ! attention.
    mon code :
    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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    <?php
    session_start();
    	// code de verrification du captcha et la valeur saisie dans le input
    		if( (isset($_post['sident'])) &&(!empty($_SESSION['captcha'])) && ($_SESSION['captcha'] == $_POST['code'])) 
    					{
    					// 
    							echo "<p> code valide!<br/></p>";	
    					//unset($_SESSION['captcha']);
    					} 
    					else {
     
    					echo "<p> code invalide.....</p>";
    					}
     
     
     
     
    ?>	
    <!DOCTYPE html>
    <HTML>
    <head>
    	<!--Pour forcer le navigateur à afficher en mode IE9, sans quoi il peut passer en mode quirks.-->
    	<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
    	<meta charset="utf-8" />
    	<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <!-- application dynamique  -->
    	<link rel="shortcut icon" href="image/favs3g.ico" />
    	<link rel="stylesheet" media="screen" type="text/css" href="css/style_div.css"> 
    	<title> Identification</title>
    	<script type="text/javascript"> // fonction pour empeché le retour arrière boutton du navigateur
    	function noBack(){window.history.forward()}
    	noBack();
    	window.onload=noBack;
    	window.onpageshow=function(evt){if(evt.persisted)noBack()}
    	window.onunload=function(){void(0)}
    	</script> 
    </head>
    <body>
     
    	<div class="entete">
    			<div class="date">
    				        <?php
    						$jour = array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");
    						$mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
    						$heure_courante = date ("H:i");
    						$dateDuJour = $jour[date("w")]." ".date("d")." ".$mois[date("n")]." ".date("Y")."     ".$heure_courante;
    						echo "Date:   ". $dateDuJour;
     
    						?> 
     
    			</div>
    			<div class="h1">
    				<h1> S-3-G: Identification </h1>
    		</div>
    	</div>
    		<div class="contenu"> 
     
    		<form class="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"  autocomplete='off'>
     
    			<p class="labelident"><label for="ident">Identifiant:</label> 
    					<input type="text" name="ident" value="<?php if (isset($_POST['ident']))echo stripslashes(htmlentities(trim($_POST['ident']))); ?>" size="28" maxlength="23" id="ident" autofocus/>
    					<?php
    					 	if (!empty($erreurs_msg['ident'])) 
    						{
     
    						affichage_texte ("3", "red",$erreurs_msg['ident']); // fonction js pour afficher le msg en rouge
     
    						} 
    					?>
    			</p>
    			<p class="labelpass"><label for="pass">Mot de passe:</label> 
    					<input type="password"  name="pass" value="<?php if (isset($_POST['pass']))echo stripslashes(htmlentities(trim($_POST['pass']))); ?>" " size="28" maxlength="23" id="pass"/>
    					<?php
    					 	if (!empty($erreurs_msg['pass'])) 
    						{
     
    						affichage_texte ("3", "red",$erreurs_msg['pass']); // fonction pour afficher le msg en rouge
     
    						} 
    					?>
     
    			</p>
    			<p>
    				<label>Texte de l'image</label> : <input type="text" name="code" value="" size="6" id="captcha" />
    				<img src= "captcha.php" alt="Texte de l'image" />
    				<a href="test.php"> voir captcha </a>
    			</p>
     
    			<?php
    					 if (!empty($erreurs_msg['code'])) 
    					{
     
    					affichage_texte ("3", "red",$erreurs_msg['code']); // fonction pour afficher le msg en rouge erreur captcha
     
    					} 
    			?>
     
    			<p class="buttons">
     
    				<button type="submit" name="sident" value="envoyer" >Connexion</button>
    			</p>
     
    		</form>
    	</div> 
     
    <footer class="pied">
    	<p> Copyright © s3g - Conception kacinet <p>
    </footer>
     
    </body>
     
    </html>
    une aide sera très appréciable.

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    j'arrive pas a tomber sur le vrai contenu de la variable
    C'est à dire ?
    Que ton test ci-dessus renvois "code invalide....." ?


    Même pour des test, tu devrais éviter de faire un echo (affichage) avant le doctype et la balise Html, ça peu provoquer des erreurs inattendues.

    Essai plutôt comme ceci : (et qu'est-ce qu'il s'affiche un fois avoir saisie le bon code normalement)
    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
     
    <?php
    session_start();
    // code de verrification du captcha et la valeur saisie dans le input
    $test = '';
    if (isset($_SESSION['captcha'], $_post['sident'], $_POST['code']) && !empty($_SESSION['captcha'])) {
        if ($_SESSION['captcha'] == $_POST['code']) {
    	$test =  '<p> code valide!<br/></p>';
        } 
        else {
    	$test =  '<p> code invalide | captcha:'.$_SESSION['captcha'].'|code:'.$_POST['code'].'</p>';
        }
    }
    ?>	
    <!DOCTYPE html>
    <HTML>
    <head>
        ... etc ...
    </head>
    <body>
    <?php
    echo $test;
    ?>
     
    ... etc ...
     
    </body>
    </html>

    As tu compris ce que j'avais expliqué dans l'autre topic ? (ci-dessous)
    Citation Envoyé par RunCodePhp
    Il faut comprendre que le nouveau code sera créé après que le contenu (HTML) de la page index.php sera reçu par le client (navigateur), après que l'image dynamique (captcha.php) soit interprété par le navigateur, et même après que le serveur renvoie le flux de l'image (le nouveau code du captcha).
    Le nouveau code captcha n'est pas créé à n'importe quel moment du déroulement de cette page index.php.

    C'est pour cette raison que je suggère de pointer sur cette page test_session.php dans un autre onglet après chaque affichage du index.php pour vérifier ça convenablement.
    C'est ce qu'évoque Christel_r à mon avis.


    Remets le code du captcha, peut être il y a t-il une erreur.

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam , Merci Run:
    le code captcha :
    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
    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
    60
    61
    62
     
     
    header("Cache-Control: no-store, no-cache, must-revalidate"); 
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache"); 
     
    function _generateRandom($length=6)
    {
    	$_rand_src = array(
    		array(48,57) //digits
    		, array(97,122) //lowercase chars
    	//	, array(65,90) //uppercase chars
    	);
    	srand ((double) microtime() * 1000000);
    	$random_string = "";
    	for($i=0;$i<$length;$i++){
    		$i1=rand(0,sizeof($_rand_src)-1);
    		$random_string .= chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1]));
    	}
    	return $random_string;
    }
     
    //$im = @imagecreatefromjpeg("captcha.jpg"); 
    $im =imagecreate(60,20);
    $bg = imagecolorallocate($im, 224,224,224);
     
    //définition des lignes noires
     $nb_lignes = mt_rand (3,7);
    $i = 1;
    while($i<=$nb_lignes)
    {
    ImageLine($im, mt_rand (0,40), mt_rand (0,100), mt_rand (280,320), mt_rand (0,100), ImageColorAllocate ($im, 60,75,200));
    $i++;
    } 
     
    //définition des triangles
    $nb_triangles = mt_rand (1,6);
    $i = 1;
    while($i<=$nb_triangles)
    {
    $array = Array(mt_rand (0,300), mt_rand (0,100), mt_rand (0,300),mt_rand (0,100), mt_rand (0,300), mt_rand (0,100));
    ImagePolygon($im, $array, 3, ImageColorAllocate ($im, 30,30,200));
    $i++;
    }
    //définition des ellipses
    $nb_ellipses = mt_rand (1,6);
    $i = 1;
    while($i<= $nb_ellipses)
    {
    ImageEllipse($im, mt_rand (0,320), mt_rand (0,100),25+mt_rand (0,15), 25+mt_rand (0,15),ImageColorAllocate ($im, 0,0,0));
    $i++;
    }
     
    $rand = _generateRandom(3);
     
    ImageString($im, 5, 2, 4, $rand[0]." ".$rand[1]." ".$rand[2]." ", ImageColorAllocate ($im, 0,0,0));
    $rand = _generateRandom(3);
    ImageString($im, 5, 2,4, " ".$rand[0]." ".$rand[1]." ".$rand[2], ImageColorAllocate ($im, 204,0,0));
    Header ('Content-type: image/jpeg');
    imagejpeg($im,NULL,100);
    ImageDestroy($im); 
    $_SESSION['captcha'] = $rand;

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Alors je te mets les divers remarques même basiques sur ce que j'ai vu.

    - Dans le index.php à un moment il y a $_post au lieu de $_POST

    - Dans le captcha.php il manque les <?php ?>, le session_start().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rand = _generateRandom(3);
    $_SESSION['captcha'] = $rand;
    Mais c'est surtout ci-dessus qui ne va pas, car $rand est "écrasé" au 2ème appel de _generateRandom(3) qui lui contiendra uniquement 3 caractère (au lieu de 6).

    Puis aussi, c'est bien de vouloir faire en sorte que les caractères/couleurs soient intercalés : noir - rouge - noir - rouge, etc ... mais il faut que ces 6 caractères intercalés le soit aussi dans l'initialisation de $_SESSION.
    En somme, tu est tombés dans ton propre piège avec ces décalages.


    Bref, je te mets un code du captcha.php que j'ai un poil remanié/corrigé et fonctionnel (j'ai testé) :
    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
    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
    60
    61
    <?php
    function _generateRandom($length = 6) {
    	$_rand_src = array(
    		array(48,57) //digits
    		, array(97,122) //lowercase chars
    	//	, array(65,90) //uppercase chars
    	);
    	srand ((double)microtime() * 1000000);
    	$random_string = '';
    	for($i = 0; $i < $length; $i++){
    		$i1 = rand(0, sizeof($_rand_src) -1);
    		$random_string .= chr(rand($_rand_src[$i1][0], $_rand_src[$i1][1]));
    	}
    	return $random_string;
    }
    //
    header ('Content-type: image/jpeg');
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", FALSE);
    header("Pragma: no-cache");
    //
    session_start();
    $rand_3 = _generateRandom(3);
    $rand_6 = _generateRandom(3);
    $_SESSION['captcha'] = $rand_3[0].$rand_6[0].$rand_3[1].$rand_6[1].$rand_3[2].$rand_6[2];
    //
     
    //$im = @imagecreatefromjpeg("captcha.jpg"); 
    $im = imagecreate(60,20);
    $bg = imagecolorallocate($im, 224, 224, 224);
     
    //définition des lignes noires
    $nb_lignes = mt_rand(3, 7);
    $i = 1;
    while ($i <= $nb_lignes) {
        ImageLine($im, mt_rand(0, 40), mt_rand(0, 100), mt_rand(280, 320), mt_rand(0, 100), ImageColorAllocate($im, 60, 75, 200));
        $i++;
    }
     
    //définition des triangles
    $nb_triangles = mt_rand(1, 6);
    $i = 1;
    while ($i <= $nb_triangles) {
        $array = Array(mt_rand(0, 300), mt_rand(0, 100), mt_rand(0, 300), mt_rand(0, 100), mt_rand(0, 300), mt_rand(0, 100));
        ImagePolygon($im, $array, 3, ImageColorAllocate($im, 30, 30, 200));
        $i++;
    }
    //définition des ellipses
    $nb_ellipses = mt_rand(1, 6);
    $i = 1;
    while ($i <= $nb_ellipses) {
        ImageEllipse($im, mt_rand(0, 320), mt_rand(0, 100), 25 + mt_rand(0, 15), 25 + mt_rand(0, 15), ImageColorAllocate($im, 0, 0, 0));
        $i++;
    }
    //
    ImageString($im, 5, 2, 4, $rand_3[0].' '.$rand_3[1].' '.$rand_3[2].' ', ImageColorAllocate($im, 0, 0, 0));
    ImageString($im, 5, 2, 4, ' '.$rand_6[0].' '.$rand_6[1].' '.$rand_6[2], ImageColorAllocate($im, 204, 0, 0));
    //
    imagejpeg($im, NULL, 100);
    ImageDestroy($im);
    ?>

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; RunCodePhp :
    l'une de vos qualité : très très très patient et c'est important dans le développement. et surtout a 06H20 mn du mat
    revenons au sujet:
    en premier lieu c'est un code d'un site anglosaxon que j'ai un petit peu modifier , le principe de ce code captcha est de ressaisir les trois lettres en couleurs noirs et non pas le 6 lettres.
    Dans le index.php à un moment il y a $_post au lieu de $_POST
    là j'ai pas fait attention est ce que y'a une différence d’interprétation entre $_post et $_POST ?
    Dans le captcha.php il manque les <?php ?>, le session_start().
    sa existe sur mon fichier , j'ai oublié de les sélectionnés lors du copie/coller.

    Puis aussi, c'est bien de vouloir faire en sorte que les caractères/couleurs soient intercalés : noir - rouge - noir - rouge, etc ... mais il faut que ces 6 caractères intercalés le soit aussi dans l'initialisation de $_SESSION.
    En somme, tu est tombés dans ton propre piège avec ces décalages
    ++++1 , là vous avez toute a fait raison , je voulai profité de cette option du code pour donné un peut de sel a mon captcha , mais je suis tombé sur la non compréhension du fonctionnement du code et votre intervention sa ma permis de voir clair.
    merci pour la rectification du code :
    est ce que c'est important de mettre les lignes en dessous a cette endroit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    .........
     
    header ('Content-type: image/jpeg');
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", FALSE);
    header("Pragma: no-cache");
    ..........
    session_start();
    donc en résumé :
    1. ma faute c'est que j'ai oublié d'expliqué le principe du code faute de compréhension.
    2. le problème été surtout avec la variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['captcha'] = $rand;
    La solution de RunCodePhp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    .........
    header("Pragma: no-cache");
    //
    session_start();
    $rand_3 = _generateRandom(3);
    $rand_6 = _generateRandom(3);
    $_SESSION['captcha'] = $rand_3[0].$rand_6[0].$rand_3[1].$rand_6[1].$rand_3[2].$rand_6[2];
    //
     
    //$im = @imagecreatefromjpeg("captcha.jpg"); 
    $im = imagecreate(60,20);
    ..........
    merci Run

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    ... et surtout a 06H20
    +3 heures avec le décalage horaire.
    Du coup ça fait une qualité de moins.

    est ce que c'est important de mettre les lignes en dessous a cette endroit ?
    Non, pas vraiment.
    Mais j'ai un peu remanié le code pour faire quelque part les choses dans l'ordre et les regrouper.
    - les entêtes (en 1er)
    - session (démarrage/initialisation)
    - création/renvoie de l'image
    (c'est maladif, il n'y a pas obligation de tout prendre pour argent comptant )

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

Discussions similaires

  1. quels outils de verification de code Java ?
    Par Aurélie38 dans le forum Qualimétrie
    Réponses: 2
    Dernier message: 08/08/2008, 08h50
  2. Verification de code sous visual C#
    Par zerobug dans le forum C#
    Réponses: 9
    Dernier message: 20/03/2008, 14h01
  3. Réponses: 2
    Dernier message: 27/04/2006, 15h16
  4. Verification de code pour IBQuery
    Par the watcher dans le forum Connexion aux bases de données
    Réponses: 5
    Dernier message: 08/09/2005, 21h12

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