Что произойдет, если вы перейдете к URL-адресу в стиле GET с запросом POST?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
419
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 зарезервирован для внесения изменений (операций создания / обновления / удаления). Действительно ли это проблема, зависит от вашего приложения.

Я думал о втором варианте, но все же хотел бы знать, будет ли массив GET заполнен, несмотря на запрос POST.

Eugene M 07.01.2009 21:32

Все, что вносит изменения, действительно должно иметь в качестве параметра токен предотвращения CSRF, поэтому вам действительно не нужно слишком беспокоиться о том, что кто-то использует GET (например, заставляя кого-то щелкнуть ссылку), чтобы сделать что-то гнусное.

derobert 07.01.2009 22:20
Ответ принят как подходящий

Простой ответ - да'. Вы можете использовать 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>

Другие вопросы по теме