【发布时间】:2013-10-15 19:19:45
【问题描述】:
我遇到了问题。我有一堆同名的输入。这会创建放置到数据库中的数组,并且一切正常,但是我在试图阻止输入的空白行在数据库表中创建空白条目时遇到了一个主要难题。
代码是这样的:
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。然而,这似乎并没有限制插入数据库的输入行总数。所以我想它回到了绘图板上,除非其他人对如何实现这一点有更好的想法。我现在已经准备好放弃了。
【问题讨论】:
-
为什么要检查
if(isset($_POST['def']))是否设置?为什么不只是if(isset($startdate))? -
为什么不检查传入的值,如果它们为空,请跳过为它们运行查询。
-
这段代码存在一些SQL注入漏洞...
-
感谢大家的快速回复。我会尝试一些答案。 @Charles,是的,我只是重新输入了一堆代码,只是为了大致了解正在发生的事情,它不是最终的安全代码。
标签: php mysql arrays insert restrict