En php, pour récupérer des informations venant d'un formulaire (ou
autre), il y a beaucoup de façons de le faire... Pour utiliser ces
informations dans, par exemple, une requete SQL, il est obligatoire
d'escaper les chaines pour éviter les failles ou les plantages. Il y a
une fonction pour faire ça. Il y a aussi MagicQuotes qui peut faire ça
de façon automatique, pour éviter qu'un user crée une faille si jamais
il oublie d'escaper.
Mais voila, le probleme, c'est que l'etat de magicquotes n'est parfois
pas le même sur le serveur de développement et sur le serveur de
production. Pire encore, parfois, ça peut changer selon les facéties
d'un admin sadique ;)
Après avoir pas mal galéré avec ce probleme, surtout avec un seul
serveur de dev pour plusieurs sites avec chacuns un serveur avec des
config differentes, voila ma solution, que j'utilise sur plusieurs
sites, dont celui là. Il suffira de mettre ce code dans un fichier
d'include qui sera executé pour chaque page, et au final on aura deux
tableaux globaux : il suffira de lire les informations non escapés
dans $in_['param'] et celles qui doivent être parsés dans
$in['param'] (param etant ici le nom de l'argument que l'on
veut consulter) et cela quelque soit la configuration de magicquote,
on ou off. :)
edit: il a fallu remplacer $HTTP_GET_VAR par $_GET (et pareil pour
$_POST). Ils sont un peu lourds de changer des noms de variables
comme ça, mais bon ça faisait un peu super longtemps que j'avais
écrit ce code. Mais ça ne fait pas plaisir quand une applie est
subitement down à cause d'une upgrade de php :(
Au moins grâce à ce code, je n'ai eu besoin de changer ça que
dans une seule partie de mes sites, et non pas partout.
<?php
/*
Routine de récupérations des arguments quelque soit la configuration
de magicquotes. On récupére tout dans les tableaux $in et $in_.
http://clx.freeshell.org/
*/
set_magic_quotes_runtime(0);
$in = array();
$in_ = array();
if( get_magic_quotes_gpc() ) {
if( is_array($_GET)) {
foreach ($_GET as $variable => $value ) {
$in_[$variable] = StripSlashes($value);
$in[$variable] = $value;
}
}
if( is_array($_POST)) {
foreach ($_POST as $variable => $value ) {
$in_[$variable] = StripSlashes($value);
$in[$variable] = $value;
}
}
}
else {
if( is_array($_GET)) {
foreach ($_GET as $variable => $value ) {
$in_[$variable] = $value;
$in[$variable] = AddSlashes($value);
}
}
if( is_array($_POST)) {
foreach ($_POST as $variable => $value ) {
$in_[$variable] = $value;
$in[$variable] = AddSlashes($value);
}
}
}
?>