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 !

4voto

Je n'ai pas de solution élégante à ce stade, mais je voulais partager mes conclusions pour la référence future des autres qui rencontrent ce problème. La source du problème était deux valeurs php superflues dans un fichier .htaccess. J'avais simplement ajouté ces deux valeurs pour augmenter la limite de taille des fichiers téléchargés de 8 Mo par défaut à quelque chose de plus grand. J'ai observé que le simple fait d'avoir ces deux valeurs dans le fichier htaccess, qu'elles soient plus grandes ou plus petites que la valeur par défaut, causait le problème.

php_value post_max_size xxMB
php_value upload_max_filesize xxMB

J'ai ajouté des variables supplémentaires pour espérer augmenter les limites pour toutes les variables suhosin.post.xxx/suhosin.upload.xxx mais celles-ci n'ont malheureusement pas eu d'effet sur ce problème.

En résumé, je ne peux pas vraiment expliquer le "pourquoi" ici, mais j'ai identifié la cause première. Mon sentiment est que c'est finalement un problème de suhosin/htaccess, mais malheureusement un que je n'ai pas été en mesure de résoudre autrement qu'en supprimant les 2 valeurs php surchargées ci-dessus.

J'espère que cela aidera quelqu'un à l'avenir, car j'ai passé une poignée d'heures à résoudre ce problème. Merci à tous ceux qui ont pris le temps de m'aider (MrMage, Andrew).

4voto

Dans mon cas, lorsque je passe de HTTP à HTTPS, le champ $_POST est vide. Le problème était que le formulaire avait une action comme celle-ci //exemple.com Lorsque j'ai modifié l'url en https://example.com le problème a disparu.

3voto

Ali Shariati Points 53

Même problème ici !

j'essayais de me connecter à mon code serveur local via une requête post dans postman, et ce problème m'a fait perdre beaucoup de temps !

pour tous ceux qui utilisent le projet local (par exemple, postman) : utilisez votre adresse IPv4 (tapez ipconfig dans cmd) au lieu du mot clé "localhost". dans mon cas :

avant :

localhost/app/login

après :

192.168.1.101/app/login

3voto

Assurez-vous que le name de chaque champ est définie.

Cela vous crée un POST vide en PHP

<input type="text" id="Phone">

Mais, ça va marcher

<input type="text" name="Phone" id="Phone">

3voto

David Sousa Points 33

J'ai eu le même problème. Le problème était .htaccess .

J'ai une règle de réécriture HTTPS et j'envoyais les demandes de courrier à http:// au lieu de https:// . La demande de poste a été effacée en raison d'une redirection.

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