Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/04/2006, 12h48   #1
Futur Membre du Club
 
Inscription : avril 2006
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 38
Points : 18
Points : 18
Par défaut [Conception] HTML et Bases de données

Bonjour,

Je pense que beaucoup d'entre vous connaissent la fonction nl2br, qui permet d'insérer la balise '<br />' devant toutes les nouvelles lignes. Beaucoup de personnes recommandent d'utiliser cette fonction uniquement à l'affichage. Et d'ailleurs, cela parait tout à fait logique, et cela explique également pourquoi il n'existe pas de fonction br2nl.

Cependant, je me trouve face à une impasse : imaginez un formulaire bbcode, dans un panel d'administration, permettant d'insérer du html (je ne parle pas d'une coloration syntaxique, mais bel et bien de html : les balises sont interprétées). Voici un exemple :

Par exemple, nous entrons ceci dans le formulaire :

Citation:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus eu arcu. Nulla diam velit, convallis in, elementum sed, varius varius, lorem.

[HTML]
Quisque ut purus et <strong>lorem</strong> mollis venenatis.<br />
Qroin luctus dignissim sapien.
Sed luctus porta eros.
[/HTML]

Aliquam purus velit, pharetra vitae, porttitor quis, ornare ut, libero. Quisque convallis, dolor a varius elementum, dolor leo suscipit nisl, in mollis nisl ipsum et lacus.
Et cela afficherait :

Citation:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus eu arcu. Nulla diam velit, convallis in, elementum sed, varius varius, lorem.

Quisque ut purus et lorem mollis venenatis.
Qroin luctus dignissim sapien. Sed luctus porta eros.

Aliquam purus velit, pharetra vitae, porttitor quis, ornare ut, libero. Quisque convallis, dolor a varius elementum, dolor leo suscipit nisl, in mollis nisl ipsum et lacus.
Ici, le parser serait très simple. Mais en ajoutant plusieurs options (coloration syntaxique d'une dizaine de langage, etc...), ça peut rapidement devenir asez lourd. Pour des raisons de performance, le plus judicieux est de parser le formulaire à l'enregistrement. Cependant, ça impose d'utiliser nl2br à l'enregistrement, et non à l'affichage. Autrement dit, on est véritablement partagé entre performance et logiques de programmation.


Même si je reconnais que la question n'est pas de la plus haute importance, votre point de vue m'intéresse.
Jukien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2006, 13h31   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Avant de répondre de manière plus complète, peux-tu me dire où tu utilises le BBCode que tu évoques ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2006, 13h35   #3
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
je verrais plutot htmlentities() et html_entity_decode() non ??

et puis si tu tapes des balises html, tu les stockes avec htmlentities comme ca elle ne sont pas executable, et après tu les décode pour l'affichage avec [HTML] [/HTML] non ?? ou j'ai pas pigé le probleme ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2006, 13h53   #4
Futur Membre du Club
 
Inscription : avril 2006
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 38
Points : 18
Points : 18
Le bbcode est utilisé dans un formulaire du panel d'administration, pour modifier des articles. Les articles sont visualisés par tous les visiteurs.

Concernant htmlentities, cette fonction est utilisé, mais uniquement sur le texte hors des balises [HTML]. Mais le problème est exactement le même qu'avec nl2br : il est plus logique de l'utiliser lors de l'affichage, mais plus performant de le faire lors de l'enregistrement.

Enfin, le fond de ma question, c'est essentiellement la logique de programmation. Pour des raisons de performance, j'aurais tendance à parser lors de l'enregistrement, et stoquer la valeur parsée dans la base de données, prete à être affichée. Seulement, la logique voudrait que l'on parse uniquement à l'affichage.
Jukien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2006, 14h18   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Okay, maintenant j'ai saisi le fond du problème ^^

Ne t'en fais pas pour les performances, va. Dans mon URL Rewriting, je parse la page HTML complète pour chercher les URLs, faire plusieurs dizaines de requêtes sur la BDD et effectuer autant (voire davantage) de remplacements. Je mélange des regex, des str_replace et j'en passe. Pourtant, le temps d'exécution total de la fonction d'URLR est ridicule.

Mon conseil : ne jamais coder en pensant "performances" mais, à l'inverse, toujours avec un objectif de relecture ultérieure.
Les petites optimisations comme celle dont tu parles sont vraiment ridicules et elles peuvent te faire perdre un temps monstrueux un jour ou l'autre, puisque ce n'est pas très correct.
Enregistre toujours des données brutes (atomiques) dans la BDD. Laisse tous les traitements au langage de script.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2006, 14h42   #6
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Je suis totalement d'accord avec Yogui, la base de données devrait toujours contenir le texte tel qu'il a été saisi, et non tel qu'il devra etre affiché.

Si apres tu as des soucis de performances... et bien, rien ne t'empeche de mettre en place un systeme de cache, et cela independamment de la provenance des données (base de données ou autre) afin d'ameliorer les perfs.
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2006, 14h52   #7
Futur Membre du Club
 
Inscription : avril 2006
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 38
Points : 18
Points : 18
Donc vous privilégiez la logique aux performances.
Autrement dit, je ne change pas mes petites habitudes, et j'enregistre tel quel dans la base de données.


Concernant le système de cache, c'est une solution.
Cependant, dans d'autres systèmes (un forum par exemple, avec des centaines de milliers de message), c'est très difficile, voire impossible à mettre en place.
Jukien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h20.


 
 
 
 
Partenaires

Hébergement Web