我有一个问题。我有一堆共享相同名称的输入。这会创建放置在数据库中的数组,并且一切正常,但我在试图防止输入的空白行在数据库表中创建空白条目时遇到了一个主要的难题。
代码如下:
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。然而,这似乎并没有限制插入数据库的输入行总数。所以我想它又回到了绘图板,除非其他人对如何实现这一点有更好的想法。我现在已经准备好放弃了。
最佳答案
使用这个循环结构:
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 = ...;
...
}
}
如果用户可以将某些字段留空,您可以将 &&
更改为 ||
—— 它只会跳过所有字段都为空的行。
关于php - 限制 Foreach 循环插入空白 MySQL 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19254976/