[英]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.