118 votes

php Le tableau $_POST est vide lors de la soumission du formulaire.

J'ai construit un système de gestion de contenu (CMS) personnalisé qui fonctionne parfaitement sur ma boîte de développement (Ubuntu/PHP5+/MySQL5+).

Je viens de le déplacer vers la boîte de production pour mon client et maintenant toutes les soumissions de formulaire apparaissent comme des tableaux $_POST vides.

J'ai trouvé une astuce pour vérifier que les données sont réellement transmises en utilisant file_get_contents('php://input'); et les données s'affichent bien ici la $_POST / $_REQUEST Les tableaux sont toujours vides.

J'ai également vérifié que les en-têtes content-type sont corrects via firebug ( application/x-www-form-urlencoded; charset=utf-8 ).

Ce problème se produit indépendamment du fait qu'un formulaire soit soumis via AJAX ou via un formulaire normal.

Toute aide est grandement appréciée !

238voto

tiltem Points 1287

Lorsque vous utilisez le type de contenu JSON, le $_POST Le tableau ne se remplit pas (uniquement avec les formulaires à plusieurs parties, je crois).

Voici comment je corrige le problème :

$_POST = json_decode(file_get_contents("php://input"), true);

97voto

Voici une autre cause possible : mon formulaire se soumettait à domain.com sans le WWW. et j'avais configuré une redirection automatique pour ajouter le "WWW". Le tableau $_POST se vidait dans le processus. Pour résoudre ce problème, il me suffisait de soumettre le formulaire à www.domain.com.

30voto

Randy Kilwag Points 36

J'ai eu un problème similaire. Il s'est avéré être une solution simple. Dans le formulaire, j'avais

<form action="directory" method="post">

où répertoire était le nom du... répertoire. Mon tableau POST était totalement vide. Lorsque j'ai regardé l'url dans mon navigateur, elle était affichée avec une barre oblique à la fin.

L'ajout de la barre oblique à la fin de mon action a fait l'affaire -

<form action="directory/" method="post">

Mon tableau $_POST était à nouveau plein !

14voto

MrMage Points 4695

Assurez-vous que, dans le php.ini :

  • track_vars (il n'est disponible que sur les très anciennes versions de PHP) est défini à On
  • variables_order contient la lettre P
  • post_max_size est fixé à une valeur raisonnable (par exemple 8 MB)
  • (si vous utilisez le patch de suhosin) suhosin.post.max_vars y suhosin.request.max_vars sont suffisamment grandes.

Je suppose que la deuxième de mes suggestions résoudra votre problème.

11voto

Marcos Points 21

J'ai constaté que lorsque l'on passe de HTTP à HTTPS, les $_POST est vide. Cela s'est produit lors du test du formulaire, mais il m'a fallu un certain temps avant de m'en rendre compte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X