IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

nl2br ne fonctionne pas [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    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 : 21
    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 !

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Bonjour,

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

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message = mysql_real_escape_string(nl2br($_POST['message']));

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    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 : 21
    Par défaut
    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.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

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

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $message_html = nl2br(htmlentities($donnee_de_la_bdd['message']));
    // Dans la partie Html on exploite $message_html

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    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 : 21
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $string = htmlentities($string);
    $string = nl2br(str_replace('\\r\\n', "\r\n", $string));
    $string = stripslashes($string);
    echo $string;

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    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.

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    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.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    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 : 21
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = nl2br(htmlentities($string));

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    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é.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. nl2br ne fonctionne pas
    Par benoitXV dans le forum Langage
    Réponses: 11
    Dernier message: 28/11/2008, 19h27
  2. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo