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

WordPress PHP Discussion :

Fix backslashes sans Magic Quote


Sujet :

WordPress PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 10
    Points
    10
    Par défaut Fix backslashes sans Magic Quote
    Bonjour,
    J'ai développé un thème wordpress, sur lequel j'avais des soucis au moment de l'import dans la base de données, de mes options de thème.
    En effet, j'ai des backslashes devant mes doubles quote dans ma base de données et du coup en front. Exemple <ul class=\"list\">.
    J'avais réussi à fixer le problème, en utilisant ces petites ligne de code dans mon fichier functions.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //----------------------------- WORDPRESS FIX BACKSLASHES ---------------------------------------// 
     
    if ( get_magic_quotes_gpc() ) {
        $_POST      = array_map( 'stripslashes_deep', $_POST );
        $_GET       = array_map( 'stripslashes_deep', $_GET );
        $_COOKIE    = array_map( 'stripslashes_deep', $_COOKIE );
        $_REQUEST   = array_map( 'stripslashes_deep', $_REQUEST );
    }
    Problème, pour mon dernier site, l'hébergeur n'a pas activé les magics quote sur le serveur et ne veut pas. Il me dit aussi que l'option magic quote tend à devenir obsolète avec les nouvelles versions de php.

    Voici ca réponse :
    Les magicquotes sont obsolètes depuis php 5.3 et seront désactivés dans php 5.4 pour des raisons de performances.
    Comme ce n'est pas toutes les données qui sont finalement placées dans une base, il y a un coût en vitesse pour protéger toutes ces données. Le simple appel des fonctions de protections en fonction des besoins est plus efficace ( addslashes()) et permet de produire un code de bien meilleure qualité. Même si php.ini-development active ces options par défaut, php.ini-recommended les désactive. Cette recommandation est surtout faite pour des raisons de vitesse, de performance, et de forcer la qualité du code php produit.
    Du coup, je suis embêter, comment remédier à mon problème ?
    Merci pour votre précieuse aide

  2. #2
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Le principe des magic_quotes est de rajouter automatiquement un backslash sur les singles / doubles quotes et les backslash pour toutes les valeurs reçues en GET, POST et Cookies.
    http://php.net/manual/en/info.config...gic-quotes-gpc
    Si cette configuration n'est plus activée, tu ne devrais plus avoir ce soucis au moment de l'import en BDD, puisque le moteur PHP ne rajoutera plus automatiquement des backslash.
    Fais quelques tests pour t'assurer que c'est bien les magic_quotes qui te rajoutaient ces quotes en trop et tu pourras supprimer ces lignes

    Assures-toi bien par contre que tes données sont propres avant toute utilisation, en vérifiant à chaque fois si les données que tu reçues correspondent à ce que tu attends !

    De même pour les insertions en BDD, si tu n'utilises pas de binding, n'oublies pas d'échapper les données que tu ne maîtrises pas (valeurs envoyées par l'utilisateur) avec mysqli_real_espace_string (ou mysql_real_escape_string si tu utilises toujours l'ancienne API) :
    http://fr2.php.net/manual/fr/functio...ape-string.php
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  3. #3
    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
    Je ne comprends pas ton problème, si tu n'as plus de magic_quotes, tu n'as plus besoin d'enlever les \.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je ne comprends pas ton problème, si tu n'as plus de magic_quotes, tu n'as plus besoin d'enlever les \.
    Ben si c'est ca qui est fou, sur ovh pas de soucis.
    La je suis dans un autre hébergement qui n'a pas les magic quote, que je supprime ces lignes (magic quote) ou que je les garde, c'est la même chose, j'ai toujours les données qui s'enregistrent avec des antislashes. Alors que quand se serveur avait l'option d'activé, j'avais pas se problème. Je suis perdu. Ca me saoul !

  5. #5
    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
    Tu as contrôlé dans ton phpinfo() l'état exact de l'option ?

    Tu as fais un test simple pour vérifier si le \ est bien ajouté par le serveur ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Il te faut mettre des traces (au moment où tu récupères tes données, après traitement si tu en fais et juste avant insertion en base) pour voir où ces fameux slashs sont rajoutés !
    Recherches notamment si tu n'as pas un addslashes qui traîne ?

    Si tu ne vois toujours pas, il nous faudra plus de code pour t'aider :/
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    J'ai trouvé une solution, qui a le mérite de fonctionner, c'est peut être pas la bonne, mais ca marche, en front, le code n'a plus d'antisashes quand les magic quote sont off sur un serveur voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo stripslashes(get_theme_option('header','logo')); ?>
    Quand je récupère l'option, je mets un antislashes devant, cela vous parait il correct ?

    Autre chose, mon manque de compétences en php, m'empêche de trouver la solution pour mettre l'antislashes, quand l'option que je récupére ce trouve dans un return. comme ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function theme_map_shortcode($atts, $content = null)
    {
    	return '<div class="canvas">'.get_theme_option('options','map').'</div>';
    }
    add_shortcode('map', 'theme_map_shortcode');
     
    ?>
    Si je fais la même chose qu'au dessus, ca ne marche pas. Merci pour votre aide

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    Personne à une idée de comment on fait ?
    J'ai toujours pas trouvé la solution

  9. #9
    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
    Ca ne sert à rien qu'on te réponde puisque tu ne fais pas du tout comme on t'a déjà indiqué.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    Je suis d'accord avec vous, mais c'est juste que mon niveau ne me permet pas de comprendre ce que vous m'avez dit de faire.
    J'essaie donc de touver une solution depuis maintenant une semaine.
    J'ai la technique ci-dessus qui marche, mais je n'arrive juste pas à intégrer stripslashes dans le return.
    Je fais avec les moyens du bord c'est tout. Merci pour votre aide

  11. #11
    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
    Ce qu'on t'explique c'est que si magic_quotes est réellement désactivé dans ton script, tu ne dois pas avoir de \ et donc il est futile de chercher à le retirer a posteriori : tu dois trouver ce qui ajoute tes \.
    Comme te l'as dit k'amm, tu as surement un addslashes() dans ton code.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre éclairé

    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Points : 657
    Points
    657
    Par défaut
    Citation Envoyé par dreadstock Voir le message
    J'ai développé un thème wordpress, sur lequel j'avais des soucis au moment de l'import dans la base de données, de mes options de thème.
    En effet, j'ai des backslashes devant mes doubles quote dans ma base de données et du coup en front. Exemple <ul class=\"list\">.
    As-tu pensé à vérifier en base si les antislashs y sont enregistrés ? S'ils y sont, alors il faudra nettoyer la base.

Discussions similaires

  1. magic quotes et superglobales ?
    Par tintin72 dans le forum Langage
    Réponses: 4
    Dernier message: 01/04/2009, 11h53
  2. Magic quotes et mysql
    Par ikvat dans le forum Installation
    Réponses: 1
    Dernier message: 27/12/2006, 23h56
  3. Réponses: 3
    Dernier message: 27/11/2006, 19h00
  4. [SQL] magic quotes ou double apostrophes pour échapper apostrophe
    Par zorian dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/03/2006, 17h23

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