8722 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai des formulaires avec une trentaine de champs, en migrant vers php 5.3 je suis obligé de les déclarer en debut de page pour leur traitement.

Est-ce quelqu'un a sous la main une Fonction de déclaration
for each ($_POST)
$variable=$_POST['$variable'];

Mais qui une qui fonctionne

(donc pas comme la mienne ! Smiley cligne )
Salut,

Remarque sur les variables super-globales que tu utilises.
"php" a écrit :
Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

L'idéal est de le faire "manuellement" :
$nom=$_POST['$nom'];
$prenom=$_POST['$prenom'];
// etc...

Tu peux éventuellement utiliser aussi la fonction extract.
Le code suivant, ou bien la fonction extract :

foreach ($_POST as $key=>$value) $$key=$value;


Par contre, c'est une très mauvaise pratique, et il est recommandé de ne pas le faire pour éviter des potentiels problèmes de sécurité.

A noter que c'était exactement le rôle de l'option REGISTER_GLOBALS de php3, qui a été très fortement critiquée puis désactivée par défaut, justement à cause des problèmes de sécurité qu'elle pouvait causer.

EDIT: Zut, j'ai été grillé !
Modifié par QuentinC (11 Nov 2013 - 20:44)
QuentinC a écrit :
A noter que c'était exactement le rôle de l'option REGISTER_GLOBALS de php3, qui a été très fortement critiquée puis désactivée par défaut, justement à cause des problèmes de sécurité qu'elle pouvait causer.


Non ce n'est pas la même chose. Avec register globals les variables GET et POST se retrouvaient dans le même espace de nom. Donc tu pouvais, par exemple, écraser une variable POST par une variable GET en la faisant passer dans l'URL. Si tu fais un extract($_POST) tu ne peux pas faire ça.
Modifié par jb_gfx (11 Nov 2013 - 23:32)
Modérateur
Une alternative plus sécurisée consiste à prédéclarer les variables autorisées:

$vars = array('user', 'name', 'lastname', 'street', 'postalCode', 'etc');
foreach($vars as $var){
  if (isset($_POST[$var])) $$var = $_POST[$var];
}

ça évite qu'un malin écrase d'autres variables, et cela rend le code plus lisible, en sachant à quoi s'attendre.
Modifié par kustolovic (14 Nov 2013 - 07:56)