Проводка с IE8 на PHP дает пустой $ _POST

У меня есть простая форма HTML, отправляющая почтовый запрос на php-скрипт. В IE8 форма работает только с перерывами – большую часть времени PHP-скрипт видит пустую переменную $ _POST.

Вот мой код:

<html> <head> <title>Post test</title> </head> <body style="text-align: center;"> <?php echo "<pre>".print_r($_POST, TRUE)."</pre>"; ?> <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"> <input type="text" name="name"> <input type="hidden" name="hidden" value="moo" > <input type="submit" value="Search" > </form> </body> </html> 

Иногда print_r дает ответ, который вы ожидаете (т.е. он заполняется данными из формы), большую часть времени он пуст.

Невозможность использовать POST – проблема для веб-приложений – у кого есть идеи, что происходит, и как это исправить?

Спасибо всем за то, что он вступил в этот.

Оказывается, проблема заключается в модуле Apache, который я включил.

Это модуль, позволяющий apache использовать проверку подлинности Windows для идентификации пользователя через свой идентификатор пользователя Windows – mod_auth_sspi

Эффект вызван известной ошибкой в ​​модуле, но с простой дополнительной директивой это можно обойти, пока исправление не будет добавлено в следующее обновление, как описано здесь:

http://sourceforge.net/projects/mod-auth-sspi/forums/forum/550583/topic/3392037

Это звучит очень странно. Это происходит и в других версиях IE?

Я не могу сказать вам, в чем проблема, но вот мои предложения о том, как ее диагностировать:

  1. Распечатайте $_REQUEST а не просто $_POST , чтобы увидеть, поступают ли данные с помощью другого метода.

  2. Используйте такой инструмент, как Fiddler или Wireshark, чтобы точно отслеживать, что фактически отправляется браузером.

Fiddler, в частности, очень помог мне несколько раз (главным образом, при отладке кода Ajax) и расскажу вам, что именно было опубликовано в браузере. Если ваш веб-сервер является localhost, вы также можете использовать Fiddler для отслеживания того, что получено до того, как PHP получит от него свои права. Если нет, вы можете использовать wirehark на сервере, если у вас есть разрешения на установку такого рода вещей.

В дополнение к Fiddler я бы предложил браузерный инструмент, такой как Firebug, но я не знаю об одном для IE, который достаточно хорош (панель инструментов IE dev не дает вам подробных сведений о запросах и ответах как я знаю).

Я подозрительно, что, когда скрипт говорит вам, что $ _POST пуст, вы фактически не отправляли форму. Вы можете проверить, добавив print($_SERVER['REQUEST_METHOD']); после вашего print_r($_POST);

Если вы некоторое время enctype="multipart/form-data" файл (т. enctype="multipart/form-data" вводом файла), убедитесь, что вы установили enctype="multipart/form-data" в свой элемент <form> .

Вы проверили сгенерированный html? Возможно ли, что echo $_SERVER['PHP_SELF'] не производит вывод, который вы после, который испортил форму html, которая испортила POST?