Когда я делаю сообщение из формы, $_SERVER['REQUEST_METHOD']
равно POST_method=POST
, когда я делаю обычный запрос на получение, значение равно GET
. Такого никогда не было, и это изменилось после того, как я обновил свой сервер.
Я почти уверен, что значение должно быть POST
Пример:
'REQUEST_METHOD' => 'POST_method=POST',
Я использую CakePHP и при удалении, где установлено $this->request->onlyAllow('post', 'delete');
, я получаю сообщение об ошибке Method not allowed
, что я понимаю, потому что метод не является POST.
Кто-нибудь знает, где это установлено на сервере или в конфигурации php?
Обновление 1:
Если я отправлю эту форму:
<form action="/sources/select_categories/10" id="SourceCategorySelectCategoriesForm" method="post" accept-charset="utf-8">
<div style="display:none;"><input type="hidden" name="_method" value="POST"/></div>
<div class="submit"><input class="btn btn-primary btn-lg" type="submit" value="Select Categories"/></div>
</form>
Я получил:
'REQUEST_METHOD' => 'POST_method=POST',
и опубликованные значения:
array(
'_method' => 'POST_method=POST'
)
И если я отправлю эту форму:
<form action="/sources/select_categories/10" id="SourceCategorySelectCategoriesForm" method="post" accept-charset="utf-8">
<div style="display:none;"><input type="hidden" name="_method" value="POST"/></div>
<input type="checkbox" name="data[SourceCategory][category_ids][]" value="5" id="SourceCategoryCategoryIds"/>
<input type="checkbox" name="data[SourceCategory][category_ids][]" value="6" id="SourceCategoryCategoryIds"/>
<input type="checkbox" name="data[SourceCategory][category_ids][]" value="4" id="SourceCategoryCategoryIds"/>
<input type="checkbox" name="data[SourceCategory][category_ids][]" value="3" id="SourceCategoryCategoryIds"/>
<div class="submit"><input class="btn btn-primary btn-lg" type="submit" value="Select Categories"/></div></form>
Я получил:
'REQUEST_METHOD' => 'POST',
Но полученные значения:
array(
'_method' => 'POST',
'data' => array(
'SourceCategory' => array(
'category_ids' => array(
(int) 0 => '5',
(int) 1 => '6',
(int) 2 => '4',
(int) 3 => '3_method=POST',
(int) 4 => '5',
(int) 5 => '6',
(int) 6 => '4',
(int) 7 => '3'
)
)
)
)
Так что происходит что-то странное. Когда форма пуста от каких-либо полей, метод запроса изменяется, и если у меня есть поля, значения полей выглядят забавно.
Любые предложения, что может быть причиной этого?
ОБНОВЛЕНИЕ 2:
Я только что попробовал форму в своем собственном php-файле, полностью минуя cakephp
<form action="test2.php" method="post">
<input type="hidden" name="_method" value="POST"/>
<input type="submit" value="Select Categories"/>
</form>
$_SERVER["REQUEST_METHOD"] остается "POST", но print_r($_POST) отображает:
Array
(
[_method] => POST_method=POST
)
Таким образом, кажется, что это должен быть php или apache, который изменяет переменную сообщения "_method", а затем CakePHP изменяет $_SERVER["REQUEST_METHOD"].
Это делает меня невежественным, и я не знаю, с чего начать. Может быть, удалить php и apache?
Обновление 3
Форма 1
<form action="test2.php" method="post">
<input type="hidden" name="x" value="y"/>
<input type="submit" value="Submit"/>
</form>
Дает
Array
(
[x] => yx=y
)
Форма 2:
<form action="test2.php" method="post">
<input type="hidden" name="x" value="y"/>
<input type="hidden" name="a" value="b"/>
<input type="submit" value="Submit"/>
</form>
Дает:
Array
(
[x] => y
[a] => b
)
Поэтому, если публикуется одно скрытое значение, независимо от имени, оно изменяется, если публикуются 2 значения, кажется, что оно работает нормально.
_method
— это поле, используемое для имитации других глаголов HTTP с формой (post). Проверьте ваши исходные файлы на наличиеPOST_method
, эта строка откуда-то берется и ее нет в немодифицированном CakePHP. Судя по описанию, это может быть javascript, который искажает ваши значения формы - особенно из этого:'3_method=POST',
- person AD7six   schedule 12.11.2013