我正在使用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)