Problème de formulaires avec max_input_vars (PHP 5.3.9+)

Rédigé par jack 8 commentaires
Classé dans : Programmation Mots clés : PHP
Depuis la version de PHP 5.3.9 une nouvelle directive dans le fichier php.ini limite le nombre de champs de saisie traité après la soumission d'un formulaire. Cette directive s'appelle max_input_vars. Par défaut seuls les 1000 champs sont traités, les suivants sont tout simplement ignorés. Elle affecte les variables $_GET, $_POST et $_COOKIE.

Concrètement cela veut dire que si vous avez un grand formulaire qui contient plus de 1000 champs (champ texte, checkbox, hidden, etc...), lorsque vous allez traiter les variables $_POST après la soumission du formulaire, seuls les 1000 premières variables $_POST seront accessibles, les autres ne seront pas présentes dans le tableau $_POST.

Voilà donc une restriction, qui pour des raisons de sécurité est justifée afin d'éviter des attaques par déni de service, mais qui sera vite un gros problème si vous avez à traiter des gros formulaires.

Il y a trois solutions pour passer outre cette restriction.

Solution 1
Si vous avez accès au fichier php.ini sur votre serveur, éditez le et recherchez le paramètre max_input_vars. Changez sa valeur 1000 par une plus grande en fonction de vos besoins, pour avoir par exemple:

max_input_vars = 3000

Solution 2
Si vous n'avez pas accès au php.ini, il reste la solution du fichier .htaccess.
A la racine de votre site éditez ou créez un fichier .htaccess dans lequel vous mettrez sur la 1ère ligne l'instruction suivante:

php_value max_input_vars 3000

Solution 3
Dernière solution: utiliser l'instruction init_set dans un fichier php pour modifier la valeur du paramètre max_input_vars de cette façon:

ini_set('max_input_vars', 3000);
Fil RSS des articles de ce mot clé
Top