Rajout de slash ou pas

Eléphanteau du PHP | 49 Messages

29 oct. 2008, 13:13

Bonjour,

J'ai une fonction
function AjoutSlash($chaine) 
   {if ( !get_magic_quotes_gpc() ) $chaine = addslashes($chaine) ; 
    return $chaine ; 
   } 
qui m'affiche ça lorsque je fais un echo d'une requette sur mon ordi
SELECT * FROM jeu1_palmares WHERE saison='6' and joueur='' and (type like 'Champ. E%' or type='Coupe d\'Espagne') ORDER BY type

mais qui m'affiche ça sur mon site
SELECT * FROM jeu1_palmares WHERE saison='6' and joueur='' and (type like 'Champ. E%' or type='Coupe d'Espagne') ORDER BY type

Qq'un peut-il me dire pourquoi ?
Merci
TiFred
Apprenti webmaster

Eléphanteau du PHP | 49 Messages

04 nov. 2008, 15:03

Salut,

Qq'un a-t-il une idée ?
Merci
TiFred
Apprenti webmaster

ViPHP
AB
ViPHP | 5818 Messages

04 nov. 2008, 15:17

Et elle intervient où cette fonction dans ta requête ? C'est quoi le code intermédiaire ?

Eléphanteau du PHP | 49 Messages

04 nov. 2008, 18:37

Voilà un bout du code :
       $req2 = Envoierequette($db,"SELECT * FROM jeu1_pays") ;
        while($data = mysqli_fetch_assoc($req2))
           {$pays2 = $data[@pays] ; $text = $data[@text] ;
            echo "<tr><td><b>$pays2</b></td><td>" ;
echo"<br />SELECT * FROM jeu1_palmares WHERE saison='".$i."' and joueur='' and (type like 'Champ. ".substr($pays2,0,1)."%' or type='Coupe ".AjoutSlash($text)."') ORDER BY type" ;
            $req3 = Envoierequette($db,"SELECT * FROM jeu1_palmares WHERE saison='".$i."' and joueur='' and (type like 'Champ. ".substr($pays2,0,1)."%' or type='Coupe ".AjoutSlash($text)."') ORDER BY type") ;
Merci
TiFred
Apprenti webmaster

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

04 nov. 2008, 18:43

Plutôt que de bricoler une fonction ajoutslash() (même si ça part d'un bon sentiment),
il me paraît plus sûr d'utiliser la fonction mysql_real_escape_string()

Mammouth du PHP | 693 Messages

04 nov. 2008, 19:05

Sauf que mysql_real_escape_string() ne regarde pas si la chaine est déjà échappé ou pas. Si magic_quote est activé, on se retrouve avec 3 slashes au lieu d'un seul.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

04 nov. 2008, 19:22

Si tu as la main sur ton serveur (le php.ini, tout au moins), désactive cette option
sinon, ceci devrait faire l'affaire :
ini_set('magic_quote_gpc', FALSE);

ViPHP
AB
ViPHP | 5818 Messages

04 nov. 2008, 20:32

Sauf que mysql_real_escape_string() ne regarde pas si la chaine est déjà échappé ou pas. Si magic_quote est activé, on se retrouve avec 3 slashes au lieu d'un seul.
Oui, mais outre la solution d'albat on peut alors utiliser stripslashes (si magic quote est activé) et ensuite mysql_real_escape_string()
Un exemple d'utilisation dans le code php de ce tuto http://www.phpfrance.com/forums/voir_sujet-242539.php

Eléphanteau du PHP | 49 Messages

07 nov. 2008, 16:49

Si tu as la main sur ton serveur (le php.ini, tout au moins), désactive cette option
sinon, ceci devrait faire l'affaire :
ini_set('magic_quote_gpc', FALSE);
J'ai rajouté le init_set() en haut de la page mais cela ne change rien
Une idée ?
Merci
TiFred
Apprenti webmaster

ViPHP
AB
ViPHP | 5818 Messages

07 nov. 2008, 17:15

Oui, mais outre la solution d'albat on peut alors utiliser stripslashes (si magic quote est activé) et ensuite mysql_real_escape_string()
Un exemple d'utilisation dans le code php de ce tuto http://www.phpfrance.com/forums/voir_sujet-242539.php
:roll: