Форма GET работает, форма POST не работает - PullRequest
0 голосов
/ 02 апреля 2011

У меня есть простая форма, которая ведет себя, как и ожидалось, когда method="GET", но когда method="POST", это не так.

FORM:

<form action="/login" method="POST">
<input type="text" name="user" maxlength="30" value="">
<input type="password" name="pass" maxlength="30" value="">
<input type="hidden" name="sublogin" value="1">
<input type="submit" value="Login" /> 
</form>

Если я отображаю переменные вна экране (var_dump( $_POST ) или var_dump( $_GET )), когда method = "POST", я получаю пустой массив.Когда method = "GET", я получаю массив с соответствующими парами имя / значение (user, pass, sublogin ...)

Что нужно знать:

  • .htaccess обрабатывает.php имени файла (action), он также перенаправляет все в index.php, если файл физически не существует.
  • другие формы на сайте работают очень хорошо с POST
  • форма работаетнормально на моей локальной машине
  • Firebug показывает 302 временно перемещенных при использовании POST

.htaccess файл добавляется для запроса:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .$ index.php

Любая помощь приветствуется!1027 *

Ответы [ 3 ]

4 голосов
/ 02 апреля 2011

Если «/ login» не существует и htaccess перенаправляет (не перезаписывает URL), тогда все данные POST будут потеряны.GET данные сохраняются, потому что они являются частью URL.

1 голос
/ 07 апреля 2011

Проблема даже не была близка к моей мысли.

Класс, который устанавливает, уничтожает массив $ _POST после неправильной обработки, но все равно уничтожает мой массив $ _POST. Это происходит только на машинах с PHP 5.3 (предупреждение приводило к неправильной работе класса), сервер работал под управлением 5.2.

Спасибо, Briedis за попытку помочь. Извините, что привел вас в погоню за гусем!

Решением, конечно же, было написать лучший способ обработки предупреждений в этом классе и не допустить уничтожения массива $ _POST.

0 голосов
/ 06 апреля 2018

Это ответ в крайнем случае, который может пригодиться будущему пользователю, изучающему эту тему.

В моем случае решение состояло в том, чтобы исправить неправильную конфигурацию, которую я создал в своем локальном файле php.ini. Я изменил свои настройки, чтобы сделать их более либеральными для запуска сценариев обработки изображений Imagick во время разработки.

В попытке увеличить max_post_size со значения по умолчанию, равного 8M, я изменил настройку на 40. Проблема заключалась в отсутствии явного указания единиц измерения, на которые ссылается «40». Если не указано, php.ini использует BYTES в качестве единиц измерения. Я добавил суффикс единицы "M" к "40", и действия $ _POST начали работать как положено.

Для дальнейшего использования единичные суффиксы могут быть "K", "M" или "G", без кавычек, конечно, или, для байтов, отсутствовать. Вы можете прочитать об этих модулях в руководстве по PHP здесь:

https://secure.php.net/manual/en/faq.using.php#faq.using.shorthandbytes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...