Problème SQL/PHP

Résolu/Fermé
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 - 27 sept. 2009 à 00:32
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 - 27 sept. 2009 à 10:52
Bonjour,

J'ai un script PHP qui me permet de supprimer un élément dans ma base de donnée. Il fonctionne très bien, sauf pour supprimer un élément contenant le caractère '. Y-a-t-il une solution pour résoudre ce problème ? Merci !
A voir également:

12 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
27 sept. 2009 à 10:29
Tu peux soit échapper les caractères avec addslashes ou bien mettreta chaine entre deux `.
Exemples :
$req=mysql_query('DELETE FROM Carte WHERE Nom=`'.$_SESSION['selection3'].'`') or die('Erreur'.mysql_error()); 
Ou
$req=mysql_query('DELETE FROM Carte WHERE Nom="'.addslashes($_SESSION['selection3']).'"') or die('Erreur'.mysql_error());
1
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
27 sept. 2009 à 10:35
C'est que la deuxième fonctionne mais dans ta base de données, tu n'as pas utiliser la fonction addslashes alors tu as ça dans ta base de données :
Coucou, je m'casse

Et tu cherche à supprimer :
Coucou, je m\'casse


Essaye avec ça :
$req=mysql_query("DELETE FROM Carte WHERE Nom=`".$_SESSION['selection3']."`") or die('Erreur'.mysql_error()); 
1
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
27 sept. 2009 à 10:42
re :)

as tu essayé en ajoutant un rawurlencode et rawurldecode ?
1
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
27 sept. 2009 à 10:52
J'ai réussi à contourner ce maudit problème finalement.
Le problème venait de la valeur retournée par mon $_POST qui ne renvoyait à la base que autumn et non autumn'tears.
Dire que la solution était juste là...
Enfin, merci tout de même pour votre aide, ça m'a permis d'apprendre de nouvelles fonctions !
1

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

Posez votre question
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
27 sept. 2009 à 00:36
Échappe le ' par un anti-slashe comme ceci : \'
Si c'est une variable qui contient cet apostrophe, utilise addslashes.
0
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
27 sept. 2009 à 00:37
Sans aucun code c'est difficile à être explicite mais à priori tu devrais regarder du côté des caractères d'échappement, soit de PHP, soit de ton SGBD, soit des deux.

l'anti-slash en PHP, le simple quote pour PgSQL....

Sachant que, bien entendu, il existe des fonctions qui sont capables d'échapper les méta-caractères d'une chaîne. Encore faut-il chercher et trouver la bonne, chaque langage a les siens ...
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
27 sept. 2009 à 00:45
Bon, je poste la partie de code qui gère la suppression :
$req=mysql_query("DELETE FROM Carte WHERE Nom='".$_SESSION['selection3']."'") or die("Erreur".mysql_error());
Sachant que dans la base, le champ Nom est la clé primaire.
Le problème se fait au niveau de mon $_SESSION['selection3'] qui ne fonctionne pas si je veux supprimer l'élément autumn'tears, par exemple.
0
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
27 sept. 2009 à 00:57
$req=mysql_query("DELETE FROM Carte WHERE Nom='".mysql_real_escape_string($_SESSION['selection3'])."'") or die("Erreur".mysql_error()); 
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
27 sept. 2009 à 01:09
J'ai testé dans un echo, il ne renvoie que la valeur de autumn. Même résultat avec addashes.
Je suis à court d'idée...
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
27 sept. 2009 à 08:29
bonjour :)

sinon, essai ca :

$req=mysql_query("DELETE FROM Carte WHERE Nom=`".$_SESSION['selection3'])."`") or die("Erreur".mysql_error());
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
27 sept. 2009 à 10:32
Bonjour,

Ni l'une ni l'autre des solutions ne fonctionnent, je viens de les tester. Pour la première elle me renvoie une erreur, et la seconde ne me renvoie pourtant aucune erreur.
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
27 sept. 2009 à 10:38
En fait, le problème reste toujours le même, si je veux supprimer autumn'tears, il ne m'affiche plus qu'autumn, même avec un addslashes quand je fais un echo. Donc il envoie une valeur inexistante à ma base et la requête ne peut pas fonctionner
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
27 sept. 2009 à 10:43
Eh non je connais pas cette fonction :S
Je vais essayer ça de suite
0