Php 确定是否提交了空的$\u POST

Php 确定是否提交了空的$\u POST,php,Php,我有一个包含表格数据的表单,每一行都有一个同名的复选框,以便通过POST将其作为数组传递到PHP页面。一切正常,但我有一个问题与页面上的任何项目都没有被选中有关-这是一个特殊情况,我需要以特定的方式处理,但我试图找出如何确定最佳方式来判断何时出现这种情况,因为当它发生时,$\u POST数组完全为空 是否有任何策略可以帮助您确定何时在PHP中将一组空数据发布到页面?您可以通过几种不同的方法来实现这一点 //Method 1 if($_POST) { //Do Stuff } //Method

我有一个包含表格数据的表单,每一行都有一个同名的复选框,以便通过POST将其作为数组传递到PHP页面。一切正常,但我有一个问题与页面上的任何项目都没有被选中有关-这是一个特殊情况,我需要以特定的方式处理,但我试图找出如何确定最佳方式来判断何时出现这种情况,因为当它发生时,
$\u POST
数组完全为空


是否有任何策略可以帮助您确定何时在PHP中将一组空数据发布到页面?

您可以通过几种不同的方法来实现这一点

//Method 1
if($_POST) {
//Do Stuff
}

//Method 2
if(!empty($_POST)) {
//Do Stuff
}

//Method 3 - For detecting if a form was submitted
<input type="submit" name="submit" />
if(sizeof($_POST)>1) {
//Do Stuff
}
//方法1
如果(美元邮政){
//做事
}
//方法2
如果(!空($\u POST)){
//做事
}
//方法3-用于检测是否提交了表格
如果(sizeof($_POST)>1){
//做事
}
如果您的值为0,则方法2将失败,不过对于复选框,您不必担心

方法3依赖于您为提交按钮指定一个名称,因此至少在未选中任何内容时提交。然后可以查看
sizeof()
是否返回大于1的值,以查看是否检查了任何内容

演示:

使用该功能


我想你已经回答了你自己的问题。如果
$\u POST
数组为空,则不存在复选框。

使用已知值向页面添加隐藏的输入字段。此字段将始终与POST数据一起传递,因此您将知道用户是通过表单提交而不是直接URL登录的。简单到:-

(计数($\u POST)==0)//返回布尔值

或者你的意思是当表单已发布但未输入任何信息时?


<form>
<input type="text" name="user" value="" />
<input type="submit" name="post" value="Save" />
</form>

//php
if (isset($_POST['post']))
{
   //code here
}
//php 如果(isset($_POST['POST'])) { //代码在这里 }
提交表单时,Post数据可用。鉴于以下情况:

if($_POST)
{
    // Bar
}

// Foo
if ($_POST)
{
    // Bar
}
else
{
    // Foo
}
如果未提交表单,将执行
Foo

如果提交了表单,将执行
Bar
,然后执行
Foo

鉴于以下情况:

if($_POST)
{
    // Bar
}

// Foo
if ($_POST)
{
    // Bar
}
else
{
    // Foo
}
如果未提交表单,将执行
Foo

如果提交了表单,将执行

至于您的另一个问题,检查空的或适当的数据是基本的服务器端表单验证。如果您使用的库非常简单:

if ($_POST)
{
    $form_helper = new FormHelper();

    $form_helper->validate($_POST["email"], "email");
    $form_helper->validate($_POST["password"], "password");

    if (! $form_helper->notifications())
    {
        // Bar
    }
}
对于您的特定情况(并且没有库),可能是:

if ($_POST)
{
    if (empty($_POST["checklist"])
    {
        // Delete all entries.
    }
    else
    {
        // Do something else.
    }

    // Foo
}

这将检查是否输入了任何表单值-假设默认输入值=“”

$post=数组_过滤器($_post,'strlen')//过滤所有空值

//if html input submit button has NO name value       
if (sizeof($post)):
      //Do stuff
    endif;

// OR if html input submit button HAS a name value
    if (sizeof($post) > 1):
      //Do stuff
    endif;
如果需要精确过滤,可以使用回调函数

$post = array_filter($_POST,function ($k){ return $k != '' || $k != 'my default value' || *some other condition etc etc* ; });


关于isset($\u POST),即使没有POST数据,它也会被设置吗?还是取决于它是HTTP POST还是HTTP GET?@Ben你是对的,我已经删除了这个例子。我添加了一个演示我的两种方法的演示链接。如果a)我只是访问页面,b)我提交表单时没有点击任何内容,那么演示中的输出是相同的。正如我在问题中提到的,我需要确定当发布的数据为空且用户已提交表单而不是简单地访问页面时的特殊情况。我认为您误解了。由于您尚未提交任何内容,因此在进入页面时,所有内容都将是错误的。如果你不提交任何东西,它仍然是假的;但是,如果您选中某些复选框,它将变为true。我理解,但我的页面会在所有内容都为false时执行操作…,false=删除,因此我需要通过单击等方式检查它们是哪种false,false,或者false,因为它们提交了一个空表单。对。。。但是如果页面没有发布到,也就是说,有人只是通过链接直接访问了页面,那么这不是也会返回真的吗?正确,但是正如Paul Grime在上面所评论的,这就是找到HTTP方法的方法。然而,该页面仍然可能已经发布,只是有人可能没有发送任何表单数据。是的,我正试图准确地确定,当有人发布了没有任何表单数据的页面时。检查$\u POST是否为空,请求方法似乎是正确的解决方案。对,但是如何判断表单是否已提交。。。我需要区分案例A,用户只访问页面,案例B,用户已将表单提交回页面,但未发布任何数据。啊,我明白了,然后查看此链接以了解如何确定请求是否也是一个帖子-。完美,保存我传递的额外数据。对,当表单发布但没有数据时-在我的表单中,无数据意味着删除所有条目,因此我需要确定何时发布&为空。为什么不强制用户选中“全部”框?有时,用户可能会忘记选中一个复选框。或者至少,弹出一个模式对话框,询问他们是否确定要删除所有内容,并强制他们说“确定”。因为我使用复选框允许用户将某些内容设置为启用/禁用。取消选中它会将其设置为禁用。在这种情况下,强制他们勾选该框是没有意义的。是的,但正如我提到的,我需要处理通过POST提交数据并为空的情况,当用户访问表单页面时,这些示例不会触发代码Foo吗?@Paul:除非有POST数据,否则不会触发。至于空的,我刚才给你看了。您需要验证表单数据。我认为存在误解。。。请解释当用户只是访问页面而没有发布数据时,Foo中的代码是如何不被执行的。@Paul:那么将其移动到$\u POST代码块中?我读了一些其他的评论,并将我的示例更改为我认为您正在尝试的内容。@Paul:没错,因为您忘记了name属性。添加它,看看会发生什么。啊,是的,当然,一个额外的隐藏字段。我想我将使用
$\u服务器['REQUEST\u METHOD']
解决方案,但这也可以,谢谢。