在php中使用复选框删除多个mysql行

在php中使用复选框删除多个mysql行,php,mysql,Php,Mysql,我以前试过问这个问题,但我被粗鲁地告知我发布了太多的代码。所以这次我会尽我所能只发布相关代码 因此,我尝试使用复选框删除多行。我查阅了很多关于它的教程,大多数都使用for-each循环。我还没有真正弄清楚while和for each循环之间的区别。这是我的前端php代码: $sql = "SELECT * FROM appointments WHERE date = '".$date."' ORDER BY appttime"; $result = mysqli_query($transpor

我以前试过问这个问题,但我被粗鲁地告知我发布了太多的代码。所以这次我会尽我所能只发布相关代码

因此,我尝试使用复选框删除多行。我查阅了很多关于它的教程,大多数都使用for-each循环。我还没有真正弄清楚while和for each循环之间的区别。这是我的前端php代码:

$sql = "SELECT * FROM appointments WHERE date = '".$date."' ORDER BY appttime";

$result = mysqli_query($transport, $sql);

echo "<h2 align='center'>Schedule for $raw_date</h2>";

echo "<table border='0' style='width: 100%; margin: auto; border-width: 1px'><tr><th>Resident Name</th><th>APT #</th><th>Appt. Time</th><th>Location Phone</th><th>Location Name</th><th>Address</th><th>City</th><th>Zip</th><th>Bus or Car</th><th>Escort Name</th><th>Transfer</th><th>Comments</th><th>Dparting Times</th><th>Delete</th></tr>";

?>
<form name="update_times" method="post" action="depart_t.php">
<?php
$i=0;

while($row = mysqli_fetch_array($result))
  {
  echo "<input type='hidden' name='id[$i]' value='" . $row['id'] . "'>";
  echo "<tr>";
  echo "<td align='center'><input name='resident[$i]' style='width: 80px' type='text' value='" . htmlspecialchars($row['r_name'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='room_n[$i]' style='width: 40px' type='text' value='" . htmlspecialchars($row['room'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='appt_time[$i]' style='width: 55px' type='text' value='" . date("g:i A", strtotime($row['appttime'])) . "' /></td>";  
  echo "<td align='center'><input name='appt_phone[$i]' style='width: 65px' type='text' value='" . htmlspecialchars($row['apptphone'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='name_l[$i]' style='width: 80px' type='text' value='" . htmlspecialchars($row['l_name'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='address[$i]' style='width: 90px' type='text' value='" . htmlspecialchars($row['address'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='city[$i]' style='width: 70px' type='text' value='" . htmlspecialchars($row['city'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='zip[$i]' style='width: 50px' type='text' value='" . $row['zip'] . "' /></td>";
  echo "<td align='center'><input name='buscar[$i]' style='width: 30px' type='text' value='" . htmlspecialchars($row['buscar'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='e_name[$i]' style='width: 60px' type='text' value='" . htmlspecialchars($row['escort_name'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='transfer[$i]' style='width: 40px' type='text' value='" . htmlspecialchars($row['transfer'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='comments[$i]' style='width: 80px' type='text' value='" . htmlspecialchars($row['comments'], ENT_QUOTES) . "' /></td>";
  echo "<td align='center'><input name='out[$i]' style='width: 70px' type='text' value='" . date("g:i A", strtotime($row['depart'])) . "' /></td>";
  echo "<td align='center'><input name='delete[$i]' type='checkbox' value='" . $row['id'] . "' /></td>";
  echo "</tr>";
  ++$i;  
  }

echo "</table>";


?>
<br>
<input type="submit" value="Update" style="float:left; margin:5px" onclick="return confirm('Are you sure you want to proceed?')" /></form>
<form name="print" action="printer_f.php" method="post"><input name="p_friendly" type="submit" value="Printer Friendly View" style="float:left; margin:5px" /></form><form name="delete" action="delete.php" method="post"><input name="delete" type="submit" value="Delete Selected" onclick="return confirm('Are you sure you want to delete these entrys?')" style="float:left; margin:5px" /></form>
这是我的删除代码:

$size = count($_POST['delete']);
$i=0;
while ($i < $size)
    {
        $id = $_POST['id'][$i];
        $sql = "DELETE FROM appointments WHERE id = $id";
        echo $sql;
        mysqli_query($transport, $sql) or die('Error: ' .mysqli_error($transport));

        ++$i;

}
在这段代码中,无论我选择哪一行,第一行都会被删除。我曾尝试在复选框之前使用if语句来检查复选框是否被选中,但这似乎也不起作用。所以我不知所措。谢谢你的帮助

使用以下命令:

$stmt = mysqli_prepare($transport, "DELETE FROM appointments WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
foreach ($_POST['delete'] as $id) {
    mysqli_stmt_execute($stmt);
}
foreach语句更好,因为发布的delete[i]元素只有选中的元素,因此序列中会有间隙。这段代码还显示了如何使用准备好的语句而不是变量替换

您遇到的另一个问题是删除复选框与此提交按钮冲突:

<input name="delete" type="submit" value="Delete Selected" onclick="return confirm('Are you sure you want to delete these entrys?')" style="float:left; margin:5px" />
当您使用该提交按钮时,它将$_POST['delete']设置为delete Selected,这将覆盖所有复选框。为其中一个字段指定不同的名称,并更改从该$\u POST字段读取的代码。

使用以下方法:

$stmt = mysqli_prepare($transport, "DELETE FROM appointments WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
foreach ($_POST['delete'] as $id) {
    mysqli_stmt_execute($stmt);
}
foreach语句更好,因为发布的delete[i]元素只有选中的元素,因此序列中会有间隙。这段代码还显示了如何使用准备好的语句而不是变量替换

您遇到的另一个问题是删除复选框与此提交按钮冲突:

<input name="delete" type="submit" value="Delete Selected" onclick="return confirm('Are you sure you want to delete these entrys?')" style="float:left; margin:5px" />

当您使用该提交按钮时,它将$_POST['delete']设置为delete Selected,这将覆盖所有复选框。为其中一个设置不同的名称,并更改从$\u POST字段读取的代码。

$id=$\u POST['id'][$i]正在将$id设置为$\u POST['id'][0]的值。您应该通过$\u POST['delete']进行迭代。尝试使用VARYDUMP来从表单中获取你所得到的值,这将使你的表单通过的更清楚。也可以考虑为你的删除使用准备好的语句。如果歹徒传递的id为1或1=1,会发生什么情况?$id=$\u POST['id'][$i]正在将$id设置为$\u POST['id'][0]的值。您应该通过$\u POST['delete']进行迭代。尝试使用VARYDUMP来从表单中获取你所得到的值,这将使你的表单通过的更清楚。也可以考虑为你的删除使用准备好的语句。如果一个不法之徒传递了一个id为1或1=1,会发生什么?如果你执行var_dump$\u POST['delete'],你看到期望值了吗?不,我只是得到了这个:string15 delete selected奇怪的是,我有相同的更新语句,更新字段,而且100%正常。因此,我不知道是否需要添加其他内容,因为它们是复选框而不是文本框。听起来您有另一个输入,名称=删除值=删除选中,并且与删除复选框冲突。可能是一个提交按钮或隐藏的输入?我有一个问题,如果你做var_dump$\u POST['delete'],你看到期望值了吗?不,我只是得到了这个:string15 delete selected奇怪的是,我有相同的更新语句,更新字段,而且100%正常。因此,我不知道是否需要添加其他内容,因为它们是复选框而不是文本框。听起来您有另一个输入,名称=删除值=删除选中,并且与删除复选框冲突。可能是一个提交按钮或隐藏的输入?我有一个