我有一个包含表格数据的表单,每行都有一个复选框,它的名称相同,以便通过POST将其作为数组传递给PHP页面。一切工作正常,但我有一个问题有关,当没有选择页面上的项目 - 这是一个特殊的情况下,我需要以特定的方式处理,但我想弄清楚如何确定最好的方式告诉什么时候发生这种情况,就像$_POST
阵列完全是空的一样。
任何有助于确定何时将一组空白数据发布到PHP页面的策略?
我有一个包含表格数据的表单,每行都有一个复选框,它的名称相同,以便通过POST将其作为数组传递给PHP页面。一切工作正常,但我有一个问题有关,当没有选择页面上的项目 - 这是一个特殊的情况下,我需要以特定的方式处理,但我想弄清楚如何确定最好的方式告诉什么时候发生这种情况,就像$_POST
阵列完全是空的一样。
任何有助于确定何时将一组空白数据发布到PHP页面的策略?
我想你已经回答了你自己的问题。如果$_POST
数组为空,那么没有选中复选框。
您可以通过几种不同的方法来完成此操作。
//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以查看是否检查了任何内容。
在参考isset($ _ POST),将不是始终即使设置有没有POST数据?还是取决于它是HTTP POST还是HTTP GET? – Drizzt321
$ _POST将始终设置。 –
@你是对的,我已经删除了这个例子。我已经添加了演示链接,演示了我的两种方法。 –
if (!empty($_POST["field"])) {
// Field sent
} else {
// Field empty
}
将隐藏的输入字段添加到具有已知值的页面。该字段将始终与POST数据一起传入,因此您将知道用户通过表单提交而非直接URL登录。它是那样简单: -
<输入类型=“隐藏”的名字=“贴”值=“真”>
啊,当然,是一个额外的隐藏领域。我打算使用'$ _SERVER ['REQUEST_METHOD']'解决方案,但是这也可以很好地工作,谢谢。 –
(count($_POST) == 0) //returns boolean
或你的意思是,当表单被提交,但没有信息进入?
对,当表单发布但没有数据时 - 在我的表单中,无数据表示删除所有条目,所以我需要确定何时发布&&空。 –
为什么不强制用户检查“全部”框?有时用户可能会忘记在他们的意图下检查一个框。或者至少,弹出一个模式对话框,询问他们是否确定要删除所有内容并强制他们说好。 – Drizzt321
因为我正在使用复选框来允许用户设置启用/禁用。取消选中它会将其设置为禁用。在这种情况下强制他们检查盒子是没有意义的。 –
<form>
<input type="text" name="user" value="" />
<input type="submit" name="post" value="Save" />
</form>
//php
if (isset($_POST['post']))
{
//code here
}
提交表单时提供发布数据。给定以下内容:
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
}
正确,但正如我所提到的,我需要处理数据通过POST和空提交的情况,当用户只访问表单页面时,这些示例是否也会触发代码Foo? –
@Paul:除非有帖子数据,否则它不会启动。至于空,我只是给你看。您需要验证表单数据。 –
我认为存在一个误解......请解释当用户只是在没有发布数据的情况下访问该页面时,Foo中的代码不会被执行。 –
这将检查是否已经进入任何形式的值 - 假设默认输入值=''
$ 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* ; });
对,但是如何判断表单是否已提交......我需要区分情况A,用户只是访问页面,还是情况B,用户已将表单提交回页面,但没有发布数据。 –
啊我看到了,然后检查此链接了解如何确定请求是否为POST - http://stackoverflow.com/questions/1538065/find-out-http-method-in-php。 –
完美,可以节省我传递额外的数据。 –