如果您使用POST请求转到GET样式网址会发生什么?

时间:2009-01-07 18:14:35

标签: php post get

假设我有一个名为display.php的网页,用户正在查看display.php?page=3。我希望允许用户通过POST请求执行投票操作,然后将其带回到他们所在的页面。那么,如果我向display.php?page=3发出POST请求,那么页面信息是否也可用于脚本?

3 个答案:

答案 0 :(得分:2)

简单的答案是'是'。您可以使用GET样式的URL作为POST表单的提交URL。在提交表单时,PHP将以通常的方式提供POST和GET信息。

这并不是说你应该这样做,但它会起作用。

答案 1 :(得分:1)

在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保留用于进行更改(创建/更新/删除操作)。这是否真的是一个问题取决于您的应用程序。

答案 2 :(得分:1)

是的,无论请求方法如何,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>