Когато правя публикация от формуляр, $_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_method
, този низ идва отнякъде и не е в немодифициран CakePHP. От описанието може да е javascript, който променя стойностите на вашия формуляр - особено от това:'3_method=POST',
- person AD7six   schedule 12.11.2013