我有一个从数据库表中填充的列表,如下所示。
<?php
while($row=mysql_fetch_array($result))
{
?>
<tr>
<td>
<input type="checkbox" name="name[]" value="<?php echo
$row['AnalysisID']; ?>">
<?php echo $row["CustomerName"]; ?>
<input type="hidden" name="Site[]" value="<?php echo $row["Site"]; ?>">
<input type="hidden" name="Unit[]" value="<?php echo $row["Unit"]; ?>">
</td>
<td><?php echo $row['Site']; ?></td>
<td><?php echo $row['Unit']; ?></td>
</tr>
<?php
}
?>
这样可以完美地显示数据,并且检查所有数据是否正确。
但是我希望能够检查各种复选框并将这些行插入另一个表。
实现这一点我正在使用:
$counter = count($_POST["name"]);
for($x=0; $x<=$counter; $x++){
if(!empty($_POST["name"][$x])){
$PI_NO = mysql_real_escape_string($_POST["name"][$x]);
$CUSTOMER_NAME = mysql_real_escape_string($_POST["Site"][$x]);
$PI_ADDRESS = mysql_real_escape_string($_POST["Unit"][$x]);
$qry="INSERT INTO test1 (AnalysisID, Elem, Lube) VALUES ('$PI_NO','$CUSTOMER_NAME','$PI_ADDRESS')";
mysql_query($qry);
}
}
问题是我检查哪些行总是在列表中插入第一行并不重要,它会从列表的开头插入正确的数字。
例如,如果我检查列表中的最后4个,我会得到前3个。
任何指针都会有很大的帮助。
答案 0 :(得分:0)
仅在选中复选框时才会发送复选框值,因此$_POST["name"]
和其他$_POST
数组中的索引将不同。
(未选中的复选框输入被视为&#34;不成功&#34; https://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.2)
尝试添加ID作为索引,然后选择的数据将保持在一起。
(我将name
数组重命名为aid
以更好地匹配内容)
<td>
<input type="checkbox" name="aid[<?php echo $row['AnalysisID']; ?>]" value="1">
<?php echo $row["CustomerName"]; ?>
<input type="hidden" name="Site[<?php echo $row['AnalysisID']; ?>]" value="<?php echo $row["Site"]; ?>">
<input type="hidden" name="Unit[<?php echo $row['AnalysisID']; ?>]" value="<?php echo $row["Unit"]; ?>">
</td>
然后使用foreach()
循环遍历帖子数据。只会检查已检查的ID,因此无需if (!empty()
检查。
if (isset($_POST["aid"])) { // to avoid php undefined notice if none selected
foreach ($_POST["aid"] as $id=>$value){ // the index is what we need, using $id
$PI_NO = mysql_real_escape_string($id);
$CUSTOMER_NAME = mysql_real_escape_string($_POST["Site"][$id]);
$PI_ADDRESS = mysql_real_escape_string($_POST["Unit"][$id]);
$qry="INSERT INTO test1 (AnalysisID, Elem, Lube) VALUES ('$PI_NO','$CUSTOMER_NAME','$PI_ADDRESS')";
mysql_query($qry);
}
}
另外,我强烈建议您更改使用已弃用的mysql_ *函数,改为使用mysqli或PDO。 Why shouldn't I use mysql_* functions in PHP?