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 :

erreur de 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 : 53
    Localisation : Algérie

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut erreur de captcha
    Salam ;on s'inspirant du code d'un site sur le captcha et des tutoriels PHP j'ai une erreur d'affichage du code.
    page verif_code_gen.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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
    // On crée la session avant tout
    session_start();
     
    // On définit la configuration :
    $nbr_chiffres = 6; // Nombre de chiffres qui formeront le nombre
     
    // Là, on définit le header de la page pour la transformer en image
    header ("Content-type: image/png");
    // Là, on crée notre image
    $_img = imagecreatefrompng('./mod/fond_verif_img.png');
     
    // On définit maintenant les couleurs
    // Couleur de fond :
    $arriere_plan = imagecolorallocate($_img, 0, 0, 0); // Au cas où on n'utiliserait pas d'image de fond, on utilise cette couleur-là.
    // Autres couleurs :
    $avant_plan = imagecolorallocate($_img, 255, 255, 255); // Couleur des chiffres
     
    ##### Ici on crée la variable qui contiendra le nombre aléatoire #####
    $i = 0;
    while($i < $nbr_chiffres) {
            $chiffre = mt_rand(0, 9); // On génère le nombre aléatoire
            $chiffres[$i] = $chiffre;
            $i++;
    }
    $nombre = null;
    // On explore le tableau $chiffres afin d'y afficher toutes les entrées qui s'y trouvent
    foreach ($chiffres as $caractere) {
            $nombre .= $caractere;
    }
    ##### On a fini de créer le nombre aléatoire, on le rentre maintenant dans une variable de session #####
    $_SESSION['aleat_nbr'] = $nombre;
    // On détruit les variables inutiles :
    unset($chiffre);
    unset($i);
    unset($caractere);
    unset($chiffres);
     
    imagestring($_img, 5, 18, 8, $nombre, $avant_plan);
     
    imagepng($_img);
     
    ?>
    vérification du code page valid.inc.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
    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
     
    <?php
     
    include('./mod/verif_code_gen.php');
    $_SESSION['aleat_nbr'] = $nombre;
     
    header('Content-type: text/html; charset=UTF-8');
    include('./mod/cbd.inc.php');
    // Traitements/vérifications
    $erreurs_msg = array();
     
     
     // on verifi que l'utilisateur a cliquer sur le bouton connexion
    if (isset($_POST['sident'])) 
    	{
    		// On vérifie que les élément sont valides
    		if (empty($_POST['ident'] )) 
    			{
    				$erreurs_msg['ident'] = 'Veuillez saisir votre Identifiant SVP.';
    			}
     
    		elseif (empty($_POST['pass'])) 
    			{
    				$erreurs_msg['pass'] = 'Veuillez saisir votre mot de passe SVP.';
    			} 	
    		elseif (Empty($_POST['verif_code']))
    			{
     
    			$erreurs_msg['verif_code'] = 'Veuillez saisir le texte de l\'image SVP.';
     
    			}
    		//on verifie  si aucun champs n'est vide donc <>"" (différent de vide)
    		elseif(($_POST['ident'] <> "") AND ($_POST['pass'] <> "") and ($_POST['verif_code']==$_SESSION['aleat_nbr']))
    		{
    					try 
    							{
    							// on affecte les variables aprés leurs traitement
    							$ident = trim(htmlspecialchars(stripslashes($_POST['ident'])));
    							$pass =  trim(htmlspecialchars(stripslashes($_POST['pass'])));
     
    							// connexion a la bdd et verrification de la validité de l'identifiant et le mot de passe
    							$verifident=$cbd->prepare('SELECT acces ,mpaccess FROM etab WHERE acces =:ident and mpaccess=:pass');
    							$verifident->bindParam(':ident', $_POST['ident'], PDO::PARAM_STR);
    							$verifident->bindParam(':pass',  $_POST['pass'],  PDO::PARAM_STR);
    							$verifident->execute();
    							$data=$verifident->fetch();
    							print_r ($data); // pour verifier les valeurs du tableau
     
    							if (($data['acces'] == $_POST['ident']) and ($data['mpaccess'] == $_POST['pass']))
    							//if ($data > 1)
    								{ 
    									// création de session 
     
    									$_SESSION['ident'] = $data['acces'];
    									$_SESSION['pass']  = $data['pass'];
    									$_SESSION['id']    = $data['cdet'];
     
    									$verifident->closeCursor();
    									$verifident = NULL;
    									header ('location: ./interfaces/tab.php'); 
    									// exit;
    								}
    								else
    								   {
    								 // header ('location: ./interfaces/tab.php'); 
    								  //header ('location: index.php'); 
    								   }
    							}
     
    						catch( Exception $e )
    							{
    							  echo 'Erreur de requète : ', $e->getMessage();
    							}
     
     
    	} // fin elseif
     
    } // fin isset
    page index.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
    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
     
    <?php
    include('./codephp/valid.inc.php'); 
    ?>	
    <!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'])) 
    						{
    						include('./codephp/fonctions.inc.php');
    						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'])) 
    						{
    						include('./codephp/fonctions.inc.php'); 
    						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" size="6" />
     
    			</p>
     
    			<p>
    			<img src="./mod/verif_code_gen.php" alt="Texte de l'image" />
    			</p>
    			<?php
    					 	if (!empty($erreurs_msg['verif_code'])) 
    						{
    						include('./codephp/fonctions.inc.php'); 
    						affichage_texte ("3", "red",$erreurs_msg['verif_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>
    erreur : affichage
    �PNG  IHDRZ s��iIDATh��ے� �ɾ�/�G/�2��&qg�Y���(՟&��;8������g��*��ʡ8B�)~yV#؞���ʡ�r(��[�����c��n\I��z{2 Ox�u�FDD4׽wi7���J�y��
    j'arrive pas a cerner l'origine de l'erreur ( c mon premier captcha)

  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

    erreur : affichage
    (affiche un flux d'une image)
    Donc le flux de l'image est affichée.

    Si on suit un peu le déroulement du code, index.php inclus : valid.inc.php
    Puis valid.inc.php inclus : verif_code_gen.php
    C'est cela qui ne va pas, car verif_code_gen.php s'occupe à générer une image dynamique.

    Il ne faut pas inclure verif_code_gen.php car c'est l'image (la balise) qui va l'appeler qui elle (du moins le code Html) se trouve dans index.php.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="./mod/verif_code_gen.php" alt="Texte de l'image" />
    En fait, ça revient de l'appeler 2 fois :
    - 1 fois directement (include)
    - 1 autre fois via la balise IMG, indirectement.


    Il faudra alors supprimer cette ligne là dans le valid.inc.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['aleat_nbr'] = $nombre;
    Sinon $nombre n'existera plus, puis ce n'est pas à ce moment de créer le code du captcha.
    Et puis c'est théoriquement à verif_code_gen.php de :
    - créer le code
    - de le stocker dans la session
    - et renvoyer le flux de l'image.
    Ce verif_code_gen.php devrait alors plutôt s'appeler code_gen.php (ou captcha.php), car il ne vérifie rien.
    (c'est au valid.inc.php qui s'occupe à vérifier le code saisie une fois le formulaire validé).

  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 : 53
    Localisation : Algérie

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ; RunCodePhp:
    votre simplicité d'expliqué les choses c'est vraiment du professionnel , j’espère qu"un jour vous ferai un tuto...
    c'est enlevé le include du verif_code_gen.php et la variable de session $_SESSION['aleat_nbr'] = $nombre; mais rien ne s'affiche.
    je vais revoir le code a zero.

  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
    je vais revoir le code a zero.
    Si c'est l'image dynamique qui te pose problème, fait simple en 1er, voir basique.
    Définit un code "en dur", et initialise la variable de session avec ce code.

    Puis fait un copier/coller du code dans la doc de Php pour imagestring(), et utilise le même code comme texte, histoire de faire simple, avoir du fonctionnel.

    Ensuite il suffit de mettre la balise image dans une page HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="/code_gen.php" style="width: 100px; height: 100px;" alt="captcha" />
    Au passage, supprime le . (point) en 1er dans l'URL.
    Théoriquement, un point est plus destiné à atteindre un fichier dans un système de fichier.
    Or, une URL n'a aucun rapport avec un système de fichier, c'est justement une URL en rapport à un domaine.

    Normalement tu devrait voir l'image (le code).

    Pour tester si la session fonctionne bien, il suffit de créer une autre page (provisoire) de test, genre test_session.php dans le même domaine, et mettre ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    session_start();
    print_r($_SESSION);
    ?>
    Ensuite, pointer en 1er sur la page qui contient la balise <img /> de l'image dynamique (on voit le code).
    Puis ouvrir un autre onglet de son navigateur et pointer vers test_session.php, et là on doit voir le contenu de la session, entre autre le code de la variable de session.

    A partir de là il reste plus grand à faire normalement.

  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 : 53
    Localisation : Algérie

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; merci RunCodePhp:
    fonctionnement du code :
    index.php inclus : valid.inc.php
    index.php: contiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    ....
    session_start();
    print_r($_SESSION); // pour afficher le contenu de la variable $_SESSION['aleat_nbr'] = $nombre initier dans page captcha.php (ex verif_code_gen.php)
     
    ......
    ?>
    le print affiche : Array ( [aleat_nbr] => 555565 ) .

    page valid.inc.php :une partie du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    .......
    elseif (Empty($_POST['code']))
    {
     
    $erreurs_msg['code'] = 'Veuillez saisir le texte de l\'image SVP.';
     
    }
     
    ........

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    elseif (Empty($_POST['code']))
    {
     
    $erreurs_msg['code'] = 'Veuillez saisir le texte de l\'image SVP.';
     
    }
    Je remarques que dans ton formulaire le nom du champ serait : verif_code (et non code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="verif_code" size="6" />

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

Discussions similaires

  1. [PHP 5.1] erreur au code captcha
    Par hanitax dans le forum Langage
    Réponses: 1
    Dernier message: 05/02/2013, 11h51
  2. Réponses: 1
    Dernier message: 02/02/2012, 16h15
  3. Erreur sur un captcha anti spam
    Par opeo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 25/01/2008, 11h53
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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