Php 如何在图像上传中销毁当前图像

Php 如何在图像上传中销毁当前图像,php,jquery,html,ajax,pdo,Php,Jquery,Html,Ajax,Pdo,我想做的是,当用户决定更改其个人资料图片时,数据库中的链接将被更新,并将图像移动到上载文件夹,并销毁该特定用户上载文件夹上的当前链接和图像 我的代码中的问题是,当用户更改其个人资料图片时,它会在上载文件夹中添加另一张图片。我想做的是删除当前图像的第一个具体用户之前,他选择的新图像是在上传文件夹上移动 php代码 <?php include_once('../dbc/database.php'); $db = new Connection(); $db = $db->dbConnec

我想做的是,当用户决定更改其个人资料图片时,数据库中的链接将被更新,并将图像移动到上载文件夹,并销毁该特定用户上载文件夹上的当前链接和图像

我的代码中的问题是,当用户更改其个人资料图片时,它会在上载文件夹中添加另一张图片。我想做的是删除当前图像的第一个具体用户之前,他选择的新图像是在上传文件夹上移动

php代码

<?php
include_once('../dbc/database.php');

$db = new Connection();
$db = $db->dbConnect();
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


$email = isset($_POST['email']) ? $_POST['email'] : "";
$image = addslashes(file_get_contents($_FILES['imageInput']['tmp_name']));
$image_name = addslashes($_FILES['imageInput']['name']);
$image_size = getimagesize($_FILES['imageInput']['tmp_name']);

move_uploaded_file($_FILES["imageInput"]["tmp_name"], "../upload/" . $_FILES["imageInput"]["name"]);
$location = "elogFiles/upload/" . $_FILES["imageInput"]["name"];


$qOldpic = "SELECT user_image FROM tbl_user WHERE user_email = : email";
$queryOldpic = $db->prepare($qOldpic);
$queryOldpic->bindParam(':email', $email);
$queryOldpic->execute();
$num_rows = $queryOldpic->rowCount(); 


if ($num_rows == 1) {
    unlink($queryOldpic);
    $q = "UPDATE tbl_user SET user_image = '$location' WHERE user_email= :email ";
    $query = $db->prepare($q);
    $query->bindParam(':email', $email);
    $results = $query->execute();
    echo "1";
}


?>

上面的url将帮助您了解删除先前图像文件的正确方法

如果要使错误消息在给定位置不存在该文件时不可见,请使用“@”,这样您就可以忽略错误显示,如下所示:

<?php
unlink($filename);
?>

在执行
更新之前,请运行
选择
并通过
电子邮件
获取
用户图像
,将其存储到变量中,如
$oldPicture

之后,您应该像这样删除图片:

if ((!!$oldPicture) && (file_exists($oldPicture))) {
    unlink($oldPicture);
}

只有当图像的路径有值且文件存在时,才能删除图像。确保
$oldPicture
的路径正确。最后,在上面的if之后,您可以运行
update
命令。我不会深入探讨安全问题,因为这超出了本问题的范围,但请确保您防止。

切勿以客户提供的名称存储此类图像!始终基于用户id创建一个内部名称以确保安全。然后,在执行
移动上传的文件()
之前,您只需在目标路径上调用
取消链接()
。您可以使用函数unlink()删除文件。我尝试了取消链接,但当我上传另一幅图像时,图像文件仍然更清晰。我假设$\u POST['imageLink']指向当前图片(要删除)。您需要打印出它是否正确包含文件的完整路径,并检查unlink调用的返回值。除此之外,我认为您最好直接从DB中调用$_POST['imageLink']的值,以避免用户在web表单中被利用。(否则,你应该清理$_POST['imageLink']以确保程序代码是安全的)我编辑了我的代码,现在它不会更新。你能帮我找到它的错误吗?我尝试了你的建议并编辑了我发布的代码。你能看看它有什么问题吗?我没有你的数据库,所以,如果你描述一下你在测试中的经历,我可以给你更多的帮助。就目前情况而言,只有当用户有以前的个人资料图片时,您才进行更新,这当然是不正确的。我的回答建议您应该在if之后执行更新,而不是在内部。您需要能够保存配置文件图片,即使您在数据库中没有该图片的值,或者该文件不存在。我再次编辑了我的代码,但仍然没有运气:(我再次发布了我的新代码。正如我在上一篇评论中问过你的那样,我将再次问:你能描述一下你的经历吗?我无法访问你的数据库,因此我无法测试你的代码,因此你只更新代码的重复操作是不够的。“不工作”和“运气不佳”没有描述您的问题。正如在我之前的评论中,我必须再次指出,您编辑的代码仍然执行更新,当且仅当用户已经存储了图片并且它存在于指定位置时。您需要在if之后执行更新,而不是在其内部。