【问题标题】:Deleting single row from database从数据库中删除单行
【发布时间】: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 "&#163;" . $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 有很多资料可供参考。

标签: mysql sql database pdo


【解决方案1】:

整理处理的粗略方式。

这里取deleteItem的calue,根据空间将其炸开,并使用第3个item作为要删除的item的id:-

<?php


if(isset($_POST['deleteItem'])) 
{
    list($filler, $filler2, $id_to_delete) = explode(' ', $_POST['deleteItem']);
    if (is_numeric($id_to_delete))
    {
        try 
        {
            $results = $db->prepare("DELETE FROM 
                                        property_details
                                        WHERE
                                        id = :theid
                                        ");
            $results->bindParam(':theid', (int)$id_to_delete);
            $results->execute();
        } 

        catch (Exception $e) 
        {
            echo "Could not delete data from the database";
        } 
    }   
}

try 
{
    $results = $db->query("SELECT id, property_name, property_description, host_name, location, price 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 "&#163;" . $property_details['price'] . " per night";
    echo '</td>';
    echo '<td>';
    echo '<input type="submit" name="deleteItem" value="DELETE ID '.$id.'" />';
    echo '</td></tr>';
}
echo '</table>';
echo '</form>';

?>

可能应该检查第 3 部分是要删除的有效项目(即有效 id)

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2014-07-22
    • 2014-05-09
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多