簡體   English   中英

如果通過POST請求轉到GET樣式網址,會發生什么情況?

[英]What happens if you go to a GET style url with a POST request?

假設我有一個名為display.php的頁面,而用戶正在查看display.php?page=3 我想允許用戶通過POST請求進行投票之類的操作,然后將其帶回到他們所在的頁面。 因此,如果我對display.php?page=3發出POST請求,那么頁面信息也可用於腳本嗎?

簡單的答案是“是”。 您可以使用GET樣式的URL作為POST表單的提交URL。 提交表單時,PHP將以通常的方式同時提供POST和GET信息。

這並不是說您應該執行此操作,但是它將起作用。

在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處理這兩種情況是不好的形式。 危險是,如果您希望在POST時收到GET,則可能要發出錯誤信號。 通常,保留GET以供查看,保留POST以進行更改(創建/更新/刪除操作)。 這是否真的是一個問題取決於您的應用程序。

是的,無論請求方法如何,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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM