requete sql avec apostrophe problématique

Eléphant du PHP | 112 Messages

20 nov. 2010, 03:34

Bonjour,

Voici un problème qui me tient en suspens depuis trop longtemps, et le fera sans doute encore sans une aide.
J'essaie de supprimer en base de données des chaines susceptibles de contenir des apostrophes.
Si par exemple j'ai en base: saucisse à l'ail, en faisant par l'interface sql de phpmyAdmin, la requete
DELETE FROM `matable` WHERE produit='saucisse à l\'ail' LIMIT 1
je fais disparaitre la saucisse à l'ail.
Mais pas avec ce script php, exécuté à partir de mon site
$suppression_dans_matable ="DELETE FROM `matable` WHERE `produit`='".$_GET['suppr']."'  LIMIT 1";
									$suppression= mysql_query($suppression_dans_matable);
									if(!$suppression_dans_table){echo mysql_error();}
script dans lequel on a bien:
echo $_GET['suppr'];  //saucisse a l\'ail
Et je n'ai pas meilleur résultat avec
$suppression_dans_matable ='DELETE FROM `matable` WHERE `produit`=\''.$_GET['suppr'].'\'  LIMIT 1'
$suppression= mysql_query($suppression_dans_matable);
									if(!$suppression_dans_table){echo mysql_error();}
Si dans ma table j'ai: poivre, l'huile, l'oeuf, boite à oeufs à supprimer, le script fonctionne, et avec la saucisse à l'ail ou les sardines à l'huile,jamais.
J'ai tout essayé des str_replace, stripslashes, addslashes...
D'avance merci pour le coup de main,
Bien cordialement,

Thierry

ViPHP
AB
ViPHP | 5818 Messages

20 nov. 2010, 04:44

Essais d'utiliser cette fonction qui vient de ce tuto en utilisant cette syntaxe.
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
} 

$produit = Verif_magicquotes($_GET['suppr']);

$requete ="DELETE FROM matable  WHERE  produit = '".mysql_real_escape_string($produit)."'  LIMIT 1";

$suppression = mysql_query($requete);

if(!$suppression){echo mysql_error();}
ça renvoi quoi ?

Eléphant du PHP | 112 Messages

20 nov. 2010, 12:02

Bingo!
Ouf!
Grand merci, j'avais passé des heures pour essayer de débloquer ça.
En fait, le problème venait de ce que l'interclassement de matable était latin.., quand je l'ai passé sur uft-8, ça a fonctionné, en l'état.
Avec ton script, il faut remplacer mysql_real_escape_string() par addslashes() pour que cela fonctionne.
Merci encore, et bon W.E,

Thierry

ViPHP
AB
ViPHP | 5818 Messages

20 nov. 2010, 19:25

Bingo!
Ouf!
Grand merci, j'avais passé des heures pour essayer de débloquer ça.
En fait, le problème venait de ce que l'interclassement de matable était latin.., quand je l'ai passé sur uft-8, ça a fonctionné, en l'état.
Avec ton script, il faut remplacer mysql_real_escape_string() par addslashes() pour que cela fonctionne.
Merci encore, et bon W.E,

Thierry
Heu normalement non, il ne faut pas remplacer mysql_real_escape_string() par addslashes() pour que cela fonctionne, il n'y a aucune raison de faire cela. Regardes la doc sur la fonction mysql_real_escape_string
Cette fonction doit toujours (avec quelques exceptions) être utilisée pour protéger vos données avant d'envoyer la requête à MySQL
et je doute fort que les besoins de ton code fassent partie des exceptions :wink:

devlop78
Invité n'ayant pas de compte PHPfrance

22 nov. 2010, 04:53

sinon désactiver les magic quotes ... pensez à php6 ;)