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 :

mysql n'affiche pas les antislash avec mysql_real_escape_string [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut mysql n'affiche pas les antislash avec mysql_real_escape_string
    Je travaille sur une interface d'admin

    Quand j'insère des données avec la fonction (safeQote (voir le fichier joint) les antislash n'apparaissent pas dans la base.

    les modifs de textes se font mais je ne vois pas les antislash dans la base

    Pourtant en retour j'obtiens (par exemple) pour $titre -> \"sans titre\"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si $titre = safeQuote($postArray['editTitre']);
    et $postArray['editTitre'] vaut "sans titre" (avec les guillemets)
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu sais à quoi servent les slashes dans ce contexte ?

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    merci stealth35
    (je ne pouvez pas reçevoir le mail d'avertissement pour ta réponse, maintenant je travaille sur l'ordi qui collecte cette adresse ... désolé de ne pas avoir répondu plus tôt)

    Les antislash je pense qu'ils sont censés prévenir les attaques sql

    (maintenant que je sais qu'il y a la possibilité d'insérer du code je peux écrire ici la fonction safequote que j'ai écrite, ce sera plus simple pour tous

    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
    function safeQuote($value)
    {
    	if (empty($connexion))$connexion = new connexion('maBase');
    	$connexion->open();
     	// Stripslashes si get_magic_quotes_gpc
    	if (get_magic_quotes_gpc()) 
    	{
     		$value = stripslashes($value);
     	}
    	//sauvegarde les accents -> j'en ai besoin pour les appels existants 
    	$value= html_entity_decode($value, ENT_QUOTES, "UTF-8");
    	//echape ce qui doit l'être.
    	$value = mysql_real_escape_string($value);
    	$connexion->close();
    	return $value;
    }
    a bientôt

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Points : 206
    Points
    206
    Par défaut
    Salut, le problème est que tu remets une couche d'antislashes via la fonction $value = mysql_real_escape_string($value);
    Tu n'as "plus besoins" d'échapper tes données pour les afficher.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    bonjour,

    je ne cherche pas à afficher les données mais à les insérer dans la base.
    Après la fonction mysql_real_escape_string (qui est là pour éviter les injections) j'ai une commande INSERT

    Ce qu'il y a de bizarre c'est que les antislash sont bien ajoutés dans la variable php (voir le fichier joint) mais que si je contrôle dans la base (avec php myadmin) ils ne sont pas inscrits.

    En plus si je n'utilise pas "mysql_real_escape_string" dans la mesure ou j'intègre du texte en utf8 la base me renvoie une erreur.

    Du coup je pense que ma fonction est correcte mais je ne comprends pas
    pourquoi je les antislash ne s'affichent pas dans la base.

  6. #6
    Développeuse forum
    Avatar de Atomya Rise
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Février 2009
    Messages
    443
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Somme (Picardie)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 443
    Points : 1 420
    Points
    1 420
    Par défaut
    (par rapport a ta page gregory.php)

    Je vais peut être dire une bêtise mais... a la ligne 18 de ta fonction, cela n'aurais pas du être plutôt comme ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $value = "'" . mysql_real_escape_string($value) . "'";

    Si c'est une bêtise, on oublie hein

    Et a la ligne 41, j'aurais écris ceci à la place car là, tu double tes quotes :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = "UPDATE LOW_PRIORITY articles SET titre=" . $titre . ", texte=" . $texte . " WHERE id = " . $id;

    Si un message vous a aidé, pensez à voter positivement pour lui ! Merci
    Pas de question technique en privé
    - Si on criait sur la place publique les fautes de tout le monde, on ne pourrait plus fréquenter personne ! (Marcel Pagnol)
    - Technocrates, c’est les mecs que, quand tu leur poses une question, une fois qu’ils ont fini de répondre, tu comprends plus la question que t’as posée. (Coluche)

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Atomya Rise
    merci pour ta réponse.

    Utiliser ta proposition à la ligne 18 revient à rajouter des quotes avant l'insertion ... et la ma base (qui semble bien paramétrée) refuse la commande et envoie un message d'erreur.

    ta seconde remarque est juste, mais hélas elle ne modifie rien.
    en fait on peut aussi écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = "UPDATE LOW_PRIORITY articles SET titre=$titre, texte= $texte WHERE id =$id";
    Tout semble dire que le paramétrage de la base interdit l'insertion d'apostrophse (simples ou doubles) sauf s'ils sont échappés.
    Mais que lorsqu'ils sont échappés elle accepte les quotes mais pas les antislash d'échappement.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rogerlenoir Voir le message
    les antislash n'apparaissent pas dans la base.
    Bonjour,
    tu oublies juste que c'est AUSSI de l'affichage de données !

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    jreaux62, merci pour ton intéret.

    Ce serait donc normal ?
    Tu sembles dire qu'il y aurait une fonction du genre stripslashes qui ferait que je ne vois pas les antislash.

    Pourtant si c'était le cas je devrais au moins retrouver mes antislash dans le fichier sql (après avoir fait un export)
    Et ce n'est pas le cas.

    De plus il y a des anciennes données dans cette base (remarque que je sais pas comment elles ont été insérées) et elles ont des antislash
    et chaque fois que j'ouvre ces fichiers dans mon admin et que je les réinjecte les antislash devant les apostrophes (simples ou doubles) ne s'inscrivent plus.

  10. #10
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Atomya Rise

    en fait ma syntaxe était bonne
    c'est bien ainsi que l'on doit écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = "UPDATE LOW_PRIORITY articles SET titre='$titre', texte= '$texte' WHERE id ='$id"';
    suite à ta proposition j'ai proposé une version sans les simples apostrophes qui encadrent la variable, mais cette version renvoie des erreurs.

    Pour info ta version renvoie elle aussi des erreurs
    chez moi il faut encadrer ma variable par des simples quotes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = "UPDATE LOW_PRIORITY articles SET titre='" . $titre . "', texte='" . $texte . "' WHERE id = " . $id;

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Points : 206
    Points
    206
    Par défaut
    Bon béh c'est que tout va bien alors

    Les serveurs ou tu vois un \ s'inscrire dans la base également sont "mal configuré", sont en générale avec magic quotes on (et sans un stripslashes comme dans ta fonction), du coup la variable se prend deux échappements, et donc sql inscrit un \ quand meme, car ta chaine est devenu \\"sans titre\\".

  12. #12
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci Nextdev,
    Grace à toi je vais dormir tranquille !
    Je vais donc marquer ce post comme résolu.

    Et merci aussi à tous ceux qui ont pris la peine de me répondre.

    A+

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

Discussions similaires

  1. Centos 5.7 zenity n'affiche pas les longs messages avec crontab
    Par wodel dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 09/05/2012, 11h27
  2. [ZF 1.11] $form->populate n'affiche pas les libellés avec caractères spéciaux
    Par schwarzy2 dans le forum Zend_Form
    Réponses: 4
    Dernier message: 30/08/2011, 11h10
  3. [Wamp] [MAMP] PHP n'affiche pas les erreurs, même avec display_errors On
    Par Galdon dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 01/02/2010, 18h33
  4. MySQL ne prend pas les ordres donnés par le script PHP
    Par arkelmy dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/04/2006, 02h06
  5. [CR9 et VB6] n'affiche pas les nouvelles donnée
    Par moumoule17 dans le forum SDK
    Réponses: 3
    Dernier message: 22/04/2005, 12h03

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