[sql] problème avec apostrophe

Résolu/Fermé
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 23 mai 2011 à 19:32
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 - 6 juin 2011 à 01:17
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 jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
23 mai 2011 à 20:52
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
23 mai 2011 à 21:13
Ok mais de toute façon, avec ou sans, ça ne change rien.
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
24 mai 2011 à 05:49
Peux-tu me mettre ici la requête qui te permet d'ajouter les données à la BDD?
0
pascalou_es-tu
23 mai 2011 à 23:30
Si tu ne souhaites pas avoir de soucis avec les quotes utilise ' [ALT Gr]+7.
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
24 mai 2011 à 16:49
Hein ? ^^"
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
24 mai 2011 à 16:51
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 jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
24 mai 2011 à 17:01
Ben justement, met moi ta requête aussi.
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
24 mai 2011 à 17:10
'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 jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
24 mai 2011 à 17:40
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
24 mai 2011 à 18:02
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 jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
Modifié par arthezius le 24/05/2011 à 18:21
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
24 mai 2011 à 18:31
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
27 mai 2011 à 13:29
Alors ? une idée de l'origine du problème ?
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
30 mai 2011 à 20:32
UP :)
je suis vraiment dans la panade là xD
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
1 juin 2011 à 19:44
Personne ? Vraiment personne ? :'(
0
ALIMIRO Messages postés 104 Date d'inscription lundi 18 avril 2011 Statut Membre Dernière intervention 23 juin 2011
1 juin 2011 à 22:26
bonjour,

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


'".mysql_real_escape_string($serie)."'
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
2 juin 2011 à 13:24
C'est déjà fait.
0
ALIMIRO Messages postés 104 Date d'inscription lundi 18 avril 2011 Statut Membre Dernière intervention 23 juin 2011
3 juin 2011 à 22:18
$s="$_POST[serie]";

'".mysql_real_escape_string($s)."'

remarque b1 " " dans "$_POST[serie]";
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
4 juin 2011 à 08:21
Je ne comprend pas ta dernière ligne.
remarque b1 " " dans "$_POST[serie]";
0
ALIMIRO Messages postés 104 Date d'inscription lundi 18 avril 2011 Statut Membre Dernière intervention 23 juin 2011
4 juin 2011 à 12:15
c-a-d met $_POST[serie] entre " "
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
4 juin 2011 à 12:22
mais qu'est ce que ça change avec ton post précédent ?
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
5 juin 2011 à 17:28
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 jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
6 juin 2011 à 01:15
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 lundi 18 avril 2011 Statut Membre Dernière intervention 23 juin 2011
5 juin 2011 à 18:03
as ce que la valeur de $serie ==Ma Famille D'abord
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
5 juin 2011 à 18:06
oui c'est bien cette chaine de caractère
0
ALIMIRO Messages postés 104 Date d'inscription lundi 18 avril 2011 Statut Membre Dernière intervention 23 juin 2011
Modifié par ALIMIRO le 5/06/2011 à 18:12
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 lundi 18 avril 2011 Statut Membre Dernière intervention 23 juin 2011
5 juin 2011 à 18:21
Si cela ne fonctionne pas j'ai une autre façon...
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
5 juin 2011 à 18:30
ç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 jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
6 juin 2011 à 01:17
Bon, ben si ton problème est résolu, oubli ne tiens pas compte de mon dernier message.
0