循环列表始终使用复选框

时间:2018-03-13 15:45:10

标签: php mysql for-loop insert

我有一个从数据库表中填充的列表,如下所示。

<?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个。

任何指针都会有很大的帮助。

1 个答案:

答案 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?