Я делаю создание динамической галереи изображений с помощью PHP, все мои CRUD функционируют должным образом, за исключением случаев, когда я обновляю данные изображения (заголовок &) если новый файл изображения i не выбран, старый файл все еще удаляется. PHP код выглядит следующим образом:галерея изображений CRUD - функция обновления удаляет существующий файл, даже если замена не выбрана
$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» не хранит сам файл, просто путь к изображению, это что-то меняет? – eschift
Я не уверен, что правильно понимаю ваш последний комментарий. Когда вы смотрите на веб-форму на экране - да, элемент формы типа '' file "' выглядит как элементы формы типа '" text "и показывает локальный путь к файлу, который будет загружен. Но когда сервер получает форму, на самом деле он содержит как имя, так и содержимое файла. Таким образом, '$ _POST ['image']' всегда будет пустым, независимо от того, был ли файл или не был загружен - потому что это не обычный элемент формы, а файл. Доступ к файлам осуществляется с помощью супер-глобального '$ _FILES'. –