图片库CRUD-更新功能删除现有文件,即使没有选择替换


image gallery CRUD - update function deletes existing file even if no replacement is selected

我正在使用PHP制作一个动态图像库,我的所有CRUD都按预期运行,除了当我更新图像的详细信息(标题和描述)时,如果我没有选择新的图像文件,旧的图像文件仍然会被删除。PHP代码如下:

    $id = null;
if( !empty($_GET['id'])){
    $id = $_REQUEST['id'];
}
if( null == $id){
  header("location: galleryadmin.php");
}
if (!empty($_POST)){
    $uploader = new Uploader();
    //keep track of validation errors
    $titleError = null;
    $descriptionError = null;
    $imageError = null;
    //track post values
    $title = $_POST['title'];
    $description = $_POST['description'];
    $image = $_POST['image'];
    //validating inputs
    $valid = true;
    if(empty($title)){
        $titleError = 'Please add a title';
        $valid = false;
    }
    if(empty($description)){
        $descriptionError = 'Please add a description';
        $valid = false;
    }
    if (!empty($_FILES['image']['title']) && !$uploader->valid($_FILES['image'])){
        $imageError = 'Invalid file uploaded';
        $valid = false;
    }
    //update data
    if($valid){
        if (!empty($image)){
            $uploader->delete($image);
        }
        $image = $uploader->upload($_FILES['image']);
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $sql = "UPDATE gallery set title = ?, description = ?, image = ? WHERE id = ?";
        $q = $pdo->prepare($sql);
        $q->execute(array($title,$description,$image,$id));
        Database::disconnect();
        header("location: galleryadmin.php");
    }
} else {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM gallery WHERE id = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    $title = $data['title'];
    $description = $data['description'];
    $image = $data['image'];
    Database::disconnect();
}

如果名为"image"的表单元素的类型为"file",则不能使用$_POST['image']访问它,只能通过$_FILES['image']访问它所以你的支票

if (!empty($image)){

是错误的。相反,使用这个

if(is_array($_FILES) AND count($_FILES['image'])!=0 AND $_FILES['image']['error']==UPLOAD_ERR_OK)