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 :

Probléme échappement simple quote [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Probléme échappement simple quote
    Bonjour,
    Voila, je souhaite enregistrer en base un petit texte.
    Pour cela rien de plus simple qu'une requête INSERT. J'en est fait des tonnes depuis des année sans aucun pb.

    Mais voila aujourd'hui, ca ne veux pas passer et j'ai une belle erreur Sql au niveau de l'apostrophe.

    Pourtant j'ai un échappement devant chaque simple quote. Mais rien y fait c'est comme si l'échappement n'était pas reconnu ou pris en compte.

    Faut savoir que le texte cette l'insert ne provient pas d'un formulaire mais, il est écrit en dure dans le code.

    D'ou peut provenir ce pb et comment le corriger ?


    pour info get_magic_quotes_gpc() est bien a 1

  2. #2
    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
    Par défaut
    Déjà débarrasse toi de ton magic_quotes : c'est une technique obsolète.

    Ensuite de quel SGDB et de quelle fonction d'echappement parle t-on
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Invité
    Invité(e)
    Par défaut
    j'ai une fonction pour l'injection en DB et j'ai une vérification dans cette fonction qui fait que si magic_quotes = 1 c'est lui qui gère si non le texte est dans un addslashes. C'est juste pour la portabilités de la solution. Mais bon ca a toujours marché, et ca marche toujours sauf sur cette injection là.

    On parle de MySql et de l'antislash.

    Ex : $Txt = 'Tout au long de l\'utilisation du back Office' ;

  4. #4
    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
    Par défaut
    Avec mysql, utilise plutôt mysl_real_escape_string() qui est faite pour ça.

    As-tu controlé ta chaine de requête censée être echappée ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Invité
    Invité(e)
    Par défaut
    Suite a de nombreux test j'ai trouvé le pb, mais je ne l'explique pas.
    Quand je fait un INSERT, les valeurs du form passe par une function (function GestionSql), pour justement mettre un slash d'échappement, passer le texte en htmlentities ...
    Encore une foi tout fonctionne.

    Par contre dans ce cas le texte ne provient pas d'un formulaire, mais il est écrit en dure dans le code, directement dans une autre fonction (function AjoutMessage) qui fera appel a la function GestionSql pour l'enregistrement.
    L'appel se fait comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Messagerie::CreationMessage($id_destinataire, 'Sujet du message', 'Tout au long de l\'utilisation du back Office ...') ;
    Et le pb est là. Dans l'état actuel du code, il ne marchera pas.
    Mais si je conserve le slash d'échappement et si je remplace les simple quote de début et de fin par des double quote alors ça marche.

    La question est POURQUOI ?
    Pourquoi, la simple quote qui délimite mon texte semble ne pas être interprété comme tel, mais comme si elle se trouvais dans une chaine et que j'avais oublié de l'échapper.

  6. #6
    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
    Par défaut
    'Tout au long de l\'utilisation du back Office ...'
    signifie
    Tout au long de l'utilisation du back Office ...

    "Tout au long de l\'utilisation du back Office ..."
    signifie
    Tout au long de l\'utilisation du back Office ...

    La bonne méthode est d'écrire de manière naturelle :
    "Tout au long de l'utilisation du back Office ..."
    et d'utiliser mysql_real_escape_string()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Invité
    Invité(e)
    Par défaut
    j'ai remis le code d'origine, et j'ai mis un addslashes et tout rentre dans l'ordre.
    le truc qui m'échappe est pourquoi le addslashes de ma fonction GestionSql, ne sais pas fait ?
    Pt'être a causse de trop d'utilisation de fonction.
    Bref ca ne me plait pas ce que j'ai fait mais c'est le moins perturbant. Surtout pour mes habitude de codage.
    je regarderais comment intégrer le mysql_real_escape_string de manière auto aux traitement.

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

Discussions similaires

  1. [PHP 5.3] problème simple quote
    Par moukit233 dans le forum Langage
    Réponses: 1
    Dernier message: 15/06/2012, 15h34
  2. [MySQL] Problème de simple quote dans le champ de recherche
    Par mesken dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 29/03/2012, 10h05
  3. Réponses: 2
    Dernier message: 06/07/2009, 14h46
  4. [MySQL] Problème de simples quotes
    Par LN69 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/05/2008, 12h02
  5. Sudo problème avec les simples quotes
    Par Tronche dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/03/2007, 12h02

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