项目不会从数据库中删除

时间:2015-02-23 15:57:57

标签: php mysql

我一直在寻找小时atm,但我似乎无法删除数据库中的项目。 $id来自$_GET['id']

<?php


$hostdb = "localhost";
$userdb = "root";
$pwdb = "";
$namedb = "cloud";

$dbCon = mysqli_connect($hostdb, $userdb, $pwdb, $namedb);

if(!$dbCon){
    die("CONNECTION FAILED");
}

?>

号召性用语删除按钮。重定向到customers.php

<form action="customers.php" method="POST">
  <button type="submit" name="remove" class="btn btn-sm btn-danger"><i class="glyphicon glyphicon-remove-circle"></i> Remove</button>
</form>

            <?php
            if(isset($_POST['remove'])) { 
                include("php/remove.php");
                removeCustomer($id);
            } 
            ?>

删除课程

<?php
function removeCustomer($id){


    include("connect.php");

    $query = "DELETE FROM customers WHERE Id='$id'";

echo $id //gives me the right id

    if(!mysqli_query($dbCon,$query) === TRUE){
        echo "Error while removing customer from the database.";
    }

    mysqli_close($dbCon);
}
?>

更新 当我重定向到同一页面时,它会被删除。 但这不是我认为的正确方法。

实施例。当我在页面customer.php?id=2并且我的表单重定向到customer.php?id=2时,它就会被移除。

更新2 +解决方案 我已经删除了我的表单中的“动作”重定向,它运行正常。

2 个答案:

答案 0 :(得分:3)

您可以采取一些措施来收紧此代码,并在出现问题时进行更多自我诊断。

首先,遵循处理mysqli_query()结果的惯例。只是检查否定。

其次,让您的错误消息宣布问题以及失败。此外,为了排除故障,请将其宣布成功。

第三,它不太可能,但你可能没有自动提交设置。因此,在执行删除后立即提交更改。

这将生成此代码。

$query = "DELETE FROM customers WHERE Id='$id'";

if(!mysqli_query($dbCon,$query)){
    echo "Error while removing customer ($id) from the database: " 
               . $dbCon->error;
}
else {
    echo "Customer ($id) correctly removed from the database.";
}
if (!mysqli_commit($dbCon)) {
    echo "Transaction commit failed: " . $dbCon->error;
}

mysqli_close($dbCon);

最后,使用绑定参数来保护您的代码免受网络犯罪分子的攻击。那么您的代码将如下所示。

$query = "DELETE FROM customers WHERE Id=?";
$stmt = mysqli_prepare($dbCon, $query) || die ($dbCon->error);
mysqli_stmt_bind_param($stmt, 'd', $id) || die ($dbCon->error);


if(!mysqli_stmt_execute($stmt)){
    echo "Error while removing customer ($id) from the database: " 
               . $dbCon->error;
}

mysqli_stmt_close($stmt);

if (!mysqli_commit($dbCon)) {
    echo "Transaction commit failed: " . $dbCon->error;
}

mysqli_close($dbCon);

这个带有$ stmt的业务看起来像是一项额外的工作。但它的很多更安全 - 可以抵御你的$ id变量中的恶意垃圾。

答案 1 :(得分:0)

用此代码替换If条件。

if(mysqli_query($dbCon,$query) == FALSE){
    echo "Error while removing customer from the database.";
}

OR

if(mysqli_query($dbCon,$query) != TRUE){
    echo "Error while removing customer from the database.";
}

AND

如果您的Id是int,则在where条件中删除单引号。