我遇到了问题。我有一堆共享相同名称的输入。这会创建放置在数据库中的数组,并且一切正常,但我在尝试保持输入的空白行不会在数据库表中创建空白条目时遇到了一个主要的困境。
代码是这样的:
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行数据。我做错了什么?
--------------------- EDIT --------------------- 好的,仔细看看似乎正在发生的事情是代码一直想要提交所有动态生成的输入行,无论它们是否包含内容。所以我设计了以下代码:
$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变量下使用的所有输入。然后我将其分解为一个count数组,该数组应该可以用作$ db_total_used_rows。但是,这似乎并不限制插入数据库的输入行总数。所以我想它会回到绘图板上,除非别人对如何实现这个目标有更好的了解。我现在已经准备好放弃了。
答案 0 :(得分: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 = ...;
...
}
}
如果用户可以将某些字段留空,则可以将&&
更改为||
- 它只会跳过所有字段都为空的行。
答案 1 :(得分:0)
除了复选框,所有表单字段都将POST,即使是空的。因此,如果def
是一个文本框,它将始终存在于您的POST中。更好的测试是
if(!empty($_POST['def'])) {