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 :

preg_replace sur mysql_real_escape_string ! [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Avatar de NoobX
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 195
    Par défaut preg_replace sur mysql_real_escape_string !
    Bonjour a tous et a toutes !

    voici mon souci :

    Je cherche a filtrer les retours a la ligne multiple des visiteurs.
    Il s'agit d'un formulaire avec un textaera. rien de bien comlpliqué jusque la.

    Le souci est que l'enssemble des variables sont traité par 'mysql_real_escape_string' et a partir du moment ou la varaiable est traité je n'arrive plus a la filtrée

    voici un script tout pret a etre utilisé afin de mieux comprendre mon souci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
     
    //objectif : supprimer les saut de lignes multiples 
     
     
    //traitement 'mysql_real_escape' de la variable
       $test = mysql_real_escape_string($_POST[commentaire]);
     
         $testeur = preg_replace("/(\r\n)+|(\n|\r)+/", "\r\n", $test);// c'est ici le probleme a resoudre
     
     
     // variable non traité par 'mysql_real_escape'
     
     $string = preg_replace("/(\r\n)+|(\n|\r)+/", "\r\n", $_POST[commentaire]);
     
     
    echo '<hr/>';
    echo  'chaine non filtree <br/>'.nl2br($_POST[commentaire]);// chaine non filtree tous les sauts de lignes sont visibles
    echo '<hr/>';
    echo 'chaine sans mysql_real_escape filtree<br/>'.nl2br($string); // resultat attendu 
    echo '<hr/>';
    echo'chaine avec mysql_real_escape filtree<br/>'. nl2br($testeur); // cette chaine devrait apparaitre comme celle du dessus Le probleme apparait là
    ?>
    <form action="#" method="post">
    <textarea id="commentaire" name="commentaire" >1
    2
     
    3</textarea>
    <input type="submit" />
    </form>
    le code est commenté

    comme vous pouvez le voir si je ne traite pas la chaine avec 'mysql_real_escape' alors je n'ai pas de probleme pour filtrée les saut de lignes.

    le probleme apparait des que que 'mysql_real_escape' est utilisé hors je n'arrive pas atrouvé la regexp exact qui permettrait de corriger ce probleme

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    ça ne seré pas plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $testeur = preg_replace("/(\\r\\n)+|(\\n|\\r)+/", "\r\n", $test);

  3. #3
    Membre confirmé
    Avatar de NoobX
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 195
    Par défaut
    Citation Envoyé par Seb33300 Voir le message
    ça ne seré pas plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $testeur = preg_replace("/(\\r\\n)+|(\\n|\\r)+/", "\r\n", $test);
    Salut
    je viens de trouver la reponse !

    J'avais deja essayé ce que tu propose mais cela ne fonctionnait pas mieux .

    En faite il faut doubler les anti-slashs et vu que 'mysql_real_escape' en ajoute 1 a celui deja existant bah ca fait 2x2 donc ==


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $testeur = preg_replace("/(\\\\r\\\\n)+|(\\\\n|\\\\r)+/", "\r\n", $test);
    je verifie que tout fonctionne et je lock le sujet

    voici une petite precision :

    La doc precise (http://fr3.php.net/manual/fr/function.preg-replace.php)
    Pour utiliser les anti-slashes dans le masque, vous devez les doubler ("\\\\").
    ce qui explique la presence de 4 slash si on utilise mysql_real_escape et d'un seul anti-slash si on ne filtre pas.

    si on ne filtre pas seul le anti-slash de '/n' est necessaire. donc un seul anti-slash.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $testeur = preg_replace("/(\r\n)+|(\n|\r)+/", "\r\n", $test);
    En revanche si on filtre avec mysql_real_escape alors un cette fonction ajoute un anti slash et necessite d'etre doublé donc 4.
    Pour resumer si j'ajoute un anti-slash cela implique de doubler tout les anti-slash.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $testeur = preg_replace("/(\\\\r\\\\n)+|(\\\\n|\\\\r)+/", "\r\n", $test);
    Je ne l'avais pas compris c'est pourquoi j'essaye de le preciser un peu plus .

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

Discussions similaires

  1. [RegEx] Utilisation de preg_replace sur des données issues d'une base SQL
    Par lorentdups dans le forum Langage
    Réponses: 5
    Dernier message: 04/02/2014, 12h12
  2. [RegEx] preg_replace sur les commentaires
    Par nasuu dans le forum Langage
    Réponses: 7
    Dernier message: 14/10/2010, 15h35
  3. [RegEx] preg_replace sur une liste d'articles
    Par matperino dans le forum Langage
    Réponses: 3
    Dernier message: 22/05/2008, 15h20
  4. [RegEx] preg_replace sur une date
    Par Donald08 dans le forum Langage
    Réponses: 3
    Dernier message: 25/07/2006, 15h36
  5. [RegEx] utilisation de preg_replace sur des balises
    Par Kerod dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2005, 13h46

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