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 !

6voto

J'ai rencontré un problème similaire mais légèrement différent et il m'a fallu deux jours pour le comprendre.

  • Dans mon cas, le tableau POST était également vide.

  • J'ai ensuite vérifié avec file_get_contents('php://input') ; et c'était également vide.

Plus tard, j'ai découvert que le navigateur ne demandait pas de confirmation pour soumettre à nouveau les données du formulaire si je rafraîchissais la page chargée après la soumission du POST. Il rafraîchissait directement la page. Mais lorsque j'ai changé l'URL du formulaire pour une autre, il transmettait correctement le POST et demandait de soumettre à nouveau les données lorsque j'essayais de rafraîchir la page.

J'ai ensuite vérifié ce qui ne va pas avec l'URL actuelle. Il n'y avait aucun problème avec l'URL, mais elle pointait vers un dossier sans index.php dans l'URL et je vérifiais le POST à index.php.

Ici, j'ai douté que la redirection de / vers /index.php entraîne la perte des données POST et j'ai testé l'URL en ajoutant index.php à l'URL.

Ça a marché.

Je l'ai posté ici pour que quelqu'un le trouve utile.

6voto

Sunday G Akinsete Points 111

Si vous envoyez un message à un fichier index.php dans un répertoire, par exemple /api/index.php, assurez-vous de spécifier dans votre formulaire le répertoire complet du fichier, par exemple

Ce site

<form method="post" action="/api/index.php"> 
</form>

OU

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

travaux.

Mais cela échoue

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

5voto

RudeUrm Points 31

Je pourrais résoudre le problème en utilisant enctype="application/x-www-form-urlencoded" car la valeur par défaut est "text/plain". Lorsque vous vérifiez dans $DATA, le séparateur est un espace pour "text/plain" et un caractère spécial pour "urlencoded".

Sincères salutations Frank

5voto

Luke A. Leber Points 84

Avoir le enable_post_data_reading désactivé provoquera ce problème. Selon la documentation :

enable_post_data_reading

En désactivant cette option, $_POST et $_FILES ne sont pas remplis. Le seul moyen de lire les données POST sera alors de passer par le wrapper php://input stream. Cela peut être utile pour les requêtes proxy ou pour traiter les données POST d'une manière efficace en termes de mémoire.

5voto

user3070485 Points 11
<form action="test.php" method="post">
                        ^^^^^^^^^^^^^

Ok, c'était stupide et je vais m'embarrasser en public, mais j'ai créé un petit test script pour quelque chose en PHP et quand mon $_POST était vide, StackOverflow est le premier endroit où j'ai regardé et je n'ai pas trouvé la réponse dont j'avais besoin.

J'avais seulement écrit

<form action="test.php">

et oublié de préciser que la méthode est POST !

Je suis sûr que quelqu'un va ricaner, mais si cela aide quelqu'un d'autre qui fait la même chose, alors ça ne me dérange pas ! Nous le faisons tous de temps en temps !

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