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 :

Echappement ' <-> ’ [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut Echappement ' <-> ’
    Bonjour,
    Je sais que le nom du post n'est pas très clair mais j'ai vraiment du mal à formuler mon problème (et me faire comprendre d'un moteur de recherche, du coup :/).

    J'ai dans ma base de données des champs correspondant à des domaines, des directions et qui ressemblent à ça :
    Direction des Activités Métier et Maîtrise d'Ouvrage
    Direction de l’Organisation
    Direction de la Communication

    J'effectue une requête simple (affiche les équipes appartenant à cette direction ou ce domaine par exemple) mais évidemment, avec les apostrophes, ça coince (et vous remarquerez que ce n'est pas les mêmes : ' ou ’ ). La requête ne se fait pas, il faudrait qu'elle ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select direction, domaine, equipe
    from service
    where direction='Direction des Activités Métier et Maîtrise d''Ouvrage'
    group by direction, domaine, equipe
    order by direction, domaine, equipe"
    L'utilisateur ne saisit rien, toutes ces données sont stockées et donc, il navigue par menu.

    J'ai essayé addslashes(), pg_escape_string() mais rien n'y fait. Et même str_replace() mais du coup, ma requête ne donne rien...

    Voici mon code, qui sera peut être plus clair que moi..

    Le menu pour accéder à la page qui détaille les infos d'une direction
    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
    <li><a href="#">Directions<!--[if IE 7]><!</a><![endif]
                [if lte IE 6]><table><tr><td><![endif]-->
                    <?php
                        $c=connec_base ();
                        $r=pg_exec ($c , "select distinct direction
                                    from service
                                    where direction !=''
                                    order by direction");
                        echo "<ul>";
                        for ($i=0; $i<pg_numrows($r); $i++) {
                            $l=pg_fetch_array($r,$i);
                            echo "<li><a href='det_direction.php?iddir=$l[direction]'>".$l["direction"]."</a></li>";
                        }
                        echo "</ul>";
                        deco_base ();
                    ?>
                    <!--[if lte IE 6]></td></tr></table></a><![endif]-->
                </li>
    L'affichage qui coince...
    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
    <?php
           $direction=$_GET['iddir'];
           echo "<h1>Liste des équipes de $direction</h1><br/>";
     
           $c=connec_base ();
     
            $r=pg_exec ($c , "select direction, domaine, equipe
                            from service
                            where direction='$direction'
                            group by direction, domaine, equipe
                            order by direction, domaine, equipe");
     
            $l=pg_fetch_array($r,$i);
     
            echo "<ul>";
            //pour tous les tuples résultats de la requete
            for ($i=0; $i<pg_numrows($r); $i++) {
     
                           $l=pg_fetch_array($r,$i);     
     
                                    echo "<li><strong>".$l["equipe"]."</strong> (".$l["domaine"].")</li>";
     
                    }
             echo "</ul>";
     
     
        deco_base ();
           ?>
    Existerait-il une autre solution que de remplacer les données dans la base ? Si non, comment fonctionne la fonction replace de POSTGRESQL dans ce cas ? car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select replace (direction,''','')
    from service
    ne fonctionne pas... :/

    En vous remerciant d'avance et en espérant avoir été claire..

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il faudrait utiliser pg_escape_string().

    Concrètement au lieu de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            $r=pg_exec ($c , "select direction, domaine, equipe
                            from service
                            where direction='$direction'
                            group by direction, domaine, equipe
                            order by direction, domaine, equipe");
    Il faudrait faire ça, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $query=sprintf("select direction, domaine, equipe
                            from service
                            where direction='%s'
                            group by direction, domaine, equipe
                            order by direction, domaine, equipe",
                      pg_escape_string($direction) );
    $r=pg_exec($c, $query);

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

Discussions similaires

  1. Séquence d'échappement
    Par Ptit_boeuf dans le forum Linux
    Réponses: 1
    Dernier message: 13/03/2006, 10h48
  2. Bash - echapper des slashes
    Par Estats dans le forum Linux
    Réponses: 3
    Dernier message: 12/01/2006, 15h52
  3. Réponses: 2
    Dernier message: 14/10/2005, 17h05
  4. caractere d'echappement
    Par leviathan516 dans le forum ASP
    Réponses: 3
    Dernier message: 19/10/2004, 20h34
  5. [caractere]echappement # et servlet
    Par okoax dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 22/04/2004, 16h29

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