Aller au contenu

MyPHPAnnuaire : bug dans la recherche et retour


Sujets conseillés

Posté

Hello,

Je viens d'ouvrir un annuaire, mais la fonction recherche donne un résultat plutôt étrange.

Bug n°1

si je lance la recherche "webmaster hub" voici ce que j'ai comme réponse :

Site(s) trouvé(s) : 1 à 1

  <b>Webmaster</b> <b>Hub</b> - Le Forum du <b>Webmaster</b>       

Forum <b>Webmaster</b> <b>Hub</b> - Le forum des <b>webmaster</b>s professionnels... Le premier Forum professionnel pour <b>webmaster</b> qui vous aide pour la création, l'hébergement, ... 

=> Catégorie : liens utiles 

entre le <b> et </b> je devrais avoir le mot en gras, mais ça met juste les balises.

dans le fichier fonction.php il y a la fonction function affiche_site

et j'ai trouvé la fonction qui doit correspondre à ça :

function keyword_in_bold($mots,$chaine)
//met en gras les mots cles pour les resultats du moteur de recherche
{ return eregi_replace($mots,"<b>\\0</b>",$chaine); }

mais je vois pas de balise non fermée :huh:

Une idée ?

-------------------------

Bug n°2

Si on met plus de 255 caractères pour la description du site, on a un message d'erreur et on a une phrase indiquant :

Votre description fait 303 caractères et le maximum autorisé est 255 caractères 

 <a href="javascript:history.go(-1);">retour au formulaire</a>

alors qu'on devrait avoir la possibilité de cliquer sur le lien "retour au formulaire"

=> c'est encore dans le fichier fonction.php mais je ne vois pas non plus le problème

=> mais peut-être est-ce le même soucis ?

Posté (modifié)

Salut,

Dans le premier cas, comment sont affichées les balises dans la source, en dur <b> ou <b> ?

Deuxième cas, il me semble que l'attribut maxlength permet de contrôler le nombre de caractères d'un champ texte de type <input /> ou <textarea>.

Modifié par lupucide
Posté (modifié)

Dans le onmouseover, il faudrait peut-être remplacer les balises par des entités. Dans le <span class="description_site_annuaire"> ces mêmes balises sont déjà des entités.

Modifié par lupucide
Posté

Xav, le lien dans ton dernier message n'est pas valide, tu as mis un "http//" de trop :)

Concernant ton problème, ça ne vient pas de la fonction keyword_in_bold, puisque toutes les autres balises (pas juste <b>) sont traitées comme du texte et non du code html.

A priori donc, tes deux problèmes sont liés, et seront peut-être accompagnés d'autres bugs que tu n'as pas encore remarqué dans ton annuaire. Difficile de dire d'où ça vient...

Si tu ne trouves pas, envoie-moi par MP ton fichier function.php, que je compare avec celui d'un annuaire qui n'a pas ce problème ;)

A+

Posté

Ton script d'annuaire utilise une base de données MySql ? Si oui, il y a possibilité de paramétrer la longueur du champ "description" en lui attribuant, par exemple, la valeur fulltext si ma mémoire est bonne.

Enfin je ne suis pas spécialiste en BDD mais sur MéTéOU j'ai modifié la base pour un des champs qui a maintenant une quantité illimitée de caractères (C'est un champ que je suis seul à renseigner). Je peux retrouver le truc si tu as besoin.

Mais bon, ça n'empêche qu'il y a effectivement un bug mais je n'utilise pas ce scrtipt.

Posté

C'est bon ça marche grâce à Eclipsis :)

en principe on ne montre pas du doigt, mais là, c'est pour la bonne cause.

Voici ce qu'il m'a dit en regardant le code du fichier fonction.php :

A mon sens, c'est un abus de htmlspecialchars dans le code-source et non une présence de caractères spéciaux dans celui-ci.

Par exemple, echo htmlspecialchars($resultat["titre"]) devrait être remplacé par echo $resultat["titre"]...

Et il m'a envoyé le fichier corrigé, et les 2 "Bugs" sont corrigés (si vous avez le même soucis, faites moi signe je vous envoie le mien)

Egalement merci à Jan, voici ce qu'il avait remarqué dans le code :

De mémoire c'est dans le fichier functions.php, la fonction affiche_site(), il y a des balises <b> au lieu de <b> qui trainent.

Tout ça est résolé, merci à tous et en espèrant que ça puisse en aider d'autres

Posté

Salut,

J'ai le même problème.

Mais Xav' a la solution avec un annuaire rewrité, et le mien ne l'est pas.

Pouvez-vous m'expliquer comment faire !?

Merci

Gribouille

Posté

enlève le htmlentites() ou le htmlspecialchars devant la description et fait une fonction perso à la place qui ne modifie pas les "<" et les ">", d'ailleurs, le mieux est de les supprimer purement et simplement ;)

Posté

Salut,

htmlentities() et htmlspecialchars() sont des fonctions PHP qui encodent tous les caractères qui peuvent servir en HTML.

Ainsi, des lettres telles que "a" ou "b" ne vont pas être modifiées, mais des chevrons > ou des esperlettes & oui ;)

Les exemples de la doc PHP sont très simples à comprendre:

function htmlspecialchars

function htmlentities

En gros, le problème dans MyPhpAnnuaire, ce sont les balises <b> qui passent dans un htmlspecialchars() non désiré et qui ressortent donc sous la forme <b> ;)

Posté
C'est bon ça marche grâce à Eclipsis :)

En principe on ne montre pas du doigt, mais là, c'est pour la bonne cause.

J'aurais jamais cru que je remercierai quelqu'un pour m'avoir montré du doigt :lol: (<private chocoku joke> et les doigts Xav, ça le connait </private joke>)

Ce qui est étrange avec ce bug, c'est que ça doit venir d'une version récente de MyPHPAnnuaire, vu qu'avec la vieille version (vieille de 12-15 mois), il n'y avait pas ce problème...

Gribouille, même proposition que pour Xav, si tu galères vraiment trop, envoie-moi ton fichier functions.php, je te corrigerai ça! (du moment que tu me montres du doigt après ^_^). Allez A+

Posté
Salut,

htmlentities() et htmlspecialchars() sont des fonctions PHP qui encodent tous les caractères qui peuvent servir en HTML.

Ainsi, des lettres telles que "a" ou "b" ne vont pas être modifiées, mais des chevrons > ou des esperlettes & oui ;)

Les exemples de la doc PHP sont très simples à comprendre:

function htmlspecialchars

function htmlentities

En gros, le problème dans MyPhpAnnuaire, ce sont les balises <b> qui passent dans un htmlspecialchars() non désiré et qui ressortent donc sous la forme <b> ;)

<{POST_SNAPBACK}>

Merci Dudu !

Je vais plancher là-dessus demain matin...

Gribouille, même proposition que pour Xav, si tu galères vraiment trop, envoie-moi ton fichier functions.php, je te corrigerai ça! (du moment que tu me montres du doigt après  ^_^). Allez A+

<{POST_SNAPBACK}>

Merci pour la proposition !! :blush:

Je pense à toi au besoin...

Gribouille

Posté
enlève le htmlentites() ou le htmlspecialchars devant la description et fait une fonction perso à la place qui ne modifie pas les "<" et les ">", d'ailleurs, le mieux est de les supprimer purement et simplement ;)

<{POST_SNAPBACK}>

C'est ce que j'ai fait dans le fichier functions.php.

J'ai juste supprimé le htmlspecialchars sans rien mettre d'autre à la place... :unsure:

L'affichage est bon.

J'espère que ça ne va pas poser de problèmes !???

J'ai aussi le deuxième bug de Xav' avec le lien qui est mal affiché.... ^_^

Ca doit venir de cette ligne:

$message .= "<a href=\"javascript:history.go(-1);\">retour au formulaire</a>\n";

Gribouille

Posté

Le problème que cela peut poser est qu'il te faut vérifer à chaque fois le contenu des descriptions entrées par tes utilisateurs afin qu'ils n'insérent pas de code, ça me paraît limite impossible, en revanche, tu ferais bien de faire une fonction pour les codes des caractères à accents.

Comme j'en ai une, je te la donne :

function ascii($mots){
$bien = array('é','è','ê','ë','à','â','ï','î','ô','ù','û','ç');
$pas_bien = array('é','è','ê','ë','à','â','ï','î','&ocir;','ù','û','ç');
$asc = str_replace($pas_bien,$bien,$mots);
return $asc;
};

Je ne sais pas si j'en ai oublié, mais enfin, voila

Pour le reste, je ne connais pas phpmyannuaire pour te répondre :)

bonne chance ;)

Posté

Ca marche très bien.

Je demandais juste si ça n'allait pas poser de problèmes... :whistling:

Mais visiblement si !

Et le premier c'est que je ne vois pas où mettre cette fonction...

Gribouille

Posté

si il y a un fichier functions.php ou un truc de ce genre, tu copies colle ce code dedans,

sinon tu copies colles ça dans un nouveau fichier, en ajoutant

require_once('chemin vers ton fichier')

partout.

ensuite, tu la plaque sur la description des sites (anciennement avec htmlentities ou htmlspecialchars) de manière à donner un truc du genre :

echo ascii($tableau['description']);

anciennement :

echo htmlspecialchars($tableau['description']);

voila, je pense avoir été explicite ;)

  • 9 months later...
Posté

Wow, je vais réveiller un sujet qui date aparemment :D

Eh bien j'ai le même problème, mais le truc c'est que je ne sais vraiment rien en php.

Alors comme Xavfun s'est proposé d'envoyer le fichier corrigé, je me suis demandé si il l'avait encore... :rolleyes:

Voilà, c'était mon premier message sur ce forum... :)

Nono

Posté

Au fait Cem38, tu t'y conais un peu en php ou pas ?

Moi pas du tout, mais bon, j'apprendrai sur le tas ^_^

Tu as installé quelle script le dernier (appelé maintenant Categorizor) ou l'ancient (phpMyAnnuaire). J'ai regardé le script functions.php du dernier, et apparemment, il n'y a rien de changé. Je ne sais pas pourquoi chez eux ça marche et pas chez moi. Et soit dit en passant, il y a plein de trucs qui ne sont plus valides dans leur code... mais bon... je modifie au fur et à mesure. Il finira bien par passer la validation du W3C. :rolleyes:

Voilà !

PS : je crie toujours à l'aide. Sur le forum de l'éditeur, il n'y a jamais personne, et mon post reste sans réponse... dommage.

Posté

Salut nono,

J'ai la dernière version MyPHPAnnuaire. Et je ne connais pas grand chose à PHP.

Je n'ai pas remerqué d'autres probleme que celui des <b> dans le mode recherche.

Posté
Je n'ai pas remerqué d'autres probleme que celui des <b> dans le mode recherche.

Essaye de faire une proposition de site dans l'annuaire en faisant des erreurs.

Normalement, quand tu valides, il te dit quelles sont tes erreurs et te propose de revenir à la page précédente avec un lien. Essayes d'enregistrer un site sans entrer d'url. Normalement, ça doit afficher un truc du genre

Votre url ne peut être vide !<br /><br /> <a href="java script:history.go(-1);">Retour au formulaire</a>

Mais ce que l'on veut, c'est le lien et pas le code source

Essayes et dit-moi si c'est pareil chez toi.

Posté (modifié)

Yo, ça y est CeM38, j'ai compris !!

en fait, c'est tout con, mais quand on ne connait rien en php on ne sait pas quoi faire.

Dans le fichier functions.php, remplace la ligne echo htmlspecialchars($resultat["titre"]) par echo $resultat["titre"]

En ce qui concerne les erreurs de lien d'entrée du formulaire (y'a pas que pour l'url, mais pour d'autres entrées aussi, je ne sais plus lesquelles, essayes-les), à l'endroit où ça plante (que tu repères avec la phrase qui va avec), remplace le echo htmlspecialchars($message) par echo $message

Sinon, envoie-moi ton fichier functions.php, je vérifierai pour toi ;)

Modifié par nono

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...