我有这个脚本删除存储在文件系统上的用户的头像图像。此外,图像名称存储在MySQL数据库中。
但由于某种原因,脚本会删除所有用户的信息。例如,如果users_id为3,则还删除所有用户的信息,如名字,姓氏,年龄等。基本上一切都被删除,包括用户。
如何修复此问题,以便仅删除图像和图像名称?
以下是代码:
$user_id = '3';
if (isset($_POST['delete_image'])) {
$a = "SELECT * FROM users WHERE avatar = '". $avatar ."' AND user_id = '". $user_id ."'";
$r = mysqli_query ($mysqli, $a) or trigger_error("Query: $a\n<br />MySQL Error: " . mysqli_error($mysqli));
if ($r == TRUE) {
unlink("../members/" . $user_id . "/images/" . $avatar);
unlink("../members/" . $user_id . "/images/thumbs/" . $avatar);
$a = "DELETE FROM users WHERE avatar = '". $avatar ."' AND user_id = '". $user_id ."'";
$r = mysqli_query ($mysqli, $a) or trigger_error("Query: $a\n<br />MySQL Error: " . mysqli_error($mysqli));
}
}
答案 0 :(得分:1)
由于avatar
是表格users
的属性,您可能只想将avatar
属性设置为NULL
。正如您所做的那样,您实际上正在删除整行。
因此,您应该使用UPDATE
操作代替DELETE
:
$a = "UPDATE users SET avatar = NULL WHERE user_id = '". $user_id ."'";
此外,请注意您的代码容易受到SQL Injection的攻击。您应该考虑使用prepared statements。
答案 1 :(得分:1)
当你的sql说要删除avatar = x和user_id = y的用户时,请更新。
$a = "UPDATE users SET avatar=NULL where user_id='". $user_id ."'";