Un problème, une question ?

Lancer un fil!
1

Rafraichissement captcha sur Firefox

le 23-02-2015 à 22:29 #
Bonsoir à tous,

Pour commencer, je ne savais pas trop dans quelle catégorie mettre ce sujet (entre PHP et JavaScript), puisque j'utilise les deux.
J'ai conçu un site de vente en ligne pour un projet pour les cours, et j'ai été confronté à un problème que je n'ai toujours pas résolu : Lorsqu'un utilisateur se crée un compte, on vérifie que ce n'est pas un robot, et on lui fait écrire pour cela le contenu d'un captcha. Il y a à côté de ça un bouton qui permet de rafraichir le captcha (En JavaScript, de façon à ce que la page ne se recharge pas entièrement).

Mon problème : Cela fonctionne parfaitement... Sous Google Chrome ! Alors que sur Firefox, rien ne se passe. Voici mes différents codes :

Bouton de refresh :
<img id="refresh" src="images/refresh<?php echo affiche("fr","en"); ?>.png" onclick="refreshCaptcha(false, true);" style="cursor: pointer;" width="120" />



La fonction "affiche" est une fonction que j'ai créée, qui permet la traduction du site dans différentes langues. Le clic de l'image appelle donc la fonction "refreshCaptcha" qui prend en compte différents paramètres pas très intéressants pour mon problème.

Fonction JavaScript :
function refreshCaptcha(retour, valide) {

var captcha = document.getElementById('captcha');
var tfCaptcha = document.getElementById('captcha_res');
var verif = document.getElementById('comment_captcha');

captcha.src = 'captcha.php';
tfCaptcha.text = '';
if (retour) {
verif.style.display = 'inline';
verif.src = 'images/form_' + ((!valide) ? 'pas_' : '') + 'ok.png';
} else {
verif.style.display = 'none';
}
}


La variable "captcha" est donc l'image à modifier, et on change son src en ça :
<?php    session_start();

$size = 8;
$caracteres = "azertyupqsdfghjkmwxcvbnAZERTYUPQSDFGHJKLMWXCVBN23456789";
$text = "";
$max = strlen($caracteres);
for ($i = 0; $i < $size; $i++) {
$text .= $caracteres[rand()%$max];
}
// Génère 8 caractères rangs d'hommes parmi la liste


// Création de la session
$_SESSION['captcha'] = $text;

// Création de l'image
$img = imagecreatetruecolor(173, 40); // Dimensions du fond (couleur)
$fill = imagecolorallocate($img, rand(200,255), rand(200,255), rand(200,255)); // Couleur du fond
imagefilledrectangle($img, 0, 0, 173, 40, $fill); // Création du fond de l'image

// Création du texte
$text_color = imagecolorallocate($img, rand()%155, rand()%155, rand()%155); // Couleur du texte
$font = './font/disinteg.ttf'; // Police d'écriture (téléchargée et ajoutée dans les fichiers)
imagettftext($img, rand(20,25), rand(-3,3), rand(5,35), 30, $text_color, $font, $_SESSION['captcha']); // Ajout de l'écriture (image, taille police, inclinaison, x, y, police, session)

// rediriger vers une image
header("Content-type: image/jpeg"); // Définir en tant qu'image
imagejpeg($img); // Création de l'image (Ce sera cette image qui sera sélectionnée du coup)
imagedestroy($img); // Destruction de l'image pour pas la garder dans les fichiers
?>


J'avoue que je suis un peu perdu... Merci de votre aide !

Re: Rafraichissement captcha sur Firefox
le 25-02-2015 à 23:03 #
Salut,

Le code que tu donnes est incomplet, comme je le comprends lorsque l'on cliques sur ton bouton, retour étant à false, un élément dont l'id est `comment_captcha` doit disparaitre et ''captcha_res'' est vidé de son texte. C'est tout ?

Il faudrait soit déboguer le code en temps réel (Firebug), soit simplifier le code jusqu'à isoler ce qui bloque.

La génération d'images peut être très casse-gueule. Mettons que tu aies un message d'erreur émis par PHP, le protocole HTTP n'est alors plus respecté, j'ai eu un cas où cela faisait carrément planter le cache de Chrome, provoquant de gros bugs à chaque visite jusqu'à ce qu'on le vide!

Ben
Re: Rafraichissement captcha sur Firefox
le 26-02-2015 à 14:00 #
Merci d'avoir répondu :)

En effet, cela manque de précision. L'élément dont l'id est "comment_captcha" est une information qui dit à l'utilisateur si ce qu'il a entré est valide. "captcha_res" est l'input de texte que l'utilisateur doit prendre pour écrire le contenu du captcha. Donc lorsque l'utilisateur clique sur refresh, on retire tout commentaire et vide le texte pour ne pas avoir à le supprimer "à la main".

J'ai vu qu'on pouvait utiliser Firebug, je l'avais installé, mais j'avoue ne pas vraiment avoir compris le fonctionnement...




Ces discussions pourraient vous intéresser également:


Problemes avec Hotmail sur Firefox
Mon Site ne s affiche pas bien avec firefox
<video autoplay> Problème sous Firefox ?
Erreur firefox quand je veux accéder à Hotmail !