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

  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
    Points : 1 031
    Points
    1 031
    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
    Points : 3 947
    Points
    3 947
    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
    Points : 1 031
    Points
    1 031
    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
    Points : 3 947
    Points
    3 947
    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
    Points : 1 031
    Points
    1 031
    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
    Points : 3 947
    Points
    3 947
    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" />

  7. #7
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ; suite a votre intervention j'ai changé le name en code , de passage je l'ai corrigé dans le post.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    <p>
    <label>Texte de l'image</label> : <input type="text" name="code" size="6" id="captcha" />
    <img src="/mod/captcha.php" alt="Texte de l'image" /></p>
    pour l'instant je crois que le problème est là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="/mod/captcha.php" alt="Texte de l'image" /></p>

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Le catpcha est un probléme enfantin encore faut'il qu'il réalise une image lisible. C'est pour cette raison que les fichiers captcha.php (ou bidule.php)
    ne font que générer une image sans envoyer aucun header de texte !
    Bien sur il stoquent le code en SESSION
    Tel que ton PHP verif_code_gen.php est écris, lorsque je l'execute avec une image a moi , c'est parfait et le code est bien incruste !

    Alors
    1) tu as compris (j'ais lue ça) que seul le SRC de IMG appelle ce php
    2) que ton image doit étre un PNG valide !
    3) ton contrôle doit se faire avant de réafficher la saisie, si non,
    le php captcha change le code inscrit en SESSION

  9. #9
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    Bonsoir; merci chris
    1) tu as compris (j'ais lue ça) que seul le SRC de IMG appelle ce php
    2) que ton image doit étre un PNG valide !
    mon src est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="/mod/captcha.php" alt="Texte de l'image" /></p>
    là je voie pas ou est le problème..!!! est ce que tu peut être un peu explicite.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par redoran Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="/mod/captcha.php" alt="Texte de l'image" /></p>
    là je voie pas ou est le problème..!!! est ce que tu peut être un peu explicite.
    1) Oui je redit OK c'est parfait si tu n'appelles qu'a cet endroit /mod/captcha.php en effet je t'ais dit l'avoir testé et il marche super
    2) si ton ./mod/fond_verif_img.png est un png parfait (venant d'un logiciel fiable) alors c'est encore mieux ... c' est important
    3) 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.

  11. #11
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    pour l'instant je crois que le problème est là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="/mod/captcha.php" alt="Texte de l'image" /></p>
    Si tu soupçonnes qu'une partie ne fonctionne pas comme prévue, il faut au moins dire pourquoi.

    En tout cas, tu ne confirmes pas que l'image du code captcha s'affiche correctement.
    De même qu'il faudrait aussi confirmer qu'a chaque fois que tu pointes sur cette page index.php (suffit de rajouter un simple lien dans celle-ci est cliquer dessus plusieurs fois) qu'un nouveau code soit créé et affiché.

    Aussi, afin de bien vérifier que la session contient bien le nouveau code captcha, j'avais suggéré de créer une page de test (test_session.php) et de pointer sur celle-ci dans un autre onglet du navigateur après avoir affiché l'index.php.
    Tu ne dis pas un mot la dessus.


    index.php: contiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    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)
    Ce n'est pas correcte d'afficher cette variable de session à ce moment dans le index.php, car c'est l'ancien code captcha qui sera affiché et non le nouveau.
    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.


    Ou alors, on affiche la valeur de la variable de session "aleat_nbr" après validation du formulaire, à ce moment là ça doit être le nouveau 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
    <?php
    ... etc ...
    session_start();
    ... etc ...
     
    if (isset($_POST['sident'])) {
        // (provisoire) On vérifie le code captcha dans la session
        if (isset($_SESSION['aleat_nbr'])) {
            echo 'aleat_nbr" : '.$_SESSION['aleat_nbr'].'<br />';
        }
        else {
            echo 'Erreur : Pas de code captcha dans la session<br />';
        }
     
        // (provisoire) On vérifie que le code saisie est le même que celui dans la session
        if (isset($_POST['code'], $_SESSION['aleat_nbr']) && $_POST['code'] == $_SESSION['aleat_nbr']) {
            echo 'Ok, les codes sont les mêmes<br />';
        }
        else {
            echo 'Erreur : Les codes captcha ne sont pas les mêmes !!!<br />';
        }
     
    }
    Fait le point sur tout ça.
    Et n'hésites pas à rajouter des vérifs simples comme ci-dessus afin de t'aider (et nous aussi par la même occasion) à comprendre où est-ce que cela ne va pas.
    En tout cas s'il y a une erreur dans le code, elle n'est pas flagrante (du moins je ne vois pas).

  12. #12
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; merci pour vos intervention , si j'ai mit du temps a répondre parce que j'ai restructuré mon code de test :
    fichier captcha.php : juste pour afficher la chaine de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // creation de chaine de caractere
    $liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $code = '';
    while (strlen($code) != 6) 
    {
     $code.= $liste [rand (0,34)];
    }
    $_SESSION['code'] = $code; 
    echo  $code;
    l'affichage se fait sur la même page avec succé a chaque rafraichissement de la page.
    cette fois si j'ai ajouté le header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    header ("Content-type: image/png");
     
    // creation de chaine de caractere
    $liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $code = '';
    while (strlen($code) != 6) 
    {
     $code.= $liste [rand (0,34)];
    }
    $_SESSION['code'] = $code; 
    echo  $code;
    là j'ai un message d'erreur sous forme d'image :
    l'image "http://http://localhost/captcha/captcha.php ne peut étre affichée car elle contient des erreurs.

    le faite d'ajouté le header j'ai ce message!!! je me demande ou est l'erreur ?

    ensuite j'ai enlevé le header et avec mise a jour du 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
     
    // Script pour générer un captcha
    session_start();
     
    // creation de chaine de caractere
    $liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $code = '';
    while (strlen($code) != 6) 
    {
     $code.= $liste [rand (0,34)];
    }
    $_SESSION['code'] = $code; 
    echo  $code;  
     
    $image = imagecreatetruecolor(170,60);
    $font = 'arial.ttf';
    $noir = imagecolorallocate($image, 0, 0, 0);
    $blanc = imagecolorallocate($image, 255, 255, 255);
    $color = imagecolorallocate($image,255,10,10);
     
    imagefilledrectangle($image,0,0,200,100,$blanc);
    imagettftext ($image,30,5,10,40,$color,$font,$code); 
     
    //header ("content-type: image/png"); // desactivation du header ( generation d'erreur sous forme d'image).
    echo $code;
    imagepng($image);
     
    // Fin du script
    a cette étape j'ai deux erreurs:
    la font n'est pas reconnu.
    est le header génère un message d’erreur sous forme d'image.
    a noter que la gd2 est activé , FreeType Version 2.4.3

  13. #13
    Invité
    Invité(e)
    Par défaut
    Désolée,
    Abandon par jet de l'éponge !
    Un coup ça marche, l'autre coup ça ne marche plus
    Tu rajoutes une fonte comme si le fichier fonte était dans la racine du site...
    Bref tu te moques de nous

    Ouvres un autre sujet, car le sujet de départ je t'ais dis l'avoir testé, et ça marchait.Et je t'ais donné les raisons de l'echec de départ !
    Tu as reconnu avoir l'image !

    A une autre fois...
    Christele

  14. #14
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ;christele:
    Abandon par jet de l'éponge !
    c'est pas dans mes habitudes.
    Tu rajoutes une fonte comme si le fichier fonte était dans la racine du site...
    je suis en apprentissage ( autoformation en site web dynamique).
    Bref tu te moques de nous

    Ouvres un autre sujet, car le sujet de départ je t'ais dis l'avoir testé, et ça marchait.Et je t'ai donné les raisons de l'echec de départ !
    peut être que j'ai pas bien compris ton message.
    Tu as reconnu avoir l'image !

    1 affichage:
    affichage
    Citation:
    �PNG  IHDRZ s��iIDATh��ے� �ɾ�/�G/�2��&qg�Y���(՟&��;8������g��*��ʡ8B�)~yV#؞���ʡ�r(��[�����c��n\I��z{2 Ox�u�FDD4׽wi7���J�y��
    ensuite intervention de RunCodePhp que je remercie de passage.

    ensuite se message:
    mais rien ne s'affiche.
    je vais revoir le code a zero. ...
    ensuite c'est ton intervention:
    .........
    Le catpcha est un probléme enfantin encore faut'il qu'il réalise une image lisible. C'est pour cette raison que les fichiers captcha.php (ou bidule.php)
    ne font que générer une image sans envoyer aucun header de texte !
    Bien sur il stoquent le code en SESSION
    Tel que ton PHP verif_code_gen.php est écris, lorsque je l'execute avec une image a moi , c'est parfait et le code est bien incruste !

    Alors
    1) tu as compris (j'ais lue ça) que seul le SRC de IMG appelle ce php
    2) que ton image doit étre un PNG valide !
    3) ton contrôle doit se faire avant de réafficher la saisie, si non,
    le php captcha change le code inscrit en SESSION
    l'affichage se fait sur la même page avec succé a chaque rafraichissement de la page.
    ca concerne la chaine de caractère est non pas le captcha graphique Ok.

    cette fois si j'ai ajouté le header
    là j'ai un message d'erreur sous forme d'image :
    l'image "http://http://localhost/captcha/captcha.php ne peut étre affichée car elle contient des erreurs.
    enfin comme il a mentionné RunCodePhp ( faire le fonctionnel...) : la chaine de caractère s'affiche normalement dans la page captcha.php mais une fois le header ajouté là le message d'erreur toute une phrase affiché en image.

    voila c'est toute l'histoire d'un débutant et le captcha.

    a force de forger on devient forgeront.
    merci christele

  15. #15
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ; voila j'ai vue un tuto video qui marche impeccablement dont j'ai recopie le code mot par mot:
    fichier captcha.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
     
    <?php
    // On crée la session avant tout
    session_start();
     
    $captcha='';
    for ($x=0;$x< 5 ; $x++)
    {
    $captcha .= chr(rand(97,122));
    }
    echo $captcha;
     $session['captcha_code'] = $captcha; // ma ligne pour voir si la chaine est generée 
    $dir= 'fonts/'; // dossier ou la police est déposée
    $image=imagecreatetruecolor(170,60);
     
    $black=imagecolorallocate($image,0,0,0);
    $color=imagecolorallocate($image,255,10,10); // rouge du texte
    $white=imagecolorallocate($image,255,255,255);
     
    imagefilledrectangle($image,0,0,200,100,$white);
    imagettftext($image,30,5,10,40,$color,$dir."RIKY2vamp.ttf",$session['captcha_code']);
     
     // Là, on définit le header de la page pour la transformer en image
    header ("content-type: image/png");
    imagepng($image); 
    ?>
    l'auteur affiche le captcha dans la page captcha.php.

    maintenant sa na rien avoir de mon implémentation c'est du copie coller.

    essayé ce code.

    pour moi il affiche un message d'erreur sous forme de phrase , cette derniere est affiché en image comme ci-dessous.
    l'image "http://http://localhost/captcha/captcha.php ne peut étre affichée car elle contient des erreurs.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Pour ma part je t'ais dit avoir abandonné par jet de l'éponge
    Tu es vraiment trop paresseux, dans ce sujet TOUT t'a été expliqué en détail,
    pa exemple as tu dans ton répertoire fonts/RIKY2vamp.ttf

  17. #17
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    Re; christel:
    08 posts et encore pour un paresseux c'est trop.
    bien sur la font existe dans le dossier fonts .
    je répète que je suis dans le fonctionnel ( affichage du captcha graphique dans la même page captcha.php).
    le code ci-dessous fonctionne jusqu'à echo $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
     
    // On crée la session avant tout
    session_start();
     
    $captcha='';
    for ($x=0;$x< 5 ; $x++)
    {
    $captcha .= chr(rand(97,122));
    }
    $session['captcha_code'] = $captcha; // ma ligne pour voir si la chaine est generée 
    $dir= 'fonts/'; // dossier ou la font est déposée
     
    $image=imagecreatetruecolor(170,60);
    $black=imagecolorallocate($image,0,0,0);
    $color=imagecolorallocate($image,255,10,10); // rouge du texte
    $white=imagecolorallocate($image,255,255,255);
     
    imagefilledrectangle($image,0,0,200,100,$white);
    imagettftext($image,30,5,10,40,$color,$dir."TIMESS__.ttf",$session['captcha_code']);
    echo $captcha; // code fonctionne jusque là
     
     // c'est cette partie qui pose problème 
    Là, on définit le header de la page pour la transformer en image
    /*Header ('Content-type: image/png'); 
    imagepng($image);   */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // c'est cette partie qui pose problème 
    Là, on définit le header de la page pour la transformer en image
    /*Header ('Content-type: image/png'); 
    imagepng($image);   */
    quelqu'un peut m’expliquai pour cette partie pose problème ? (

  18. #18
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    Voila ; j'ai activé php_exif.dll est mais rien de nouveau.

    ce que j'ai constaté : on dirai que l'erreur est garder en cache est empache les modifications , j'ai nettoyer le cache sous firefox (outils/supprimer....) rien de spéciale.
    alors j'ai supprimer le fichier et crée un nouveau fichier avec le même nom.
    bref enfin j'aurai bien aimer trouver l'origine de l'erreur du premier code objet de ce poste mais helas. !!!!!

    j'ai utilisé cette fonction qui est très réussi et sa marche nikel.
    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
     
    session_start();
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
    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"); 
    $rand = _generateRandom(3);
    $_SESSION['captcha'] = $rand;
    ImageString($im, 5, 2, 2, $rand[0]." ".$rand[1]." ".$rand[2]." ", ImageColorAllocate ($im, 0, 0, 0));
    $rand = _generateRandom(3);
    ImageString($im, 5, 2, 2, " ".$rand[0]." ".$rand[1]." ".$rand[2], ImageColorAllocate ($im, 255, 0, 0));
    Header ('Content-type: image/jpeg');
    imagejpeg($im,NULL,100);
    ImageDestroy($im);

    sous reserve:
    d’utiliser la fonction imagettftext(),qui prend d’autres paramètres de d'istorsion intéressants.
    version audible du CAPTCHA, (pour une population réservée).
    et n'oublie pas que le script est publié...
    je suis preneur de toute autres solutions

  19. #19
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    ce que j'ai constaté : on dirai que l'erreur est garder en cache est empache les modifications
    Il y a des chances, car le nom de l'image (dans le src de la balise img) est le même.

    Peut être faudrait il rajouter les mêmes entêtes dans le index.php pour éviter que le navigateur conserve cette image en cache.
    Faut voir.

    Un autre moyen pour contourner ce problème, pour conserver les mise en cache de cette page index.php mais pas l'image, c'est de rajouter un paramètre aléatoire (un peu comme le code captcha) dans l'URL de l'image.
    Avoir des URL comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <img src="/mod/captcha.php?aleatoire=123456" alt="Texte de l'image" />
    la fois suivante :
    <img src="/mod/captcha.php?aleatoire=456789" alt="Texte de l'image" />
    ... etc ...
    Faut voir.

  20. #20
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; RunCodePhp et oui c'était le cache
    Il y a des chances, car le nom de l'image (dans le src de la balise img) est le même.
    et voila mon premier script fonctionne impeccablement.

    alors christele si tu fait un tour tu comprendra , je te remercie pour ta disponibilité.
    RunCodePhp: merci

+ 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