gpt4 book ai didi

PHP/MYSQL 按 id 删除行

转载 作者:行者123 更新时间:2023-11-29 12:49:31 24 4
gpt4 key购买 nike

我有一个表单,要求用户输入他们想要从数据库的考试表中删除的考试 ID。

The problem I am having is that even if the user enters in an id that does not match in the DB the script fires the else block completely ignoring the condition.

我可能已经实现了这个错误,但据我所知,我看不出我错在哪里,但我怀疑我在 if 语句中做错了什么。

这是我的表单,要求用户输入要删除的考试 ID

<form method = "post" action = "examDeleted.php">
<h1 class = "title">Delete Exam</h1>
<div class = "formContent">
<labeL for = "id">ID</labeL>
<input type = text name = "id" class = "input">
<br><br>
<br><br><br>
<input type = "submit" value = "Delete">
</div>
</form>`

这被传递给包含 sql 查询的函数,以从表中删除记录

<?php
include('dbLogin.php');
$id = trim($_POST['id']);

if($id != "")
{
$delete = "DELETE FROM exams WHERE id = '$id'";
$results = mysql_query($delete);

if(!$results)
{
die ("Cannot delete data from the database! " + mysql_error());
echo '<br><br>';
echo '<a href="home.html">Return</a>';
}
else
{
echo"Exam: $id has been deleted";
}
}
else
{
echo "No data entered! " . mysql_error();
}

?>

正如您所看到的条件!$results,对我来说,这意味着如果记录不存在,则终止查询,否则确认删除。内部 if 语句被解雇是否有明显的原因?

最佳答案

即使没有删除任何行,

DELETE 语句也被视为成功。 (这是 SQL 的一般工作方式;它不是 MySQL 特有的。)

我想说你应该使用mysql_affected_rows找出删除了多少行,但正如其他人指出的那样, you shouldn't be using the mysql_ functions at all, anyway .

您的代码很容易受到 SQL 注入(inject)攻击。如果有人将以下 ID 发布到 examDeleted.php(请记住,他们不必使用您的表单来执行此操作,因此可以绕过任何客户端检查):

' OR 1 = 1 OR id = ' 

...我认为它可能会删除表中的每项检查,因为您的 SQL 语句最终将如下所示:

DELETE FROM exams WHERE id = '' OR 1 = 1 OR id = ' '

...这是一个有效的 DELETE 语句,其 WHERE 子句与您的所有行相匹配。

使用参数化查询(可在未弃用的 MySQL 驱动程序中使用,例如 mysqli 或 PDO)可以解决此问题。

关于PHP/MYSQL 按 id 删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24979400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com