[英]How can I pass POST parameters in a URL?
基本上,我認為我做不到,但我會很高興被證明是錯誤的。
我在 PHP 中動態生成 HTML 菜單,為每個當前用戶添加一個項目,以便我得到類似<a href="process_user.php?user=<user>>
GET 的內容。
有沒有辦法將信息作為 POST 參數傳遞,而不是從可點擊的 HREF 鏈接獲取?
我不允許使用 JavaScript。
看起來Rob 正在使用“您可以使用按鈕而不是錨點並將按鈕設置為看起來像鏈接的樣式。這樣您就可以在同一表單內的隱藏字段中通過 POST 發送您的值”
您可以使用樣式為鏈接的表單。 不需要 JavaScript:
<form action="/do/stuff.php" method="post">
<input type="hidden" name="user_id" value="123" />
<button>Go to user 123</button>
</form>
CSS:
button {
border: 0;
padding: 0;
display: inline;
background: none;
text-decoration: underline;
color: blue;
}
button:hover {
cursor: pointer;
}
URL 中的參數是 GET 參數,請求正文(如果存在)是 POST 數據。 因此,根據定義,您的基本前提是無法實現的。
您應該根據操作選擇使用 POST 還是 GET。 任何破壞性操作,即永久更改服務器的 state 的操作(刪除、添加、編輯)都應始終由 POST 請求調用。 任何純粹的“信息檢索”都應該可以通過不變的 URL(即 GET 請求)訪問。
要發出 POST 請求,您需要創建一個<form>
。 您可以使用 Javascript 來創建 POST 請求,但我不建議將 Javascript 用於如此基本的事情。 如果您希望提交按鈕看起來像一個鏈接,我建議您使用普通提交按鈕創建一個普通表單,然后使用 CSS 重新設置按鈕的樣式和/或使用 Javascript 將按鈕替換為提交表單的鏈接使用 Javascript (取決於更好地再現所需行為的內容)。 那將是漸進增強的一個很好的例子。
您可以使鏈接在單擊時執行 Ajax 發布請求。
在 jQuery 中:
$('a').click(function(e) {
var $this = $(this);
e.preventDefault();
$.post('url', {'user': 'something', 'foo': 'bar'}, function() {
window.location = $this.attr('href');
});
});
您還可以使用 JavaScript 使鏈接提交 POST 表單:
<form action="url" method="post">
<input type="hidden" name="user" value="something" />
<a href="#">CLick</a>
</form>
<script>
$('a').click(function(e) {
e.preventDefault();
$(this).parents('form').submit();
});
</script>
我也想分享我的實現。 不過,它確實需要一些 JavaScript 代碼。
<form action="./index.php" id="homePage" method="post" style="display: none;">
<input type="hidden" name="action" value="homePage" />
</form>
<a href="javascript:;" onclick="javascript:
document.getElementById('homePage').submit()">Home</a>
這樣做的好處是,與 GET 請求相反,它不顯示 URL 中的參數,這樣更安全。
首先,免責聲明:我不認為將 POST 與 URL 參數結合是一個絕妙的主意。 像其他人建議的那樣,您最好使用隱藏表單來傳遞用戶信息。
然而,一個問題讓我很好奇 PHP 是如何處理這種情況的。 事實證明,理論上是可行的。 這是一個證明:
post_url_params.html
<!DOCTYPE html>
<html>
<head></head>
<body>
<form method="post" action="post_url_params.php?key1=value1">
<input type="hidden" name="key2" value="value2">
<input type="hidden" name="key3" value="value3">
<input type="submit" value="click me">
</form>
</body>
</html>
post_url_params.php
<?php
print_r($_POST);
print_r($_GET);
echo $_SERVER['REQUEST_METHOD'];
?>
Output
Array ( [key2] => value2 [key3] => value3 )
Array ( [key1] => value1 )
POST
可以清楚地看到,PHP 將 URL 參數存儲在$_GET變量中,將表單數據存儲在$_POST變量中。 不過,我懷疑它非常特定於 PHP 和服務器,並且絕對不是可以依賴的東西。
如果 PHP 腳本為每個帶有隱藏字段的條目生成一個表單,並且 href 使用 JavaScript 發布表單,這可能會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.