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

Langage PHP Discussion :

Faire un stripslashes dans les éléments d'un array


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut Faire un stripslashes dans les éléments d'un array
    Bonjour,

    J'ai une classe Database dans laquelle j'ai la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function getResult($q)
        {
            $query = $this->makeQuery($q);
     
            while ($line = mysql_fetch_assoc($query)) {
                $result[] = $line;
            }
     
            mysql_free_result($query);
     
            return $result;
        }
    En résumé, cette fonction me permet d'obtenir, à la sortie, un tableau contenant les différentes données provenant d'une requête SQL exécutée au préalable.

    Pour exemple, voici ce que peut contenir cette variable $result :

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Array ( [0] => Array ( [pageid] => 1 [pagesection] => 1 [pagesurtitre] => You on Web [pagetitre] => Votre partenaire pour le Web [pagesoustitre] => Project Management - Développement - Hébergement Web [pagechapeau] => You on Web vous propose de concevoir votre site Web dynamique facilement modifiable à la façon d'un CMS. You on Web, c'est aussi un service d'hébergement professionnel. [pagetexte] =>
    
    You on Web offre la possibilité à tout le monde d'avoir sa présence sur le Web. Pour cela :
    
        * You on Web vous propose un service d'hébergement (web hosting) professionnel et à la carte ! Choisissez et payez uniquement les services qui vous sont utiles.
        * You on Web vous offre la possibilité d'obtenir votre site Web à des prix adaptés et adaptables à tous les budgets tout en ne bradant pas la qualité.
        * You on Web vous propose des solutions vous permettant de gérer facilement l'ensemble du contenu de votre site Web, sans connaissance nécessaire en programmation car, pour qu'un site soit réellement dynamique, il doit pouvoir se mettre à jour rapidement.
        * You on Web s'articule autour de votre équipe pour déterminer ensemble le cahier des charges et être en mesure de répondre correctement à vos attentes.
        * You on Web c'est également votre partenaire pour la mise en place de votre stratégie de référencement et de positionnement car, avoir un site c'est une chose, le faire connaître en est une autre ! 
    
    [pagedate] => 2007-11-27 [pagestatut] => 1 [pagelangue] => 1 [pagetype] => 1 [pageuser] => 1 [pagetime] => 14:35:00 ) )

    Ce que j'aimerai faire dans cette fonction getResult avant de faire le return, c'est de parcourir l'ensemble des infos qui sont dans la variable $line pour les faire passer par un stripslashes et ensuite les replacer dans le tableau $result.

    Ainsi, si je fais un print_r($result['pagesection'], par exemple, je n'aurai pas les caractères d'échappement.

    Merci de vos conseils ... si je ne trouve rien, je devrai m'amuser à faire cela à chaque fois que je sors des données de la DB ...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 406
    Points : 380
    Points
    380
    Par défaut
    Salut,
    tu peux essayer ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $taille_du_tableau = count($result);
    for($i=0;$i<$taille_du_tableau;$i++)
    {
       $result[$i] = stripslashes( $result[$i]);
    }
    Qui sait ... ça pourrait marcher !

  3. #3
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    je ne comprend pas pourquoi tu veux faire un stripslashes avant d'afficher les données de ta base...

    Dans l'exemple que tu as donné, je ne vois pas de caractères échappés ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 406
    Points : 380
    Points
    380
    Par défaut
    Euh ... à mon avis il voulait dire "apostrophes", non?

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par zakaria84 Voir le message
    Euh ... à mon avis il voulait dire "apostrophes", non?
    Je ne comprend pas ce que tu veux dire (peut-être la fatigue...).

    stripslashes est une fonction qui permet de supprimer les caractères d'échappement (\). En général, c'est utilisé quand les magic_quotes sont activées, et que l'on veut afficher directement les données d'un formulaire.

    En récupération du contenu d'une base de données, il n'y a pas de raison que des caractères soient échappés. C'est pourquoi à mon sens il n'y a pas de raison d'utiliser stripslashes à ce niveau...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut
    Navré ... mea culpa ... Je n'ai pas donné toutes les infos ...

    Mon but est bien entendu de faire passer toutes les données qui devront être injectées dans ma DB par un mysql_real_escape_string pour justement échapper les différents caractères à risque.

    Donc il est vrai que dans l'exemple donné, pas nécessaire mais dans la réalité, cela le sera :-)

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach ($tableau as &$value) {
        $value = stripslashes($value);
    }

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 39
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par oranocha Voir le message
    Navré ... mea culpa ... Je n'ai pas donné toutes les infos ...

    Mon but est bien entendu de faire passer toutes les données qui devront être injectées dans ma DB par un mysql_real_escape_string pour justement échapper les différents caractères à risque.

    Donc il est vrai que dans l'exemple donné, pas nécessaire mais dans la réalité, cela le sera :-)
    mysql_real_escape_string, c'est à l'insertion des données. Là, tu nous montres une fonction de récupération des données. En tant que telle, elle n'a rien à faire. Ce sera à l'affichage que des fonctions du genre htmlspecialchars seront éventuellement utiles.

    Sinon pour répondre strictement à la question :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $array = array_map('stripslashes', $array);

  9. #9
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par oranocha Voir le message
    Navré ... mea culpa ... Je n'ai pas donné toutes les infos ...

    Mon but est bien entendu de faire passer toutes les données qui devront être injectées dans ma DB par un mysql_real_escape_string pour justement échapper les différents caractères à risque.

    Donc il est vrai que dans l'exemple donné, pas nécessaire mais dans la réalité, cela le sera :-)
    Non, l'échappement des caractères est nécessaire avant insertion pour éviter par exemple des injections SQL. Mais il n'est absolument pas nécessaire de faire un stripslashes à la lecture des données...

    Tu n'as qu'à faire un essai d'insertion de données échappées dans ta base, et tu verras le résultat

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Non, l'échappement des caractères est nécessaire avant insertion pour éviter par exemple des injections SQL. Mais il n'est absolument pas nécessaire de faire un stripslashes à la lecture des données...

    Tu n'as qu'à faire un essai d'insertion de données échappées dans ta base, et tu verras le résultat
    J'ai donc fait ce test en insérant un commentaire dans la DB avec un mysql_real_escape_string avant d'insérer les données dans la table.

    Quand je fais ensuite un select, si je ne tape pas un stripslashes avant la lecture, les échappements apparaissent

  11. #11
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par oranocha Voir le message
    J'ai donc fait ce test en insérant un commentaire dans la DB avec un mysql_real_escape_string avant d'insérer les données dans la table.

    Quand je fais ensuite un select, si je ne tape pas un stripslashes avant la lecture, les échappements apparaissent
    Tu peux nous montrer à quoi ressemble ton commentaire avant insertion dans la base (et après le mysql_real_espace_string) ?

    Je soupçonne un problème de magic quotes activés...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut
    Entretemps, j'ai résolu cela en modifiant ma fonction avec les conseils fournis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function getResult($q)
        {
            $query = $this->makeQuery($q);
     
            while ($line = mysql_fetch_assoc($query)) {
                $array = array_map('stripslashes', $line);
                $result[] = $array;
            }
     
            mysql_free_result($query);
     
            return $result;
        }
    En ajoutant la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $array = array_map('stripslashes', $line);
    les caractères échappés sont automatiquement transformés et c'est donc OK

    Merci à tous,
    Olivier

  13. #13
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Ca fonctionne peut-être, mais ce n'est pas portable. Si tu changes de serveur, il risque d'y avoir des surprises...

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

Discussions similaires

  1. Comment faire une recherche dans les forums ?
    Par JJJJJ dans le forum Débuter
    Réponses: 3
    Dernier message: 04/01/2010, 20h24
  2. Comment faire un refresh dans les pages web (.uix)
    Par isicien dans le forum JDeveloper
    Réponses: 2
    Dernier message: 13/02/2009, 23h10
  3. Faire des calculs dans les états
    Par bobosh dans le forum IHM
    Réponses: 1
    Dernier message: 09/09/2008, 14h36
  4. Recherche dans les éléments d'une liste
    Par adelotti dans le forum VBA Word
    Réponses: 12
    Dernier message: 19/06/2008, 17h52

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