2011-06-02 206 views
31

基本上,我認爲我不能,但會很高興被證明是錯誤的。如何在URL中傳遞POST參數?

我在PHP中動態生成一個HTML菜單,爲每個當前用戶添加一個項目,以便得到類似於<a href="process_user.php?user=<user>>的東西,但我有一個POST over GET的偏好。

有什麼辦法可以將信息作爲POST參數傳遞,而不是通過可點擊的HREF鏈接傳遞信息?


更新:對不起,我不能使用JS - 我早該說,是我不好


更新到更新:它看起來像@Rob是與「你可以給somethign使用按鈕而不是錨點,只需將按鈕樣式設置爲鏈接就可以了。這樣,您可以通過POST發送同一表單中隱藏字段的值「

+2

您使用的是表單或javascript ajax。,對不起沒有辦法在url中傳遞帖子 – Ibu 2011-06-02 05:46:58

+1

只有一個解決方案:[jQuery.Ajax()](http://api.jquery.com/jQuery.ajax/) – diEcho 2011-06-02 05:49:44

+1

什麼「process_user」呢?它更新/創建信息或只是搜索? – 2011-06-02 05:51:29

回答

35

你可以使用樣式爲紐帶形式,沒有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; 
} 

參見:http://jsfiddle.net/SkQRN/

+2

這個工程。只要添加他想要的鏈接與他的其他鏈接一致,他可以將它作爲'a:link,button.class {}'和'a:hover,button.class:hover {}'添加到他的樣式表中。等 – Rob 2011-06-02 05:57:09

+3

......如果你願意的話,你仍然可以將'method ='post''設置爲表格。大! – Alphaaa 2015-05-23 05:17:57

5

不,您不能這樣做。 我請你閱讀POST定義:http://en.wikipedia.org/wiki/POST_%28HTTP%29

或本頁面:http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods

+1

雖然你鏈接到一些信息性文章,它實際上是可以用其他答案中顯示的一些JavaScript或CSS。 – Rob 2011-06-02 06:00:10

+1

你的問題是「如何在URL中傳遞POST參數?」答案是你的不行。前面的代碼是通過javascript事件通過表單發送POST變量... – zzarbi 2011-06-02 06:03:53

+3

這是問題的標題。如果你讀到實際的問題,他正在尋找不同的東西。 – Rob 2011-06-02 06:05:07

11

您可以使鏈接單擊時執行AJAX POST請求。

在jQuery中:

$('a').click(function(e) { 
    var $this = $(this); 
    e.preventDefault(); 
    $.post('url', {'user': 'something', 'foo': 'bar'}, function() { 
     window.location = $this.attr('href'); 
    }); 
}); 

你也可以將鏈接提交POST形式與JavaScript

<form action="url" method="post"> 
    <input type="hidden" name="user" value="soemthing" /> 
    <a href="#">CLick</a> 
</form> 
<script> 
$('a').click(function(e) { 
    e.preventDefault(); 
    $(this).parents('form').submit(); 
}); 
</script> 
11

參數中的URL的GET參數,請求主體,如果存在的話,是POST數據。所以你的基本前提根據定義是不可行的。

您應根據操作選擇是使用POST還是GET。任何破壞性的動作,即永久改變服務器狀態(刪除,添加,編輯)的東西應始終由POST請求調用。任何純粹的「信息檢索」應該可以通過不變的URL(即GET請求)訪問。

要發出POST請求,您需要創建<form>。你可能使用Javascript來創建一個POST請求,但我不會推薦使用Javascript的基本東西。如果你想讓你的提交按鈕看起來像一個鏈接,我建議你用普通的提交按鈕創建一個正常的表單,然後使用CSS來重新設置按鈕和/或使用Javascript來替換按鈕提交表單的鏈接使用Javascript(取決於更好地再現所需行爲)。這將是漸進增強的一個很好的例子。

2

如果php腳本爲隱藏字段的每個條目生成一個表單並且href使用javascript發佈表單,這可能會有效。

7

我想和大家分享我的執行情況以及。它確實需要一些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上的參數,這是更安全。

+0

完美謝謝!!!!!! +1像一個魅力。添加'target =「_ blank」'更好。 – 2015-04-10 05:25:22

3

首先,免責聲明:我不認爲用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']; 
?> 

輸出

Array ([key2] => value2 [key3] => value3) 
Array ([key1] => value1) 
POST 

可以清楚地看到PHP將URL參數存儲在$ _GET變量中,並在$ _POST變量中形成數據。不過,我懷疑它非常適合PHP和服務器,絕對不是依靠它。