Php 限制Foreach循环插入空白MySQL行

Php 限制Foreach循环插入空白MySQL行,php,mysql,arrays,insert,restrict,Php,Mysql,Arrays,Insert,Restrict,我有个问题。我有一堆同名的输入。这就创建了数组,这些数组被放置到数据库中,所有的工作都很好,但是在保持空白行的输入来创建数据库表中的空白条目时,我遇到了一个主要的难题。 守则如下: foreach($_POST['datetime'] as $dbrow=>$startdate) { if(isset($_POST['def'])) { $start = $startdate; $abc = $_POST['abc'][$dbrow]; $def = $_POST['def'][$dbr

我有个问题。我有一堆同名的输入。这就创建了数组,这些数组被放置到数据库中,所有的工作都很好,但是在保持空白行的输入来创建数据库表中的空白条目时,我遇到了一个主要的难题。 守则如下:

foreach($_POST['datetime'] as $dbrow=>$startdate) {
if(isset($_POST['def'])) {
$start = $startdate; 
$abc = $_POST['abc'][$dbrow];
$def = $_POST['def'][$dbrow];
$ghi = $_POST['ghi'][$dbrow];


$db_insert = "INSERT INTO tablename (start, abc, def, ghi) VALUES('$start', '$abc', '$def', '$ghi')";
这很好,但我无法使if语句起作用。使用POST获取用户信息的表单有5行输入,每行有四列(start、abc、def、ghi)。如果我在表单中输入数据并提交,那么所有数据都会进入数据库(yay-success),如果我只在第1-4行中输入数据,那么数据库仍然会输入5行数据。我做错了什么

---------------------编辑--------------------- 好的,那么在更深入的观察之后,似乎发生的是代码一直希望提交所有动态生成的输入行,无论它们是否包含内容。因此,我设计了以下代码:

$db_tur = count(array_filter($start_date));
for($db_total_used_rows=0;$db_total_used_rows<=$db_tur;$db_total_used_rows++){


$db_start_date = $_POST['datetime'][$db_total_used_rows]; 
$db_abc = $_POST['abc'][$db_total_used_rows];
$db_def = $_POST['def'][$db_total_used_rows];
$db_ghi = $_POST['ghi'][$db_total_used_rows];


}

$db_insert = .....;
$db_tur=count(数组过滤器($start_date));

对于($db_total_used_rows=0;$db_total_used_rows除复选框外,所有表单字段都将发布,即使是空的。因此,如果
def
是一个文本框,它将始终出现在您的发布中。更好的测试是

if(!empty($_POST['def'])) {

除了复选框之外,所有表单字段都将发布,即使是空的。因此,如果
def
是文本框,它将始终出现在您的帖子中。更好的测试是

if(!empty($_POST['def'])) {

使用此循环结构:

foreach ($_POST['datetime'] as $dbrow => $start) {
    $abc = $_POST['abc'][$dbrow];
    $def = $_POST['def'][$dbrow];
    $ghi = $_POST['ghi'][$dbrow];
    if (!empty($abc) && !empty($def) && !empty($ghi) && !empty($start)) {
        $db_insert = ...;
        ...
    }
}

如果用户可以将某些字段留空,则可以将
&&
更改为
|
,这只会跳过所有字段都为空的行。

使用此循环结构:

foreach ($_POST['datetime'] as $dbrow => $start) {
    $abc = $_POST['abc'][$dbrow];
    $def = $_POST['def'][$dbrow];
    $ghi = $_POST['ghi'][$dbrow];
    if (!empty($abc) && !empty($def) && !empty($ghi) && !empty($start)) {
        $db_insert = ...;
        ...
    }
}


您可以将
&
更改为
|
,如果用户可以将某些字段留空——它只会跳过所有字段都为空的行。

为什么要检查
是否设置了
(isset($\u POST['def'))
呢?为什么不只是
如果(isset($startdate))
?为什么不检查输入的值&如果值为空,请跳过对它们的查询。此代码中存在一些SQL注入漏洞…感谢快速响应的家伙。我将尝试一些答案。@Charles,是的,我只是重新键入了一组代码,只是为了给出正在发生的事情的jist。这不是最终的安全性ed代码。为什么要检查是否设置了
if(isset($\u POST['def'])
?为什么不只检查
if(isset($startdate))
?为什么不检查输入的值&如果值为空,请跳过对它们的查询。此代码中存在一些SQL注入漏洞…感谢快速响应的家伙。我将尝试一些答案。@Charles,是的,我只是重新键入了一组代码,只是为了给出正在发生的事情的jist。这不是最终的安全性ed代码。它只检查所有行是否为空。它不会过滤掉单独的空行。它只检查所有行是否为空。它不会过滤掉单独的空行。只是澄清一下,您是否建议删除循环中我向每个已发布变量添加行数的部分?即删除$abc=$\U POST['abc'][$dbrow];太棒了,迫不及待地想尝试一下!好消息是它部分工作了。不再有任何空白条目生成。但是它仍然生成至少五条记录。我有一种隐秘的怀疑,这是因为输入行是通过循环生成的,并且生成的行数最少n页面加载(5)。如果它正在创建5条记录,但没有任何空白记录,那么如果用户仅填写其中一条记录,其他记录中会有什么内容?使用您提供的代码,它会复制所有5条记录上的数据。如果我填写两行输入,则第一行将正确输入,但第二行将在其他4条记录上复制。仅为了澄清,您是否建议删除循环中向每个已发布变量添加行计数的部分?即删除$abc=$\u POST['abc'][$dbrow];太棒了,迫不及待地想尝试一下!好消息是它部分工作了。不再有任何空白条目生成。但是它仍然生成至少五条记录。我有一种隐秘的怀疑,这是因为输入行是通过循环生成的,并且生成的行数最少n页面加载(5)。如果它正在创建5条记录,但没有任何空白记录,那么如果用户只填写其中一条记录,其他记录中会有什么内容?使用您提供的代码,它会复制所有五条记录上的数据。如果我填写两行输入,则第一行将正确输入,但第二行将跨其他4条记录复制。