Допустим, у меня есть страница под названием display.php, и пользователь просматривает display.php?page=3. Я хочу разрешить пользователю выполнять действие, например голосование, с помощью запроса POST, а затем возвращать его на страницу, на которой он был. Итак, если я сделаю запрос POST к display.php?page=3, будет ли информация о странице также доступна для сценария?






В PHP вы можете получить переменные запроса из специальных глобальных массивов:
$_GET['page'] (for GET requests)
$_POST['page'] (for POST requests)
$_REQUEST['page'] (for either)
Похоже, вы ищете «Перенаправить после публикации», я бы предложил разделить display.php и vote.php в отдельные файлы. Голосование выглядит примерно так:
<?php
//vote.php
$page_number = (int)$_REQUEST['page'];
vote_for_page($page_number); //your voting logic
header('Location: display.php?page=' . $page_number); //return to display.php
Обратите внимание, что слепой прием необработанных данных формы может быть опасен для вашего приложения.
Обновлено: некоторые люди считают плохим тоном использовать $ _REQUEST для обработки обоих случаев. Опасность заключается в том, что вы можете захотеть сообщить об ошибке, если получите GET, когда ожидаете POST. Обычно GET зарезервирован для просмотра, а POST зарезервирован для внесения изменений (операций создания / обновления / удаления). Действительно ли это проблема, зависит от вашего приложения.
Все, что вносит изменения, действительно должно иметь в качестве параметра токен предотвращения CSRF, поэтому вам действительно не нужно слишком беспокоиться о том, что кто-то использует GET (например, заставляя кого-то щелкнуть ссылку), чтобы сделать что-то гнусное.
Простой ответ - да'. Вы можете использовать URL-адрес в стиле GET в качестве URL-адреса для отправки формы POST. При отправке формы PHP будет иметь доступ к информации как POST, так и GET обычным образом.
Это не означает, что вы должен это делаете, но это сработает.
Да, массив GET всегда заполняется параметрами URL независимо от метода запроса. Вы можете попробовать это на простой странице вроде этой:
<form action = "test.php?a=b" method = "post">
<input name = "a"/>
<input type = "submit"/>
</form>
<pre>
POST:
<?php print_r($_POST); ?>
GET:
<?php print_r($_GET); ?>
</pre>
Я думал о втором варианте, но все же хотел бы знать, будет ли массив GET заполнен, несмотря на запрос POST.