Sauts de ligne

Résolu/Fermé
Utilisateur anonyme - 7 juin 2014 à 13:29
 Utilisateur anonyme - 7 juin 2014 à 18:00
Bonjour,
Je rencontre un problème que je n'arrive pas à résoudre, même après des recherches sur Google. Serait-il possible que vous m'aiguilliez ?

Voilà, j'ai un formulaire avec un textarea. Tout utilisateur connecté du site web peut entrer un texte dans ce textarea et soumettre le formulaire.
Le contenu du textarea est alors stocké sous forme de texte dans une base de données.

Il existe ensuite une page dans laquelle j'affiche dans une balise div le texte qui est contenu dans a base de données.

Je suis très loin de maîtriser le php néanmoins il faut, il me semble, sécuriser ces champs pour éviter qu'on utilisateur du site ne s'amuse à entrer n'importe quoi.

Ainsi lorsque le formulaire est soumis, je commence par traiter le champs avec
mysql_real_escape_string et addslashes.

Ensuite, on enregistre dans la base de données.

Pour l'affichage, j'utilise la fonction nl2br qui permet il me semble de traduire les /n des textareas en <br> pour l'affichage des sauts de ligne.

J'utilise ensuite htmlentities puis htmlspecialchars afin d'éviter que du contenu html soit exécuté.




Mon problème est le suivant :

Je suis complètement perdu quant aux sauts de ligne !

Si je met la fonction mysql_real_escape_string alors mes sauts de ligne sont neutralisés avant même d'être enregistrés dans la base de données. Si je ne la met pas cela pourrait être une faille de sécurité non ?

Par ailleurs si je ne la met pas, alors plus rien ne s'affiche lors de la sortie.

De plus, quand bien même tout marcherait, les fonctions htmlentities et htmlspecialchars ne neutraliseraient-elles pas les <br> traduits par nl2br ?


Comment est-il possible d'avoir un champs un minimum sécurisé, qui traite toutes les fonctions ou balises html, permet d'afficher les guillemets et surtout conserve les sauts de ligne.

Je vous remercie d'avance pour l'aide précieuse que vous pourriez m'apporter.
Très cordialement,

2 réponses

ElementW Messages postés 4814 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
7 juin 2014 à 15:15
'lut, tu dis "mysql_real_escape_string", etc...
Stop!
Si tu est en train d'appendre le PHP, il faut bannir à tout prix les fonctions
mysql_*
qui sont obsolètes et seront supprimées dans les versions à venir de PHP. Il faut passer à PDO, qui te permet de créer des requêtes préparées qui gèrent la sécurisation des données entrée à ta place.
Ça c'est dit...
Maintenant, pour tes retours à la ligne: enregistre le contenu du <textarea> directement dans ta base, sans passer par une conversion quelconque (hormis celle automatique de PDO).
Et quand tu comptes afficher le texte, tu prends ton texte dans ta BDD, puis lui appliques dans l'ordre:
-
htmlspecialchars

-
nl2br
0
Utilisateur anonyme
7 juin 2014 à 18:00
Je te remercie énormément pour cette réponse très claire que tu m'as apporté.
Je vais essayer ça.
Merci beaucoup,
0