Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 30/01/2012, 16h51   #1
Invité régulier
 
Homme
Étudiant
Inscription : février 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2011
Messages : 15
Points : 8
Points : 8
Par défaut nl2br ne fonctionne pas

Hello,

voici mon problème:

Je récupère du texte d'un textarea que je traite avec mysql_real_escape_string avant de le rentrer dans ma BDD.

Ensuite, je veux l'afficher. Je traite les données brut venues de la BDD avec stripslashes, puis htmlentities puis nl2br.

Sauf que je n'ai aucun retour à la ligne (aucun br) !

Dans ma bdd, je vois des \n\r, mais ils ne sont pas remplacés.

J'ai testé dans tous les sens, enlever le stripslashes etc etc pour voir si ça fonctionne, mais même pas.

Du coup j'ai trouvé ça:
http://www.developpez.net/forums/d65...ne-fonctionne/

Mais ça m'embête la solution avec la fonction eval. Je voudrais bien savoir pourquoi en sorti de bdd, ma fonction nl2br ne fonctionne pas alors que si je fais un test avec une chaine toute bête ça fonctionne.

Merci !
Kzou7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 17h07   #2
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Bonjour,

utilises la fonction nl2br avant de rentrer les informations en base.

Ex :

Code :
$message = mysql_real_escape_string(nl2br($_POST['message']));
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 18h20   #3
Invité régulier
 
Homme
Étudiant
Inscription : février 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2011
Messages : 15
Points : 8
Points : 8
Salut,

merci, j'y ai pensé mais je voudrais garder mon texte brut, tel qu'il est. Donc éviter de modifier quoi que ce soit avant de le mettre dans ma bdd.
Kzou7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 18h33   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Salut

Il faut juste éviter de mélanger les choses.

Exemple :
Code :
1
2
3
4
5
6
 
$message_bdd = mysql_real_escape_string($_POST['message']);
// Dans la requête SQL on exploite $message_bdd
 
$message_html = nl2br(htmlentities($_POST['message']));
// Dans la partie Html on exploite $message_html
Ou alors, si la données vient de la Bdd (insérée avec le code précédent) :
Code :
1
2
$message_html = nl2br(htmlentities($donnee_de_la_bdd['message']));
// Dans la partie Html on exploite $message_html
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/01/2012, 18h56   #5
Invité régulier
 
Homme
Étudiant
Inscription : février 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2011
Messages : 15
Points : 8
Points : 8
Hello,

c'est exactement ce que je fais, mais le nl2br n'est pas pris en compte et mon message_html ne comporte aucun <br />...

edit:

j'ai trouvé une solution en utilisant un str_replace:

Code :
1
2
3
4
$string = htmlentities($string);
$string = nl2br(str_replace('\\r\\n', "\r\n", $string));
$string = stripslashes($string);
echo $string;
Kzou7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 19h32   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Citation:
Envoyé par Kzou7
c'est exactement ce que je fais, mais le nl2br n'est pas pris en compte et mon message_html ne comporte aucun <br />...
C'est qu'au moment de l'insertion tu dois faire quelque chose d'autre qu'un simple mysql_real_escape_string().

Ou alors le mal est déjà fait, la donnée dans la Bdd est mal insérée.

Tu disais aussi que tu appliquais un stripslashes(), or, il y a pas lieu de faire ça.
Le seul cas où cela est nécessaire, c'est si la directive dans le php.ini magic_quotes_gpc est à On, ou qu'on aurait appliqué un addslashes() avant.


Fait des essais avec une donnée correctement insérée avec des sauts de lignes, quitte à le faire directement/manuellement dans la Bdd (PhpMyAdmin par exemple).
Faut éviter le piège en somme.


Au passage, où est-ce que tu applique ce nl2br dans la partie HTML ?
Donne le code qu'on voit.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 20h04   #7
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Citation:
j'ai trouvé une solution en utilisant un str_replace:
Ceci s'appelle un scotch. (Je dirais même que tu enfonce le clou)
Ca ne résout pas le problème, dans le meilleur des cas ça le contourne.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 20h06   #8
Invité régulier
 
Homme
Étudiant
Inscription : février 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2011
Messages : 15
Points : 8
Points : 8
Je suis un noob

Je vous explique ma connerie ...

j'utilise une class mysql pour faire mes requêtes sql.
En je viens de voir que le mysql_real_escape_string est déjà utilisé lors d'un insert. Et comme moi je l'utilisais aussi, ça fait qu'il était utilisé 2 fois. D'où les problèmes de slashes et de \r\n.

En corrigeant, ça marche forcément ... ^^

du coup pour insérer dans ma BDD, je rentre directement sans refaire un mysql_real_escape_string

Et pour l'affichage
Code :
$string = nl2br(htmlentities($string));
Kzou7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 20h10   #9
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Citation:
En je viens de voir que le mysql_real_escape_string est déjà utilisé lors d'un insert.
J'me doutais bien que tu faisais un truc avant.

Cette fois je suis d'accord, là c'est réparé.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h57.


 
 
 
 
Partenaires

Hébergement Web