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 :

Antislashs pas enregistrés malgré addslashes()


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 852
    Par défaut Antislashs pas enregistrés malgré addslashes()
    Bonjour,

    Je n'arrive pas à enregistrer dans ma bdd des valeurs avec des antislashs.

    Code PHP :
    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
     
    $matricule = addslashes($_SESSION['matricule']);
    $entite = addslashes($_POST['entite']);
    $listenom = addslashes($_POST['listenom']);
    $date = time();
     
    // requête insertion
    $requete = "
    	INSERT INTO `base`.`listes`
    	(`id_liste`, `matricule`, `entite`, `nom_liste`, `date`)
    	VALUES ('' , '$matricule', '$entite', '$listenom', '$date');
    ";
     
    $insertion = mysql_query($requete) OR die('Requête invalide : ' . mysql_error());
     
    if ( $insertion ) {
    	echo '<p>Enreg bdd ok</p>';
    	echo $requete;
    }
    Si je donne par exemple la valeur "A" (avec les guillemets) au champ listenom dans mon formulaire, la requête obtenue avec l'echo est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO `base`.`listes` (`id_liste`, `matricule`, `entite`, `nom_liste`,  `date`) VALUES ('' , 'moi', 'BAT', '\"A\"', '1228402448');
    Ce qui est correct puisque j'ai bien les antislashs ajoutés.

    Or si je vais voir dans PhpMyAdmin aucune valeur n'a d'antislash. Cela me pose un problème à l'extraction des données, je fais un stripslashes() (qui est inutile...) et mes valeurs s'affichent mal.

    Config :
    Wamp 2.0c sous XP
    PHP Version 5.0.3
    MySQL 4.1.22
    Magic quotes désactivés dans le php.ini

    Est-ce que vous avez une idée de l'origine du problème ? Moi je n'y comprend rien

    Merci d'avance !

  2. #2
    Membre éclairé
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 852
    Par défaut
    Bonjour,

    Je sèche toujours sur ce problème... Je me demande si je ne fais pas fausse route, est-ce que le fait de faire un simple echo $requete; suffit pour savoir quelle est la requête exacte qui est exécutée ? Bref j'aimerais savoir exactement le processus d'insertion, et à quel endroit les antidlashs disparaissent...

  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
    Par défaut
    Bonjour,

    Tes antislash sont traités ici comme des caracteres d'echappement pour PHP : ils indiquent à PHP que les guillemets sont a traiter comme le caractere guillemets et non comme un fin de chaine.
    Les antislash ne sont donc pas présent dans la requete qui est traitée.

    La donnée inserée dans ta base est donc celle que tu as tapée dans ton champ et tu n'as pas besoin de faire d'opération pour le retraiter ensuite.

    C'est bien ce que tout le monde voudrait non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre éclairé
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 852
    Par défaut
    Bonjour,

    En fait le problème est que les apostrophes sont alors enregistrés sans échappement. A l'extraction, ils provoquent donc des erreurs.

    Exemple :
    - Je tape [ l'aspostrophe ] dans mon formulaire
    - Avec addslashes() la requête est INSERT... l\'apostrophe
    - dans PhpMyAdmin j'ai le champ l'apostrophe
    - à l'extraction j'ai donc echo 'blabla code l'apostrophe'
    - Erreur au caractère rouge

    Est-ce qu'il faut ajouter les addslashes() au moment de l'extraction alors ? Je pensais enregistrer le \ dans la base, pour le "striper" ensuite et afficher correctement ma chaîne. C'est pas la bonne solution apparemment ?

  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
    Par défaut
    La base de donnée doit contenir des données brutes.

    Pour afficher correctement tes guillemets en HTML, tu peux ensuite appliquer htmlentities() ou htmlspecialchars()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éclairé
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 852
    Par défaut
    Ok merci je vais essayer ces fonctions !

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/10/2006, 08h24
  2. Réponses: 11
    Dernier message: 16/05/2006, 12h34
  3. [MySQL] Mon livre d'or ne veut pas enregistrer les messages
    Par Invité dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 15/03/2006, 16h28
  4. Erreur : La classe n'est pas enregistrée
    Par Le Pharaon dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/08/2005, 12h04
  5. comment ne pas enregistrer dans le fichier log?
    Par trotters213 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 21/03/2005, 14h56

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