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 :

Utilisation de backslashes dans la base de données


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 50
    Par défaut Utilisation de backslashes dans la base de données
    bonjour,

    j'aimerai inserer dans une bdd la valeur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $summary_polyline = 'aaa1\bbb2\\ccc3\\\d';
    .

    le problème, c'est que j'ai une modification du nombre de \

    même en ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $summary_polyline = 'aaa1\bbb2\\ccc3\\\d';
     
    echo $summary_polyline.'<br />';
    echo addslashes($summary_polyline).'<br />';
    echo stripslashes($summary_polyline).'<br />';
    résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    aaa1\bbb2\ccc3\\d
    aaa1\\bbb2\\ccc3\\\\d
    aaa1bbb2ccc3\d
    j'ai essayé en remplacant par un caractère non utilisé dans l'encodage mais j'ai le même résultat...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $summary_polyline = str_replace('\\', '¨', $summary_polyline);
    même résultat : auriez vous une solution SVP ?
    je suis bloqué depuis plusieurs heures.

    Je vous remercie
    Bonne journée

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Tu veux ceci en base :

    aaa\bbb\\ccc\\\ddd
    Il faut échapper chaque \ en PHP en le doublant, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $s = 'aaa\\bbb\\\\ccc\\\\\\ddd';
    Ensuite pour le SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdo->exec("insert into t values ({$pdo->quote($s)})");

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 50
    Par défaut
    Merci Seb pour ta réponse,

    je viens d'essayer ta proposition.

    en partant de aaa\bbb\\ccc\\\ddd
    quote ne double pas tous les \ mais seulement certains : aaa\\bbb\\ccc\\\\ddd
    dans la bdd j'ai ceci : aaa\bbb\ccc\\ddd


  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Montre ton code.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 50
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $summary_polyline = 'aaa\bbb\\ccc\\\ddd';
    $summary_polyline = $pdo->quote($summary_polyline);
     
    $sql = 'INSERT INTO parcours (summary_polyline) VALUES ("'.$summary_polyline.'")';
    $pdo->exec($sql);

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 660
    Par défaut
    le souci est que l'antislash est aussi un caractère spécial pour les chaines de caractères php. vous pouvez le voir en affichant le contenu de la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $summary_polyline = 'aaa\bbb\\ccc\\\ddd';
    echo $summary_polyline;
    // affiche : aaa\bbb\ccc\\ddd
    le code \b ne correspond à rien de spécial donc php va stocker \ et b.
    par contre \\ est le code spécial pour 1 seul antislash d'où le résultat que vous obtenez.
    https://www.php.net/manual/fr/langua....syntax.single

    si vous voulez 1, 2 et ensuite 3 antislash, vous pouvez faire cela par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $summary_polyline = 'aaa\\bbb\\\\ccc\\\\\\ddd';
    echo $summary_polyline;
    // affiche :  aaa\bbb\\ccc\\\ddd

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par julienber Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $summary_polyline = 'aaa\bbb\\ccc\\\ddd';
    $summary_polyline = $pdo->quote($summary_polyline);
     
    $sql = 'INSERT INTO parcours (summary_polyline) VALUES ("'.$summary_polyline.'")';
    $pdo->exec($sql);
    1. Comme indiqué et illustré dans mon message initial, il faut doubler les \, ce que tu n'as pas fait

    2. En SQL on délimite une chaîne avec ' (" est une extension MySQL)

    3. PDO::quote() ajoute déjà des ' autour de la chaîne

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 50
    Par défaut
    Citation Envoyé par mathieu Voir le message
    le souci est que l'antislash est aussi un caractère spécial pour les chaines de caractères php. vous pouvez le voir en affichant le contenu de la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $summary_polyline = 'aaa\bbb\\ccc\\\ddd';
    echo $summary_polyline;
    // affiche : aaa\bbb\ccc\\ddd
    le code \b ne correspond à rien de spécial donc php va stocker \ et b.
    par contre \\ est le code spécial pour 1 seul antislash d'où le résultat que vous obtenez.
    https://www.php.net/manual/fr/langua....syntax.single

    si vous voulez 1, 2 et ensuite 3 antislash, vous pouvez faire cela par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $summary_polyline = 'aaa\\bbb\\\\ccc\\\\\\ddd';
    echo $summary_polyline;
    // affiche :  aaa\bbb\\ccc\\\ddd
    Merci Mathieu pour ta réponse,

    seulement la variable, je la récupère d'un autre site via une API, donc comment je fais pour doubler les \ de la variable récupérée ?
    et donc passer de : aaa\bbb\\ccc\\\ddd
    à ça : aaa\\bbb\\\\ccc\\\\\\ddd

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 50
    Par défaut
    Citation Envoyé par Séb. Voir le message
    1. Comme indiqué et illustré dans mon message initial, il faut doubler les \, ce que tu n'as pas fait
    c'est justement l'objectif de mon message sur ce forum : comment doubler les \ sans le faire manuellement puisque les variables récupérées vont être nombreuses et traités automatiquement

    Merci piur ton retour :-)

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Il faut tout nous dire

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $s = 'aaa\\bbb\\\\ccc\\\\\\ddd'; // Reçu aaa\bbb\\ccc\\\ddd
    echo $s, "\r\n"; // aaa\bbb\\ccc\\\ddd
    $s = str_replace('\\', '\\\\', $s); // Remplace chaque \ par \\
    echo $s, "\r\n"; // aaa\\bbb\\\\ccc\\\\\\ddd

    addslashes() n'est pas bon car il échappe d'autres caractères que le \

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 50
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Il faut tout nous dire

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $s = 'aaa\\bbb\\\\ccc\\\\\\ddd'; // Reçu aaa\bbb\\ccc\\\ddd
    echo $s, "\r\n"; // aaa\bbb\\ccc\\\ddd
    $s = str_replace('\\', '\\\\', $s); // Remplace chaque \ par \\
    echo $s, "\r\n"; // aaa\\bbb\\\\ccc\\\\\\ddd

    addslashes() n'est pas bon car il échappe d'autres caractères que le \
    bon, je comprends vraiment rien à ces foutus \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\_

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $s = 'aaa\bbb\\ccc\\\ddd'; // je reçois ceci
    echo $s, "\r\n"; // aaa\bbb\ccc\\ddd
    $s = str_replace('\\', '\\\\', $s); // Remplace chaque \ par \\
    echo $s, "\r\n"; // aaa\\bbb\\ccc\\\\ddd => ce qui est différent de ce que j'ai reçu

    mais merci pour la persévérence afin de trouver une réponse à ce casse-tête

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 50
    Par défaut
    C'est la première ligne qui pose problème,
    comment passer de ce que je reçois de l'api = aaa\bbb\\ccc\\\ddd
    à ceci aaa\\bbb\\\\ccc\\\\\\ddd ?

    Merci

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

Discussions similaires

  1. ajoute d'une ligne dans une base de donnes
    Par anisj1m dans le forum JDBC
    Réponses: 5
    Dernier message: 19/03/2007, 19h35
  2. Réponses: 10
    Dernier message: 17/03/2007, 14h05
  3. insérer des élément dans une base de donné
    Par wiss20000 dans le forum JDBC
    Réponses: 5
    Dernier message: 01/03/2007, 14h49
  4. [Conception] inertion d'un fichier dans une base de donne
    Par laminebarasow dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/07/2006, 23h13
  5. [c#] [dataadapter] effacer des ranger dans une base de donne
    Par mahboub dans le forum Accès aux données
    Réponses: 4
    Dernier message: 02/12/2005, 01h26

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