如何在URL中传递POST参数?

Maw*_*awg 36 php http http-get http-post

基本上,我认为我不能,但很高兴被证明是错的.

我在PHP中动态生成HTML菜单,为每个当前用户添加一个项目,以便我得到类似的东西<a href="process_user.php?user=<user>>,但我喜欢POST而不是GET.

有没有办法将信息作为POST参数传递,而不是从可点击的HREF链接传递?


更新:对不起,我不允许使用JS - 我应该说,我的不好


更新到更新:看起来@Rob正在使用"您可以使用按钮而不是锚点,只需将按钮设置为看起来像链接.这样您就可以将隐藏字段中的值放在同一表单中通过POST发送"

Pet*_*tah 45

您可以使用样式为链接的表单,不需要JavaScript:

<form action="/do/stuff.php" method="post">
    <input type="hidden" name="user_id" value="123" />
    <button>Go to user 123</button>
</form>
Run Code Online (Sandbox Code Playgroud)

CSS:

button {
    border: 0;
    padding: 0;
    display: inline;
    background: none;
    text-decoration: underline;
    color: blue;
}
button:hover {
    cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)

请参阅:http://jsfiddle.net/SkQRN/

  • ...如果你愿意,你仍然可以将`method ='post'`设置为表格.大! (3认同)
  • 这有效.只是要添加如果他希望链接与其他链接一致,他可以在样式表中添加它作为`a:link,button.class {}`和`a:hover,button.class:hover {}`等 (2认同)

dec*_*eze 13

URL中的参数是GET参数,请求体(如果存在)是POST数据.因此,根据定义,您的基本前提是无法实现的.

您应该根据操作选择是使用POST还是GET.POST请求应始终调用任何破坏性操作,即永久更改服务器状态(删除,添加,编辑)的操作.任何纯粹的"信息检索"都应该通过不变的URL(即GET请求)访问.

要发出POST请求,您需要创建一个<form>.你可以使用Javascript来创建一个POST请求,但我不建议使用Javascript这么基本的东西.如果你想让你的提交按钮看起来像一个链接,我建议你使用普通的提交按钮创建一个普通的表单,然后使用CSS重新设置按钮和/或使用Javascript替换按钮以提交表单的链接使用Javascript(取决于更好地再现所需的行为).这是渐进增强的一个很好的例子.


Rob*_*Rob 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');
   });
});
Run Code Online (Sandbox Code Playgroud)

您还可以使用javascript使链接提交POST表单

<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>
Run Code Online (Sandbox Code Playgroud)


Ari*_*ris 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>
Run Code Online (Sandbox Code Playgroud)

关于这一点的好处是,与GET请求相反,它不显示URL上的参数,这更安全.


zza*_*rbi 5

不,你不能那样做.我邀请您阅读POST定义:http://en.wikipedia.org/wiki/POST_%28HTTP%29

或者这个页面:http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods

  • 那是问题的标题.如果您阅读实际问题,他正在寻找不同的东西. (3认同)
  • 您的问题是“如何在URL中传递POST参数?” 答案是你不能。先前的代码是通过javascript事件通过表单发送POST变量... (2认同)
  • "有没有办法将信息作为POST参数传递,而不是从可点击的HREF链接传递信息?" 作为一个可点击的链接...我们可以玩单词我同意你可以破解它,但它不再是一个链接,它是一个动作. (2认同)

rai*_*iks 5

首先,免责声明:我不认为将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>
Run Code Online (Sandbox Code Playgroud)

post_url_params.php

<?php
    print_r($_POST);
    print_r($_GET);
    echo $_SERVER['REQUEST_METHOD'];
?>
Run Code Online (Sandbox Code Playgroud)

输出量

Array ( [key2] => value2 [key3] => value3 ) 
Array ( [key1] => value1 ) 
POST
Run Code Online (Sandbox Code Playgroud)

可以清楚地看到PHP将URL参数存储在$ _GET变量中并将表单数据存储在$ _POST变量中。我怀疑这是非常特定于PHP和服务器的,绝对不是要依赖的东西。