[sql] problème avec apostrophe

Résolu
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   -  
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

11 réponses

arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   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
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Ok mais de toute façon, avec ou sans, ça ne change rien.
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Peux-tu me mettre ici la requête qui te permet d'ajouter les données à la BDD?
0
pascalou_es-tu
 
Si tu ne souhaites pas avoir de soucis avec les quotes utilise ' [ALT Gr]+7.
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Hein ? ^^"
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   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
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Ben justement, met moi ta requête aussi.
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   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
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   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
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   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
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   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
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Alors ? une idée de l'origine du problème ?
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
UP :)
je suis vraiment dans la panade là xD
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Personne ? Vraiment personne ? :'(
0
ALIMIRO Messages postés 104 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,

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


'".mysql_real_escape_string($serie)."'
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
C'est déjà fait.
0
ALIMIRO Messages postés 104 Date d'inscription   Statut Membre Dernière intervention  
 
$s="$_POST[serie]";

'".mysql_real_escape_string($s)."'

remarque b1 " " dans "$_POST[serie]";
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Je ne comprend pas ta dernière ligne.
remarque b1 " " dans "$_POST[serie]";
0
ALIMIRO Messages postés 104 Date d'inscription   Statut Membre Dernière intervention  
 
c-a-d met $_POST[serie] entre " "
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
mais qu'est ce que ça change avec ton post précédent ?
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   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
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   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
ALIMIRO Messages postés 104 Date d'inscription   Statut Membre Dernière intervention  
 
as ce que la valeur de $serie ==Ma Famille D'abord
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
oui c'est bien cette chaine de caractère
0
ALIMIRO Messages postés 104 Date d'inscription   Statut Membre Dernière intervention  
 
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
ALIMIRO Messages postés 104 Date d'inscription   Statut Membre Dernière intervention  
 
Si cela ne fonctionne pas j'ai une autre façon...
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   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
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Bon, ben si ton problème est résolu, oubli ne tiens pas compte de mon dernier message.
0