2011-09-14 38 views
2

我有一个包含表格数据的表单,每行都有一个复选框,它的名称相同,以便通过POST将其作为数组传递给PHP页面。一切工作正常,但我有一个问题有关,当没有选择页面上的项目 - 这是一个特殊的情况下,我需要以特定的方式处理,但我想弄清楚如何确定最好的方式告诉什么时候发生这种情况,就像$_POST阵列完全是空的一样。

任何有助于确定何时将一组空白数据发布到PHP页面的策略?

回答

2

我想你已经回答了你自己的问题。如果$_POST数组为空,那么没有选中复选框。

+0

对,但是如何判断表单是否已提交......我需要区分情况A,用户只是访问页面,还是情况B,用户已将表单提交回页面,但没有发布数据。 –

+1

啊我看到了,然后检查此链接了解如何确定请求是否为POST - http://stackoverflow.com/questions/1538065/find-out-http-method-in-php。 –

+0

完美,可以节省我传递额外的数据。 –

4

您可以通过几种不同的方法来完成此操作。

//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 
} 

如果您的值为0,方法2将失败,对于不需要担心的复选框。

方法3依赖于你给你的提交按钮一个名字,所以它至少在没有任何检查时提交。然后,您可以看到sizeof()是否返回1以查看是否检查了任何内容。

DEMO:http://wecodesign.com/demos/stackoverflow-7424062.php

+0

在参考isset($ _ POST),将不是始终即使设置有没有POST数据?还是取决于它是HTTP POST还是HTTP GET? – Drizzt321

+2

$ _POST将始终设置。 –

+0

@你是对的,我已经删除了这个例子。我已经添加了演示链接,演示了我的两种方法。 –

5

使用empty功能

if(empty($_POST)) { 
//do empty $_POST stuff here 
} 
+0

正确...但是如果页面没有被发布,也不会返回true,即有人通过链接直接访问页面? –

+0

正确,但正如Paul Grime在上面评论的那样,您将如何找到HTTP方法。但是,该页面仍可能已发布,只是有人可能没有以任何形式发送数据。 – Drizzt321

+0

是的,我试图确定是否有人在没有任何表单数据的情况下发布邮件。检查$ _POST是空的,请求方法看起来是正确的解决方案。 –

0
if (!empty($_POST["field"])) { 
    // Field sent 
} else { 
    // Field empty 
} 
4

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

<输入类型=“隐藏”的名字=“贴”值=“真”>

+0

啊,当然,是一个额外的隐藏领域。我打算使用'$ _SERVER ['REQUEST_METHOD']'解决方案,但是这也可以很好地工作,谢谢。 –

0

(count($_POST) == 0) //returns boolean

或你的意思是,当表单被提交,但没有信息进入?

+0

对,当表单发布但没有数据时 - 在我的表单中,无数据表示删除所有条目,所以我需要确定何时发布&&空。 –

+0

为什么不强制用户检查“全部”框?有时用户可能会忘记在他们的意图下检查一个框。或者至少,弹出一个模式对话框,询问他们是否确定要删除所有内容并强制他们说好。 – Drizzt321

+0

因为我正在使用复选框来允许用户设置启用/禁用。取消选中它会将其设置为禁用。在这种情况下强制他们检查盒子是没有意义的。 –

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

//php 
if (isset($_POST['post'])) 
{ 
    //code here 
} 
0

提交表单时提供发布数据。给定以下内容:

if($_POST) 
{ 
    // Bar 
} 

// Foo 

如果表单未提交Foo将执行。

如果提交表格Bar将被执行,然后Foo

考虑以下几点:

if ($_POST) 
{ 
    // Bar 
} 
else 
{ 
    // Foo 
} 

如果表格没有提交Foo将被执行。

如果表格提交Bar将被执行。

至于你的其他问题,检查空的或适当的数据是基本的服务器端表单验证。如果您使用的库,可以简单:

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 
} 
+0

正确,但正如我所提到的,我需要处理数据通过POST和空提交的情况,当用户只访问表单页面时,这些示例是否也会触发代码Foo? –

+0

@Paul:除非有帖子数据,否则它不会启动。至于空,我只是给你看。您需要验证表单数据。 –

+0

我认为存在一个误解......请解释当用户只是在没有发布数据的情况下访问该页面时,Foo中的代码不会被执行。 –

0

这将检查是否已经进入任何形式的值 - 假设默认输入值=''

$ post = array_filter($ _ 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* ; });