MyBB.support, le portail francophone de MyBB

Version complète : Problème d'apostrophe et de captcha
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour,

Je viens d'installer pour le première fois MyBB sur un serveur (mutualisé), avec les fichiers de langue en français.
Le dépucelage s'est globalement bien passé, la procédure d'installation est sympa.

Je cherche maintenant à enregistrer un nouvel utilisateur (lien S'enregistrer) et suis donc branché sur la page 'member.php'.
Et là, ça va plus, pour deux raisons :

1. Notre langue utilise beaucoup les apostrophes et quand, dans le code Javascript (à partir de la ligne 311), des phrases françaises sont encadrées de simples quotes (ou apostrophes) également, ça provoque un message d'erreur Javascript et un arrêt de l'analyse du code.
Suis très étonné que ce problème n'aie pas encore été soulevé.

2. Pour une raison que je ne m'explique absolument pas (j'ai cru que ça venait du blème précédent et j'ai donc modifié en conséquence le fichier 'member.lang.php' en rajoutant des '\' devant les apostrophes - ce qui a bien supprimé les erreurs Javascript), la page s'affiche correctement mais l'image du captcha ne s'affiche toujours qu'à moitié (moitié haute) et mon navigateur se bloque là avec, dans la ligne de statut un 'transfert des données depuis...' qui ne bouge plus.
Vrai aussi bien avec Firefox qu'avec IE.

Est-ce grave, docteur ?

Merci d'avance pour vos lumières.
Salut,

1. Effectivement c'est une news : jamais entendu parler de ce problème depuis des années que j'utilise et traduis MyBB !!!
De quelle ligne 311 parles-tu ? Dans quel fichier ?...

2. Il n'y a pas à "échapper" les apostrophes dans member.lang.php !
Les chaînes sont encadrées par des guillemets doubles !
ex : $l['nav_register'] = "S'enregistrer";
Le code du script MyBB s'en occupera automatiquement.

Il faudrait un '\' dans ce cas par exemple :
ex : $l['nav_register'] = 'S\'enregistrer';

En clair tu veux dire quoi ? Que tu ne peux pas enregistrer un utilisateur dont le login contient une apostrophe ?
Je ne vois pas le rapport avec le non-affichage du captcha !?

PS : pas eu de petit souci lors du transfert FTP ?
Essaie de réupper tout et de lancer un upgrade...
Je veux simplement enregistrer un utilisateur.
Qu'il y ait une apostrophe ou pas dans son nom n'était pas encore le problème puisque la page ne s'affiche pas complètement (le captcha tronqué) et que FireBug me signale une erreur Javascript.

J'en suis simplement à faire afficher correctement la page d'enregistrement, à savoir, comme indiqué, la page 'member.php' (deuxième phase, après avoir juré sur l'honneur).

Voici le code Javascript en bas de la page (après la ligne 300 dans le source généré tel qu'accessible dans mon navigateur), juste après la balise de fermeture de la <form> :

Code :
<script type="text/javascript">
<!--
    regValidator = new FormValidator('registration_form');
    regValidator.register('username', 'notEmpty', {failure_message:'Vous devez entrer un nom d\'utilisateur'});
    regValidator.register('email', 'regexp', {match_field:'email2', regexp:'^([a-zA-Z0-9_\.\+\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$', failure_message:'Vous devez entrer une adresse email valide'});
    regValidator.register('email2', 'matches', {match_field:'email', status_field:'email_status', failure_message:'Vous devez entrer à nouveau la même adresse email'});
    regValidator.register('referrer', 'ajax', {url:'xmlhttp.php?action=username_exists', loading_message:'Vérification de l\'existence du nom d\'utilisateur du parrain.'});
    regValidator.register('imagestring', 'ajax', {url:'xmlhttp.php?action=validate_captcha', extra_body: 'imagehash', loading_message:'Vérification de la saisie du code correct correspondant à l\'image.', failure_message:'Vous devez entrer le texte de l\'image ci-dessus'});
    regValidator.register('password', 'length', {match_field:'password2', min: 6, failure_message:'Votre mot de passe doit avoir une longueur de 6 caractères ou plus'});
    regValidator.register('password2', 'matches', {match_field:'password', status_field:'password_status', failure_message:'Les mots de passe que vous avez entrés doivent être identiques'});
    regValidator.register('username', 'length', {min: 3, max: 30, failure_message:'Le nom d\'utilisateur doit avoir une longueur entre 3 et 30 caractères'});

    regValidator.register('username', 'ajax', {url:'xmlhttp.php?action=username_availability', loading_message:'Vérification de la disponibilité du nom d\'utilisateur'}); // needs to be last
// -->
</script>

Comme tu peux le constater, pas de double quotes, mais des quotes simples.
Pour moi, vu le source obtenu, je ne peux pas échapper à l'échappement (!) si je ne veux pas avoir d'erreur Javascript.

Je ne voyais pas vraiment le lien avec le blème du captcha non plus, mais les mystères de l'informatique étant ce qu'ils sont, je me suis dit qu'il fallait quand même régler ce pb Javascript d'abord.


J'ai suivi partiellement ton conseil : j'ai retéléversé uniquement les fichiers de la racine. Le captcha s'affiche correctement, maintenant.
Assez incompréhensible. Mais bon, puisque ça marche... je ne vais pas faire la fine bouche.

Maintenant, faut que je comprenne pourquoi le code généré chez moi n'est pas le même que sur mybb.fr pour cette page.
Sur un forum je dirais "classique"' on a effectivement :
Code :
<script type="text/javascript">
<!--
    regValidator = new FormValidator('registration_form');
    regValidator.register('username', 'notEmpty', {failure_message:'Vous devez entrer un nom d'utilisateur'});
    regValidator.register('email', 'regexp', {match_field:'email2', regexp:'^([a-zA-Z0-9_\.\+\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$', failure_message:'Vous devez entrer une adresse email valide'});
    regValidator.register('email2', 'matches', {match_field:'email', status_field:'email_status', failure_message:'Vous devez entrer à nouveau la même adresse email'});
    regValidator.register('referrer', 'ajax', {url:'xmlhttp.php?action=username_exists', loading_message:'Vérification de l'existence du nom d'utilisateur du parrain.'});
    regValidator.register('imagestring', 'ajax', {url:'xmlhttp.php?action=validate_captcha', extra_body: 'imagehash', loading_message:'Vérification de la saisie du code correct correspondant à l'image.', failure_message:'Vous devez entrer le texte de l'image ci-dessus'});
    regValidator.register('password', 'length', {match_field:'password2', min: 6, failure_message:'Votre mot de passe doit avoir une longueur de 6 caractères ou plus'});
    regValidator.register('password2', 'matches', {match_field:'password', status_field:'password_status', failure_message:'Les mots de passe que vous avez entrés doivent être identiques'});
    regValidator.register('username', 'length', {min: 3, max: 30, failure_message:'Le nom d'utilisateur doit avoir une longueur entre 3 et 30 caractères'});

    regValidator.register('username', 'ajax', {url:'xmlhttp.php?action=username_availability', loading_message:'Vérification de la disponibilité du nom d'utilisateur'}); // needs to be last
// -->
</script>

Ce qui est normal au vu du code (dans mybb_theme.xml) :
Code :
<script type="text/javascript">
<!--
    regValidator = new FormValidator('registration_form');
    regValidator.register('username', 'notEmpty', {failure_message:'{$lang->js_validator_no_username}'});
    regValidator.register('email', 'regexp', {match_field:'email2', regexp:'^([a-zA-Z0-9_\.\+\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$', failure_message:'{$lang->js_validator_invalid_email}'});
    regValidator.register('email2', 'matches', {match_field:'email', status_field:'email_status', failure_message:'{$lang->js_validator_email_match}'});
{$validator_extra}
    regValidator.register('username', 'ajax', {url:'xmlhttp.php?action=username_availability', loading_message:'{$lang->js_validator_checking_username}'}); // needs to be last
// -->
</script>
Il aurait fallu y mettre des guillements doubles !

Effectivement de cette façon, les ' ne sont pas échappés !

Et pourtant, ça ne pose curieusement aucun problème !
Sans doute parce que les popups correspondants ne s'affichent pas ?

Les erreurs ou oublis de saisie sont recensés en rouge sur fond jaune en haut de la page, simplement.

Tu as des popups qui buguent ?
spyto a écrit :Tu as des popups qui buguent ?

Avec le source d'origine (sans échapper les apostrophes des textes français), ça ne risque pas puisque l'analyse du Javascript s'arrête à la première erreur rencontrée, c'est-à-dire à la première ligne du script.

Et lorsque je fais des saisies volontairement incorrectes, les erreurs s'affichent dans une zone rectangulaire dans la page, au-dessus du formulaire, après un aller-retour serveur, semble-t-il ; pas de boîte de dialogue Javascript.
Mais je n'ai pas pris le temps de regarder et comprendre en détail le code pour savoir ce qu'il est censé faire.

Je trouve quand même étrange que Firebug sous Firefox ou bien Debugbar sous IE signalent cette erreur et que personne ne l'ait encore constatée.
gédéon a écrit :Avec le source d'origine (sans échapper les apostrophes des textes français), ça ne risque pas puisque l'analyse du Javascript s'arrête à la première erreur rencontrée, c'est-à-dire à la première ligne du script.
Oui, je suis d'accord, mais ça ne provoque aucun bug d'affichage, de message d'erreur etc.?
Citation :Et lorsque je fais des saisies volontairement incorrectes, les erreurs s'affichent dans une zone rectangulaire dans la page, au-dessus du formulaire, après un aller-retour serveur, semble-t-il ; pas de boîte de dialogue Javascript.
Oui, voilà, moi c'est pareil, les erreurs sont affichées en rouge sur fond jaune en haut du formulaire.

J'ai fait une recherche de "regValidator" dans l'ensemble des fichiers. Les seules occurrences sont celles du fichier 'mybb_theme.xml'.
Ce qui veut dire que ce code n'est jamais utilisé d'où le fait que personne ne l'a jamais signalé !
Citation :Mais je n'ai pas pris le temps de regarder et comprendre en détail le code pour savoir ce qu'il est censé faire.
A mon avis, c'est quelque chose qui a été testé sur des moutures en cours de développement en interne sur mybboard et c'est resté par erreur.
Sans doute une ébauche de validateur Javascript en temps réel qui sera utilisé dans la prochaine distribution.
C'est un mécanisme qui existe dans certains forums : un signalement de l'erreur immédiat, sans aller-retour sur le serveur pour analyse des données saisies.
Avantages : signalement rapide des erreurs, inconvénient : recours à Javascript. PHP ne peut pas le faire, il doit attendre la soumission du formulaire.
Citation :Je trouve quand même étrange que Firebug sous Firefox ou bien Debugbar sous IE signalent cette erreur et que personne ne l'ait encore constatée.
Il y a incontestablement une erreur de codage, et que Firebug la signale, rien de plus logique.

Il faudra surveiller ce truc lors de l'utilisation effective de ce code lors de la prochaine version, sans aucun doute.
Peut-être même déjà sur mybbboard leur suggérer de remplacer les guillemets simples par des guillemets doubles dans cette partie de mybb_theme.xml ?
spyto a écrit :C'est un mécanisme qui existe dans certains forums...

Pas que dans les forums : quand je développe une appli web, que ce soit en PHP ou en ASP.Net, je fais un max de contrôles côté JS pour éviter justement les allers-retours inutiles. Ce qui ne m'empêche pas de les refaire côté serveur, des fois que JS serait désactivé côté client.

spyto a écrit :Peut-être même déjà sur mybbboard leur suggérer de remplacer les guillemets simples par des guillemets doubles dans cette partie de mybb_theme.xml ?

Ce sera fait demain !
Tiens, chose plus ou moins marrante, je veux m'enregistrer sur le forum de mybboard, histoire de signaler la chose indiquée plus haut, et je tombe sur le même problème que ce que j'avais sur mon site avant d'y retéléverser les sources : le captcha ne s'affiche qu'à moitié (partie haute).
Résultat, il est illisible et je ne peux pas m'inscrire... Sad

Et ce n'est pas lié à mon navigateur ou ma liaison Internet, puisque sur mon site ça marche toujours et que le problème est identique avec IE, Safari ou Opera (j'utilise Firefox normalement).
Là j'avoue que c'est assez incompréhensible !!!

A mon avis, il y a zombie sur ton ordi !
Oui, je sais, tu utilises 3 navigateurs différents, mais il y a des DLL système de Windows qui sont utilisées par les trois, comme par exemple mshtml.dll et consorts. Il suffit que l'une de ces bibliothèques soit corrompue pour entraîner un dysfonctionnemen global.

Si c'était un problème "global", il aurait été signalé sur mybbboard : 18971 utilisateurs enregistrés quand même !!!

Tu es sous quel OS ?
Si c'est XP, tu peux lancer en ligne de commande un :
sfc /scannow
pour tenter une réparation des fichiers système.

J'ai le sentiment que le souci est chez toi... mais je peux me tromper...

@+
Citation :J'ai le sentiment que le souci est chez toi...

Je peux effectivement le soupçonner, à défaut de l'admettre aisément. Mais comment expliques-tu que, sur mon site, le captcha s'affiche correctement ?

Je suis quelque peu dubitacheveu...

Pour l'OS, c'est effectivement XP avec le SP3.

Edit :
Après vérification, le problème (très récent, pourtant) doit bien être chez moi.
En faisant une recherche web sur "sfc /scannow" que je ne connaissais pas, je suis tombé sur une page pleine d'images qui ne s'affichent également qu'à moitié.

Je vais donc suivre ton conseil, mais après avoir fait une image de ma partition système.
Ça devra donc attendre un peu.

Edit [2] :
Et pourtant, je viens de visiter plusieurs autres sites sur lesquels les images s'affichent correctement.
C'est vraiment 13 et trange...
Mais après vérif, il semble que le problème se limite aux images PNG, pas les GIF et JPEG.
Inutile de faire une image de ta partition, tu ne perdras rien ! Tu ne risques rien !
Je l'ai fait X fois...

La procédure se contente de comparer les fichiers système présents sur ton DD et ceux d'origine sur le CD pour éventuellement remettre les originaux.

La seule chose que tu risques, c'est que ça ne résolve pas ton souci ! Wink

Le fait que ça ne t'affiche pas complètement les images ailleurs que pour le captcha prouve que le pb n'est pas lié à MyBB.
(je suppose que tu parles de cette page : http://www.pcentraide.com/index.php?showtopic=243 où je vois parfaitement toutes les images.)

Tu es sûr de ta connexion ? Firefox, parfois, quand ça rame un peu trop, abandonne le téléchargement des images et t'affiche allègrement "Terminé" dans la barre d'état !!

Tu as essayé de rebooter ta box ?
Citation :Inutile de faire une image de ta partition, tu ne perdras rien ! Tu ne risques rien !
Ça fait un moment que je reporte le fait d'en faire une et que je crains les soucis m'imposant un retour en arrière lointain. C'est une bonne occasion.

Citation :La procédure se contente de comparer les fichiers système présents sur ton DD et ceux d'origine sur le CD pour éventuellement remettre les originaux.
Sauf que les originaux sont de niveau SP1 (sur mon CD) et mélanger des fichiers du SP1 avec d'autres du SP3, sait pas ce que ça peut donner. T'as un avis ?

Citation :je suppose que tu parles de cette page : http://www.pcentraide.com/index.php?showtopic=243
Gagné ! Tu as le droit de revenir en deuxième semaine... Wink

Citation :Tu es sûr de ta connexion ?...
Ça se produit aussi bien à mon boulot (maintenant) que via ma box (hier soir). Et autant avec Firefox qu'avec les autres navigateurs installés sur ma machine.
D'autre part, dans ce cas, je n'ai jamais le 'Terminé' dans la ligne de statut, le navigateur est toujours en attente de quelque chose sur le site (et ça ne s'arrête jamais jusqu'à ce que je change de page ou ferme l'onglet/le navigateur).
gédéon a écrit :Sauf que les originaux sont de niveau SP1 (sur mon CD) et mélanger des fichiers du SP1 avec d'autres du SP3, sait pas ce que ça peut donner. T'as un avis ?
Non, là, ça craint un peu sans doute...
Ou alors, puisque tu as le CD SP1, cela veut-il dire que tu as téléchargé et fait le maj vers SP3 ? Auquel cas tu pourrais tenter de désinstaller le SP3 (il me semble que c'est possible) avant de lancer sfc ?
Mais bon, la désinstallation sera-t-elle clean ? Je ne sais pas.
Donc désinstaller le SP3, exécuter sfc puis réinstaller le SP3 ?
J'avoue que c'est peut-être risqué !

Pourtant, d'autre part, si tu fais une image de ta partition actuelle, te servira-t-elle à quelque chose ?
En effet tu y incluras les éventuels problèmes attachés à ton système ! Problèmes que tu restaureras si tu restaures cette image !
C'est un peu tourner en rond ! Smile

Sans doute vaudrait-il mieux (dans l'ordre de préférence) :
- trouver d'où vient le pb et le corriger
- trouver un CD version SP3, mais sfc l'acceptera-t-il ?
- sauver tes données et reformater - dernier recours évidemment !

Il y a aussi une autre procédure pour réparer les fichiers système, c'est d'installer XP au boot et de choisir "Réparer" au deuxième écran (pas au premier, tu te retrouverais en mode console).
Mais là encore, subsiste le conflit CD SP1 et système actuel SP3 !

Bref, je ne sais pas trop.

Mais là, on dérive complètement par rapport au post initial, plus rien à voir avec MyBB.

Citation :Ça se produit aussi bien à mon boulot (maintenant) que via ma box (hier soir). Et autant avec Firefox qu'avec les autres navigateurs installés sur ma machine.
D'autre part, dans ce cas, je n'ai jamais le 'Terminé' dans la ligne de statut, le navigateur est toujours en attente de quelque chose sur le site (et ça ne s'arrête jamais jusqu'à ce que je change de page ou ferme l'onglet/le navigateur).

Avec le même PC, ou avec deux PC différents ?
Vraiment bizarre ! Jamais vu ce pb !
 Utilitaire de traduction fourni par Regentronique