Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Philosophie $_GET, $_POST,$_COOKIES et prise de chou (hibou, pou..)

5 réponses
Avatar
xpatval
Bonjour,

On le sait, depuis la mise à off par défaut de register_globals, les
variables doivent être, si ne n'était déjà fait, importées soit par $_GET ou
$_POST ($HTTP_GET_VARS, $HTTP_POST_VARS). Pour cela, 3 options existent (du
moins, à ma connaissance):

- Celle décrite ci-dessus
- import_request_variables()
- extract()

Ayant testé les 3 options, pour maj de mes scripts, je m'aperçois que pour
éviter toute embrouille d'écrasement de la méthode d'importation, la
meilleure option était l'extract. Dans mon cas, certains scripts utilisent
des formulaires par la méthode POST, mais certains liens d'autres scripts
peuvent appeler les premiers (<a href="toto.php?parm=ouille">), donc, GET
par défaut.
Donc, ecrasement de la méthode, et plantage.
Mais alors, pourquoi vouloir utiliser $_GET, ou $_POST, si l'extract() fait
la même chose, en plus simple, car 2 lignes suffisent ?
Je me dis que j'ai loupé quelque chose, là...Non ?

Ah bon...

xpatval

5 réponses

Avatar
John Gallet
Bonsoir,

On le sait, depuis la mise à off par défaut de register_globals, les
variables doivent être, si ne n'était déjà fait, importées


Oui mais non. Nous sommes bien d'accord que register_globals à Off est une
mauvaise réponse à une bonne question, ou plus précisement n'est pas la
meilleure des réponse qu'on aurait pu apporter (il suffisait de remonter le
niveau standard de warning sur les variables non définies). Mais ce
mécanisme évite quand même à beaucoup "d'étourdis" de faire des bêtises.

Mais bon si tu y tiens vraiment attention :
http://fr2.php.net/manual/en/function.extract.php :

Do not use extract on untrusted data, like user-input ($_GET, ...). If you
do it, for example if you want to run old code that relies on
register_globals temporarily, make sure you use one of the non-overwriting
extract_type values like EXTR_SKIP, and be aware that you should now extract
$_SERVER, $_SESSION, $_COOKIE, $_POST and $_GET in that order.

Alors que http://fr2.php.net/manual/en/function.import-request-variables.php
est plutôt faite pour ça :

Imports GET/POST/Cookie variables into the global scope. It is useful if you
disabled register_globals, but would like to see some variables in the
global scope.


Mais alors, pourquoi vouloir utiliser $_GET, ou $_POST, si l'extract() fait
la même chose, en plus simple, car 2 lignes suffisent ?
Je me dis que j'ai loupé quelque chose, là...Non ?


Utilise $_REQUEST[ ] dans une fonction de filtrage qui sera ton point
d'accès unique aux données venat de l'extérieur (et donc en lesquelles on ne
peut avoir aucune confiance) et te pose pas d'autres questions ;-)

a++
JG

Avatar
loufoque
Message d'origine de xpatval :
- Celle décrite ci-dessus [Utiliser $_GET ou $_POST]
- import_request_variables()
- extract()

Ayant testé les 3 options, pour maj de mes scripts, je m'aperçois que pour
éviter toute embrouille d'écrasement de la méthode d'importation, la
meilleure option était l'extract.


La troisième méthode est la pire.
La seule méthode correcte consiste à utiliser directement les tableaux
$_GET et $_POST

Avatar
Nicklas
Le Fri, 05 Mar 2004 15:59:01 +0000, xpatval a écrit :

Bonjour,

On le sait, depuis la mise à off par défaut de register_globals, les
variables doivent être, si ne n'était déjà fait, importées soit par $_GET ou
$_POST ($HTTP_GET_VARS, $HTTP_POST_VARS). Pour cela, 3 options existent (du
moins, à ma connaissance):

- Celle décrite ci-dessus
- import_request_variables()
- extract()


Tu as plusieurs tableaux disponibles $_GET, $_POST, $_REQUEST
et même $GLOBALS

Je te propose une petite librairie que j'ai développé
pour être indépendant du fonctionnement de PHP. Si PHP
change sa gestion, je n'aurai qu'à modifier ma librairie.

Regarde la librairie 6 :
http://www.progweb.com/modules/cours/consult.php?own=4&numR

Elle te permettra de faire :
$request = new Secure();
$request->setMode(GET | POST); // Pour prendre aussi bien GET/POST
puis à ta guise :
// Pour un nombre...
$num = $request->Number('nom_de_la_variable', [valeur par défaut]);
// Récupérer la variable sans traitement
$num = $request->Get('nom_de_la_variable');
// Un mail :
$mail = $request->Mail('nom_du_champ_de_formulaire');

Si tu veux traiter les sessions, tu fais :
$request->setMode(SESSION);
$user = $request->Get('nom...');

etc...

Je compte mettre d'autres filtres... (en cours de développement)

--
Nicklas
ProgWeb - Développer son site Internet
http://www.progweb.com

Avatar
destroyedlolo
loufoque wrote:

La troisième méthode est la pire.
La seule méthode correcte consiste à utiliser directement les tableaux
$_GET et $_POST


La meilleur facon est $_REQUEST car tu t'affranchie totalement de la
methode utisee (GET our POST).

Lolo (de passage)


--
Amiga, UNIX Le tout avec pleins de fautes d'orthographe ...
Sharp, NetBSD http://go.to/destroyedlolo
Apache, PHP http://destroyedlolo.homeunix.org:8080/
Vacances, Voyages 100 % dictionnary free - 1 mispelling by word

Avatar
loufoque
Message d'origine de destroyedlolo :
La meilleur facon est $_REQUEST car tu t'affranchie totalement de la
methode utisee (GET our POST).

Ben normalement on est pas censés mélanger les deux méthodes...