[sql] problème avec apostrophe

Résolu
okuni Messages postés 1325 Statut Membre -  
arthezius Messages postés 3756 Statut Membre -
Bonjour,
J'ai un problème avec la légendaire apostrophe ^^'

voici ma requete
SELECT id,serie FROM serie WHERE serie="'.mysql_real_escape_string(stripslashes($serie)).'" ORDER BY serie ASC

$serie contient une chaine avec 2 apostrophes (That's 70's Show).
j'ai rajouté stripslashes() car je ne sais pas trop si magicquote est activé ou non.

la valeur dans ma table est celle ci : That\'s 70\'s Show.

sauf que voila, ma requête ne retourne rien !
J'ai essayé avec addslashes() et parail, aucun résultat :(

Qualqu'un pourrait m'aider ?

ps : avec $serie égal a une chaine sans apostrophe, le script fonctionne.

Merci d'avance.
--
L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge)

11 réponses

  1. arthezius Messages postés 3756 Statut Membre 475
     
    Fait une page info.php sur ton serveur avec ce code (le nom de la page importe peu, c'est pour l'exemple):
    <?php
    phpinfo();
    ?>

    Tu sauras si magicquote est activé ou non. Dans tout les cas, il ne faut pas mettre stripslashes() dans ta requête.
    0
    1. okuni Messages postés 1325 Statut Membre 126
       
      Ok mais de toute façon, avec ou sans, ça ne change rien.
      0
    2. arthezius Messages postés 3756 Statut Membre 475
       
      Peux-tu me mettre ici la requête qui te permet d'ajouter les données à la BDD?
      0
  2. pascalou_es-tu
     
    Si tu ne souhaites pas avoir de soucis avec les quotes utilise ' [ALT Gr]+7.
    0
    1. okuni Messages postés 1325 Statut Membre 126
       
      Hein ? ^^"
      0
  3. okuni Messages postés 1325 Statut Membre 126
     
    Pour répondre à arthezius :
    voila l'enregistrement dans ma bdd a partir du POST.
    $serie = $_POST['serie'];
    $serie = ucwords(strtolower($serie));//on met en majuscule les 1er lettre de chaque mot, les autres sont en minuscules.
    $serie = Trim($serie);
    $serie = mysql_real_escape_string(htmlspecialchars($serie));
    
    puis la requete ou j'ajoute directement $serie
    
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      Ben justement, met moi ta requête aussi.
      0
    2. okuni Messages postés 1325 Statut Membre 126
       
      'INSERT INTO raynal_video_serie
      (serie,type,description,realisateur,genre,genre2,format,creation,auteur,compteur)
      VALUES("'.$serie.'", "'.$type.'", "'.$description.'", "'.$realisateur.'", "'.$genre.'", "'.$genre2.'", "'.$format.'", NOW(), "'.$id_user.'", "0")'
      0
    3. arthezius Messages postés 3756 Statut Membre 475
       
      Je ne vois rien de précis qui pourrait poser problème à l'enregistrement dans la BDD.

      Sur ta requête:
      SELECT id,serie FROM serie WHERE serie="'.mysql_real_escape_string($serie).'" ORDER BY serie ASC

      Place un echo juste après pour vérifier que celle-ci passe correctement.
      $sql='SELECT id,serie FROM serie WHERE serie="'.mysql_real_escape_string($serie).'" ORDER BY serie ASC';
      echo $sql;

      Logiquement, il devrait te retourner:
      SELECT id,serie FROM serie WHERE serie="That\'s 70\'s Show" ORDER BY serie ASC
      0
  4. okuni Messages postés 1325 Statut Membre 126
     
    SELECT id,serie FROM raynal_video_serie WHERE serie="Ma Famille D\'abord" ORDER BY serie ASC

    bon c'est un autre nom mais le problème est le même
    voici ce que me retourne $serie avant la requete
    Ma Famille D'abord

    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      L'anti-slashes est ajouté par la fonction mysql_real_escape_string().
      C'est normal s'il n'apparaît pas avant la requête et c'est également pour cette raison qu'il ne fallait pas mettre stripslashes() dans ta requête.

      Comme tu utilises la même fonction sur la requête d'ajout à la base de donnée, tu devrais avoir la même valeur dans la base de donnée.

      Vérifie en passant par PhpMyAdmin que tu as bien Ma Famille D\'abord d'enregistré.

      Si le texte est exactement identique entre ta requête et la valeur de ta base de donnée, il n'y a aucune raison que ça ne fonctionne pas.

      D'où proviens ta variable $serie de ta requête (avec le SELECT) ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. okuni Messages postés 1325 Statut Membre 126
     
    Ma chaine dans ma table est bien celle ci : Ma Famille D\'abord

    $serie provient d'un fichier txt que j'extrais avec unserialize.
    et lors de l'enregistrement de ce fichier, j'ai mis plusieurs données dans un tableau que je serialize pour le transport (dans le fichier).
    0
  7. okuni Messages postés 1325 Statut Membre 126
     
    Alors ? une idée de l'origine du problème ?
    0
  8. okuni Messages postés 1325 Statut Membre 126
     
    UP :)
    je suis vraiment dans la panade là xD
    0
  9. okuni Messages postés 1325 Statut Membre 126
     
    Personne ? Vraiment personne ? :'(
    0
  10. ALIMIRO Messages postés 106 Statut Membre
     
    bonjour,

    esseyer
    $serie="$_POST[serie]"; et dans la requete utilise

    '".mysql_real_escape_string($serie)."'
    0
    1. okuni Messages postés 1325 Statut Membre 126
       
      C'est déjà fait.
      0
    2. ALIMIRO Messages postés 106 Statut Membre
       
      $s="$_POST[serie]";

      '".mysql_real_escape_string($s)."'

      remarque b1 " " dans "$_POST[serie]";
      0
    3. okuni Messages postés 1325 Statut Membre 126
       
      Je ne comprend pas ta dernière ligne.
      remarque b1 " " dans "$_POST[serie]";
      0
    4. ALIMIRO Messages postés 106 Statut Membre
       
      c-a-d met $_POST[serie] entre " "
      0
    5. okuni Messages postés 1325 Statut Membre 126
       
      mais qu'est ce que ça change avec ton post précédent ?
      0
  11. okuni Messages postés 1325 Statut Membre 126
     
    Alors voila, j'ai fait quelque test.
    Si je prend toute ma table et que je fais la comparaison via php, ça fonctionne mais gros problème, je bouffe de la ressource a fond.

    Autrement, c'est en rajoutant addslashes() comme ceci :
    $sql = 'SELECT id,serie FROM raynal_video_serie WHERE serie="'.mysql_real_escape_string(addslashes($serie)).'" ORDER BY serie ASC';

    j'obtiens ceci :
    SELECT id,serie FROM raynal_video_serie WHERE serie="Ma Famille D\\\'abord" ORDER BY serie ASC

    et bizarrement, pour sql
    ça : Ma Famille D\\\'abord
    et ça : Ma Famille D\'abord
    C'est la même chose ...

    Vous comprenez quelque chose ??
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      addslashes fait la même chose que mysql_real_escape_string.
      Autrement dit, ces deux fonctions te rajoute un slashes devant l'apostrophe.

      Essai en remplaçant la fonction addslashes par stripslashes.
      0
  12. ALIMIRO Messages postés 106 Statut Membre
     
    as ce que la valeur de $serie ==Ma Famille D'abord
    0
    1. okuni Messages postés 1325 Statut Membre 126
       
      oui c'est bien cette chaine de caractère
      0
    2. ALIMIRO Messages postés 106 Statut Membre
       
      J'ai le même problème il ya quelque temps...

      $s="$_POST[le nom de cham qui contient la valeur de serie]";

      $sql ="SELECT id,serie FROM raynal_video_serie WHERE serie="'.mysql_real_escape_string(($s)).'" ";

      copier et coller le test...

      mon probleme avec l'insertion
      0
    3. ALIMIRO Messages postés 106 Statut Membre
       
      Si cela ne fonctionne pas j'ai une autre façon...
      0
    4. okuni Messages postés 1325 Statut Membre 126
       
      ça ne fonctionne pas.
      J'ai alors modifier manuellement les nom dans ma table en enlevant les " \ " et ça fonctionne.

      Merci de vos aides.
      0
    5. arthezius Messages postés 3756 Statut Membre 475
       
      Bon, ben si ton problème est résolu, oubli ne tiens pas compte de mon dernier message.
      0