1

我有一个问题。我有一堆同名的输入。这会创建放置到数据库中的数组,并且一切正常,但是我在试图阻止输入的空白​​行在数据库表中创建空白条目时遇到了一个主要难题。

代码是这样的:

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)。如果我在表单中输入数据并提交,那么所有数据都会进入数据库(是的 - 成功),如果我只输入第 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 计算 start_date 变量下使用的所有输入。然后我将它分解为一个计数数组,该数组应该能够用作 $db_total_used_rows。然而,这似乎并没有限制插入数据库的输入行总数。所以我想它回到了绘图板上,除非其他人对如何实现这一点有更好的想法。我现在已经准备好放弃了。

4

2 回答 2

1

使用这个循环结构:

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 = ...;
        ...
    }
}

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

于 2013-10-08T18:09:52.020 回答
0

除了复选框,所有表单域都会 POST,即使是空的。因此,如果def是一个文本框,它将始终出现在您的 POST 中。更好的测试是

if(!empty($_POST['def'])) {
于 2013-10-08T18:03:33.783 回答