我一直在寻找小时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 +解决方案 我已经删除了我的表单中的“动作”重定向,它运行正常。
答案 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条件中删除单引号。