Partage
  • Partager sur Facebook
  • Partager sur Twitter

Refresh un captcha

    13 juillet 2019 à 19:52:15

    Bonjour, je viens vers vous car j'ai créé un captcha et maintenant je souhaite faire fonctionner un bouton refresh.

    Ce bouton à tout simplement pour but d'avoir un code de sécurité différent en cas de difficulté de lecture.

    Voici mon code, tout est sur la même page:

    <?php
    if(isset($get['captcha']) AND empty($get['captcha'])) {
    	if(isset($get['newone']) AND empty($get['newone'])) {
    		header('Content-type: image/png');
    
    		$_img = imagecreatefrompng('include/images/fond_verif_img.png');
    
    		$arriere = imagecolorallocate($_img, 0, 0, 0);
    		$avant = imagecolorallocate($_img, 255, 255, 255);
    
    		$length = 5;
    		$chn = "2346789azertyuopqsdfghjkmwxcvbnAZERTYUPQDFGHJKMWXCVBN";
    		$_SESSION['captcha'] = substr(str_shuffle(str_repeat($chn, $length)), 0, $length);
    
    		imagestring($_img, 5, 18, 8, $_SESSION['captcha'], $avant);
    
    		imagepng($_img);
    	} else {
    		header('Content-type: image/png');
    
    		$_img = imagecreatefrompng('include/images/fond_verif_img.png');
    
    		$arriere = imagecolorallocate($_img, 0, 0, 0);
    		$avant = imagecolorallocate($_img, 255, 255, 255);
    
    		$length = 5;
    		$chn = "2346789azertyuopqsdfghjkmwxcvbnAZERTYUPQDFGHJKMWXCVBN";
    		$_SESSION['captcha'] = substr(str_shuffle(str_repeat($chn, $length)), 0, $length);
    
    		imagestring($_img, 5, 18, 8, $_SESSION['captcha'], $avant);
    
    		imagepng($_img);
    	}
    } else {
    ?>

    (en fin de page j'ai bien fermé avec <?php } ?>)

    Le HTML:

    <label for="captcha">Code de sécurité: </label>
    <br />							
    <span class="imgcaptcha">
    	<img class="captcha" src="<?= $bhref ?>logon.php?captcha" width="125px" height="42px" />
    </span>
    
    <span class="refresh-captcha btn btn-default">
    	<i class="fa fa-refresh"></i>
    </span>

    Et le JS:

    $(document).ready(function() {
    	$('.refresh-captcha').on('click', function() {
    		$('.refresh-captcha .fa.fa-refresh').attr('class', 'refresh-captcha fa fa-refresh fa-spin');
    		$('.refresh-captcha').attr('disabled', 'true');
    		$('.captcha').attr('src', '<?= $bhref ?>include/images/fond_verif_img.png');
    		var refreshC = setTimeout(function () {
    			$('.captcha').attr('src', '<?= $bhref ?>logon.php?captcha&newone');
    			$('.refresh-captcha').removeAttr('disabled');
    			$('.refresh-captcha .fa.fa-refresh').attr('class', 'refresh-captcha fa fa-refresh');
    		}, 1000);
    	});
    });

    Voici un screenshot pour vous donner une idée du résultat:

    Donc là quand je clique j'affiche juste fond_verif_img.png qui est le cadrillage de fond, afin de charger un nouveau code, puis je réaffiche logon.php?captcha&newone

    J'ai réussi à faire un changement en mettant juste captcha dans la balise img de base, puis captcha et newone dans le js qui est censé reload le code de sécurité.

    Donc là quand je clique sur le bouton ce n'est plus HD3oB mais un autre code.

    C'est donc ce que je veux, MAIS non seulement cela me force à mettre le code de l'image 2 fois mais en plus quand je reclique, là ça reste sur le second code.

    Donc au final ça revient un peu au même.

    (dans le setTimeout j'ai mis 1 seconde pour être sur que l'image charge bien et faire une animation)

    Je sais pas si j'explique bien donc je rappelle mon objectif:

    Lorsque je clique sur le bouton refresh, obtenir un nouveau code et ce peu importe le nombre de fois que je clique, et pas juste une seule fois.

    Merci d'avoir lu, en espérant que vous m'aiderez.



    • Partager sur Facebook
    • Partager sur Twitter
      18 juillet 2019 à 3:04:38

      Je viens UP, je sais plus si c'est autorisé ou pas, mais j'ai toujours besoin que l'on m'aide svp ^^'
      • Partager sur Facebook
      • Partager sur Twitter
        18 juillet 2019 à 5:30:23

        Bonjour.

        D'où sort la variable $get ?

        En plus de ça, les codes de la ligne 4 à 17 et de 19 à 32 sont exactement les même.

        Donc quel est l'intérêt de cette condition ?

        -
        Edité par Lartak 18 juillet 2019 à 5:30:51

        • Partager sur Facebook
        • Partager sur Twitter

        Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

          20 juillet 2019 à 21:10:12

          La variable $get est la variable $_GET mais sécurisée.

          L'intérêt de cette condition est qu'elle me permet de rafraîchir au moins une fois.. Je l'ai précisé: "C'est donc ce que je veux, MAIS non seulement cela me force à mettre le code de l'image 2 fois mais en plus quand je reclique, là ça reste sur le second code."

          • Partager sur Facebook
          • Partager sur Twitter
            20 juillet 2019 à 23:07:59

            Balatharas a écrit:

            La variable $get est la variable $_GET mais sécurisée.


            Ah bon ?

            $get serait une variable Superglobale et qui correspondrait à la variable $_GET mais en sécurisée ?

            Depuis quand et c'est quoi pour toi sécurisée ?

            Balatharas a écrit:

            L'intérêt de cette condition est qu'elle me permet de rafraîchir au moins une fois.. Je l'ai précisé: "C'est donc ce que je veux, MAIS non seulement cela me force à mettre le code de l'image 2 fois mais en plus quand je reclique, là ça reste sur le second code."

            Ceci n'a aucun sens, autant supprimer la condition:

            if(isset($get['newone']) AND empty($get['newone']))

            Et avoir le code dans la première condition, sans le répéter, ça reviendra au même.

            -
            Edité par Lartak 20 juillet 2019 à 23:15:53

            • Partager sur Facebook
            • Partager sur Twitter

            Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

              21 juillet 2019 à 14:47:54

              Je crois que ta rien compris, où est-ce que j'ai dis que $get était une superglobale ? C'est moi qui l'ai créée avec un foreach sur $_GET

              A ton avis qu'est ce que je viens faire ici ?

              "

              Ceci n'a aucun sens, autant supprimer la condition:

              if(isset($get['newone']) AND empty($get['newone']))

              Et avoir le code dans la première condition, sans le répéter, ça reviendra au même.

              "

              Si je te dis que mettre le code deux fois me permet de créer deux codes c'est que c'est le cas, entre nous deux qui est-ce qui exécute le code déjà ?

              • Partager sur Facebook
              • Partager sur Twitter
                21 juillet 2019 à 15:00:47

                Balatharas a écrit:

                Je crois que ta rien compris, où est-ce que j'ai dis que $get était une superglobale ? C'est moi qui l'ai créée avec un foreach sur $_GET

                Dans ce cas là, pourquoi cette partie de code n'est pas dans le code que tu présente ?

                Si tu veux de l'aide il nous faut tout le code correspondant, nous ne pouvons pas le deviner.

                Balatharas a écrit:

                Si je te dis que mettre le code deux fois me permet de créer deux codes c'est que c'est le cas, entre nous deux qui est-ce qui exécute le code déjà ?

                Donc maintenant tu me prends de haut ?
                J'ai suffisamment de connaissances en PHP (contrairement à toi à priori), pour me rendre compte que ta répétition de code est totalement inutile et ne fera pas mieux fonctionner ton code que si la répétition n'existait pas.

                Par conséquent, au lieu de chercher à me faire croire que j'ai tord, analyses correctement ton code.

                • Partager sur Facebook
                • Partager sur Twitter

                Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                  21 juillet 2019 à 15:08:56

                  Non je te prend pas de haut tu cherches la petite bête là où y'en a même pas.

                  J'ai peut-être oublié de prévenir que $get = $_GET mais ça ne changera absolument rien que je donne le foreach.

                  Puisque tu le veux tant:

                  <?php
                  if(isset($_GET)) {
                  	foreach($_GET as $key => $value) {
                  		$get[$key] = trim(strip_tags(addslashes($value)));
                  	}
                  }
                  ?>

                  Je ne vois même pas avec quoi tu déduis mes connaissances en PHP qui doivent sans doute être inférieures aux tiennes mais pas nulles.

                  "J'ai suffisamment de connaissances en PHP (contrairement à toi à priori)" c'est ça que j'appelle prendre de haut parce que comme je l'ai dis c'est moi qui exécute le code et pas toi, et j'ai remarqué que lorsque le code est en une seule fois, le code du captcha ne changera pas à moins de recharger la page, même avec Ajax. Donc j'ai testé quelque chose en avançant à tâtons comme tout développeur à l'habitude de faire lorsqu'il est totalement bloqué, et j'ai mis le code en deux fois, l'ai séparé, ai appelé le premier au chargement de la page puis le deuxième avec Ajax, et oh surprise le code à changé. Mais pour la 3ème fois, cette "solution" me permet de rafraîchir le code qu'une seule fois.

                  Avant d'avancer que je fais des choses insensées, si tu lisais bien mon sujet pour voir ?

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Refresh un captcha

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown