【发布时间】:2014-06-24 15:58:28
【问题描述】:
我正在尝试根据其 ID 从数据库中删除一行。用户应该能够单击删除按钮,并且该行中的所有内容都应该被删除 - 根据我下面的代码,它有点工作,但它会从表中删除所有行,而不是仅基于一个特定行身份证。
感谢您看到的任何代码可能不是最佳实践,但这只是个人项目的基本测试阶段,以便我更好地学习 PHP。
我做错了什么?
try {
$results = $db->query("SELECT * FROM property_details ORDER BY id ASC");
} catch (Exception $e) {
echo "Data could not be retrieved from the database.";
exit;
}
$property = $results->fetchAll(PDO::FETCH_ASSOC);
echo '<form method="post">';
echo '<table><th> Property Name </th><th> Description </th><th> Host Name </th><th> Location </th><th> Price </th>';
foreach ($property as $property_details) {
$id = $property_details['id'];
echo '<tr>';
echo '<td>';
echo $property_details['property_name'] . '<br />';
echo '</td>';
echo '<td>';
echo $property_details['property_description'] . '<br />';
echo '</td>';
echo '<td>';
echo $property_details['host_name'] . '<br />';
echo '</td>';
echo '<td>';
echo $property_details['location'] . '<br />';
echo '</td>';
echo '<td>';
echo "£" . $property_details['price'] . " per night";
echo '</td>';
echo '<td>';
echo '<input type="submit" name="deleteItem" value="DELETE ID '.$id.'" />';
echo '</td></tr>';
if(isset($_POST['deleteItem'])) {
try {
$results = $db->prepare("DELETE FROM
property_details
WHERE
id = :theid
");
$results->bindParam(':theid', $id);
$results->execute();
}
catch (Exception $e) {
echo "Could not insert data in to the database";
}
}
}
echo '</table>';
echo '</form>';
【问题讨论】:
-
要么 (1) 每个按钮都有一个表单,带有一个带有 id 的隐藏输入,要么 (2) 在名称中的某处添加 id(
name="deleteItem['.$id.']"是一个好的开始。 -
使用 POST 或 DELETE 调用的 jQuery 触发器可能比为每个按钮都输入一个表单更容易。
-
@Wrikken 如果我要使用选项 2,我将如何进行?我如何将它合并到我的代码中?
-
@tadman 如果我使用 jQuery 来做这件事,你能帮我指引正确的方向吗?
-
这和 jQuery 一样基本,所以你需要一个 jQuery 教程。 main site 有很多资料可供参考。