0

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

4

3 回答 3

2

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

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

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

于 2009-01-07T18:25:40.490 回答
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>
于 2009-01-07T18:46:30.900 回答