我以前曾尝试问过这个问题,但有人无礼地告诉我我发布了太多代码。所以这一次我会尽力只发布相关代码。
因此,我尝试使用复选框删除多行。我查了很多关于它的教程,大多数都使用 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
,这会覆盖所有复选框。为其中之一指定一个不同的名称,并更改从该 $_POST
字段中读取的代码。
关于php - 使用php中的复选框删除多个mysql行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24660445/