我想知道为什么我的foreach循环在我的mysql表中创建一个额外的行并且只插入一个包含数据的列。我是php和mysql的新手所以非常感谢任何帮助。下面是我的表格中的代码
<form name="insert_test" action="inserttest.php" method="post">
<table>
<tr>
<td>Brand</td><td>terms</td><td>HW Stamp</td><td>Origin</td><td>Cases</td>
</tr>
<tr>
<td><input type="text" name="brand[]" /></td>
<td><input type="text" name="terms[]" /></td>
<td><input type="text" name="hwstamp[]" /></td>
<td><input type="text" name="origin[]" /></td>
<td><input type="text" name="cases[]" /></td>
</tr>
</table>
<table>
<tr>
<td>Brand</td><td>terms</td><td>HW Stamp</td><td>Origin</td><td>Cases</td>
</tr>
<tr>
<td><input type="text" name="brand[]" /></td>
<td><input type="text" name="terms[]" /></td>
<td><input type="text" name="hwstamp[]" /></td>
<td><input type="text" name="origin[]" /></td>
<td><input type="text" name="cases[]" /></td>
</tr>
</table>
<input type="hidden" name="report_id" value="<?php echo $report_id;?>" />
<input type="submit" value="Submit" />
这是我的PHP代码:
foreach ($_POST['brand'] as $key => $brand) {
$terms = addslashes($_POST['terms'][$key]);
$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);
$report_id = addslashes($_POST['report_id'][$key]);
$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());
mysql_query($queryreg);
}
echo mysql_error();
我表中的列是(id,brand,terms,hwstamp,origin,cases,report_id)id是主键,report_id是外键。 当我在两个表中输入数据时,它正确地插入了创建的两行和列中的所有数据,当我只将数据输入到一个表中时,它在表中创建一行包含所有数据,但随后创建第二行除了report_id列之外,所有列都为空。
答案 0 :(得分:0)
更改此
$terms = addslashes($_POST['terms'][$key]);
$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);
$report_id = addslashes($_POST['report_id'][$key]);
$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());
mysql_query($queryreg);
进入这个:
if (trim($_POST['terms'][$key])!='' {
$terms = addslashes($_POST['terms'][$key]);
$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);
$report_id = addslashes($_POST['report_id'][$key]);
$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());
mysql_query($queryreg);
}
它应该防止空行。
答案 1 :(得分:0)
感谢大家的意见。我能够解决空白行的问题,我检查了我的html就像ring0建议并做了一个print_r($ _ post)看看发布了什么,数组有空键。
数组([品牌] =&gt;数组([0] =&gt;测试[1] =&gt;)[条款] =&gt;数组([0] =&gt;测试[1] =&gt;)[ hwstamp] =&gt;数组([0] =&gt;是[1] =&gt;)[origin] =&gt;数组([0] =&gt; mex [1] =&gt;)[个案] =&gt;数组([0] =&gt; 1234 [1] =&gt;))
所以在我的foreach循环中,我做了以下操作,以确保用户是否使用了所有表单字段,而不是使用空数据创建第二行。
foreach ($_POST['brand'] as $key => $brand)
{
if($brand !=''){
$terms = addslashes($_POST['terms'][$key]);
$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);
$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());
mysql_query($queryreg);
}
echo mysql_error();
}
现在它正在工作我可以去那里清理代码以防止sql注入。感谢大家的投入