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