1

我一直在寻找一种万能的方法来轻松确定是否通过任何 HTML 表单发布了任何用户数据——而不必担心每个表单的复杂性——以便轻松禁止未注册用户在地点。

假设 Form 的action属性 always POST,使用时是否有任何潜在问题:

if(count($_POST) > 0)

检查是否发布了任何数据?

换句话说,是否存在即使用户没有通过 提交任何信息的情况count($_POST)> 0或者即使用户确实POST通过提交了任何信息的情况?count($_POST)== 0POST

(我第一次尝试,但即使用户没有提交数据isset($_POST),它也会返回,但它不起作用。)truePOST

4

5 回答 5

2

您可以使用empty($_POST), 检查 isset 和 null / 空白值。但是由于 $_POST 将始终设置,您将主要检查它是否为空白。

于 2012-12-07T17:52:26.480 回答
1

这将是确定一个或多个值是否已通过 POST 发送的最简单方法。

if ($_POST) {
    // it is 100% reliably implied that count($_POST) > 0
}

但是,有时您可能会收到不包含任何键/值的表单帖子。一个示例是“通过单击复选框接受我们的服务条款”类型的表单,其中唯一的表单字段是复选框或提交按钮。复选框名称/值对仅在复选框被选中时发送,并且提交按钮名称/值并不总是由浏览器发送。$_POST 可能没有条目的另一个示例可能是文件上传表单。一个好的表单处理程序将在这些场景中正常运行。您可以使用以下内容在所有情况下检测发布请求。

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // its a post request, although we may have 0 posted values
}
于 2012-12-07T18:11:59.790 回答
1

如果您只关心发布为application/x-www-form-urlencoded(即来自典型表格)的数据,那么countempty应该足以检查。

如果您正在寻找任何类型的原始数据 POST 输入,您应该使用:

if(empty(file_get_contents("php://input"))) {
   // there is no POST data
}

application/json我应该补充一点,除了处理原始 POST 数据(即或一些类似的非表单请求)的情况外,实际检查是否根本没有发布任何数据可能没有多大用处。通常,您只对处理脚本期望的特定数据感兴趣。所以这本质上是无用的代码,因为您仍然需要检查该特定数据(即empty($_POST['some_field']))的存在。

于 2012-12-07T17:58:11.670 回答
1

好吧,您不会期望自己制作的页面会出现什么,这有点奇怪,但是不,这没有任何问题。

原因isset($_POST)不起作用,因为它总是设置的(它是超全局的)。

于 2012-12-07T17:51:25.327 回答
0

如果您的所有表单都是相同的,并且没有来自其他服务器的任何特殊或奇怪的请求,count()那么应该可以正常工作。

于 2012-12-07T17:53:17.570 回答