[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 -
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
$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.
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:
- [sql] problème avec apostrophe
- Logiciel sql - Télécharger - Bases de données
- Sql (+) - Forum Programmation
- Sql lister les tables ✓ - Forum Programmation
- Requête sql pix - Forum Python
- Jointure sql ✓ - Forum MySQL
11 réponses
Fait une page info.php sur ton serveur avec ce code (le nom de la page importe peu, c'est pour l'exemple):
Tu sauras si magicquote est activé ou non. Dans tout les cas, il ne faut pas mettre stripslashes() dans ta requête.
<?php phpinfo(); ?>
Tu sauras si magicquote est activé ou non. Dans tout les cas, il ne faut pas mettre stripslashes() dans ta requête.
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.
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?
Pour répondre à arthezius :
voila l'enregistrement dans ma bdd a partir du POST.
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
Je ne vois rien de précis qui pourrait poser problème à l'enregistrement dans la BDD.
Sur ta requête:
Place un echo juste après pour vérifier que celle-ci passe correctement.
Logiquement, il devrait te retourner:
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
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
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) ?
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) ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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).
$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).
bonjour,
esseyer
$serie="$_POST[serie]"; et dans la requete utilise
'".mysql_real_escape_string($serie)."'
esseyer
$serie="$_POST[serie]"; et dans la requete utilise
'".mysql_real_escape_string($serie)."'
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 :
j'obtiens ceci :
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 ??
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 ??
as ce que la valeur de $serie ==Ma Famille D'abord