【发布时间】:2011-11-17 10:52:04
【问题描述】:
我有一个包含表格数据的表单,每一行都有一个同名的复选框,以便它通过 POST 作为数组传递到 PHP 页面。一切正常,但我有一个与何时没有选择页面上的项目有关的问题 - 这是我需要以特定方式处理的特殊情况,但我试图弄清楚如何确定最佳方式告诉这种情况何时发生,就像$_POST 数组完全为空一样。
任何有助于确定何时将空数据集发布到 PHP 页面的策略?
【问题讨论】:
标签: php
我有一个包含表格数据的表单,每一行都有一个同名的复选框,以便它通过 POST 作为数组传递到 PHP 页面。一切正常,但我有一个与何时没有选择页面上的项目有关的问题 - 这是我需要以特定方式处理的特殊情况,但我试图弄清楚如何确定最佳方式告诉这种情况何时发生,就像$_POST 数组完全为空一样。
任何有助于确定何时将空数据集发布到 PHP 页面的策略?
【问题讨论】:
标签: 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
}
如果您的值为 0,方法 2 将失败,但您不必担心复选框。
方法 3 依赖于您为提交按钮命名,因此至少在未检查任何内容时提交。然后你可以看看sizeof()返回是否大于1,看看有没有被检查。
【讨论】:
使用empty 函数
if( empty($_POST) ) {
//do empty $_POST stuff here
}
【讨论】:
if ( !empty( $_POST["field"] ) ) {
// Field sent
} else {
// Field empty
}
【讨论】:
我想你已经回答了你自己的问题。如果$_POST 数组为空,则没有选中的复选框。
【讨论】:
将隐藏的输入字段添加到具有已知值的页面。该字段将始终与 POST 数据一起传递,因此您将知道用户是通过表单提交而不是直接 URL 登陆的。很简单:-
【讨论】:
$_SERVER['REQUEST_METHOD'] 我认为的解决方案,但这也可以,谢谢。
(count($_POST) == 0) //returns boolean
或者你的意思是当表单发布但没有输入信息时?
【讨论】:
<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 = 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* ; });
【讨论】: