Помогите, пожалуйста. Никак не могу при редактировании статьи придумать, как "не потерять" изображение из формы. При редактировании оно просто теряется.
<?php //ФАЙЛ IMAGEPROC.PHP
// Перезапишем переменные для удобства
$filePath = $_FILES['upload']['tmp_name'];
$errorCode = $_FILES['upload']['error'];
// Проверим на ошибки
//if ($errorCode !== UPLOAD_ERR_OK || !is_uploaded_file($filePath)) {
// Массив с названиями ошибок
// $errorMessages = [
// UPLOAD_ERR_INI_SIZE => 'Размер файла превысил значение upload_max_filesize в конфигурации PHP.',
// UPLOAD_ERR_FORM_SIZE => 'Размер загружаемого файла превысил значение MAX_FILE_SIZE в HTML-форме.',
// UPLOAD_ERR_PARTIAL => 'Загружаемый файл был получен только частично.',
// UPLOAD_ERR_NO_FILE => 'Файл не был загружен.',
// UPLOAD_ERR_NO_TMP_DIR => 'Отсутствует временная папка.',
// UPLOAD_ERR_CANT_WRITE => 'Не удалось записать файл на диск.',
// UPLOAD_ERR_EXTENSION => 'PHP-расширение остановило загрузку файла.',
// ];
// Зададим неизвестную ошибку
// $unknownMessage = 'При загрузке файла произошла неизвестная ошибка.';
// Если в массиве нет кода ошибки, скажем, что ошибка неизвестна
// $outputMessage = isset($errorMessages[$errorCode]) ? $errorMessages[$errorCode] : $unknownMessage;
// Выведем название ошибки
// die($outputMessage);
//}
// Создадим ресурс FileInfo, проверяющая MIME-тип файла
$fi = finfo_open(FILEINFO_MIME_TYPE);
// Получим MIME-тип
$mime = (string) finfo_file($fi, $filePath);
// Закроем ресурс
finfo_close($fi);
// Проверим ключевое слово image (image/jpeg, image/png и т. д.)
if (strpos($mime, 'image') === false) die('Можно загружать только изображения.');
// Результат функции запишем в переменную
$image = getimagesize($filePath);
// Зададим ограничения для картинок
$limitBytes = 1024 * 1024 * 20;
$limitWidth = 3500;
$limitHeight = 3500;
// Проверим нужные параметры
if (filesize($filePath) > $limitBytes) die('Размер изображения не должен превышать 5 Мбайт.');
if ($image[1] > $limitHeight) die('Высота изображения не должна превышать 3500 точек.');
if ($image[0] > $limitWidth) die('Ширина изображения не должна превышать 3500 точек.');
// Сгенерируем новое имя файла на основе MD5-хеша
$name = md5_file($filePath);
// Сгенерируем расширение файла на основе типа картинки
$extension = image_type_to_extension($image[2]);
// Сократим .jpeg до .jpg
$format = str_replace('jpeg', 'jpg', $extension);
// Переместим картинку с новым именем и расширением в папку /files
if (!move_uploaded_file($filePath, __DIR__ . '/files/' . $name.$format)) {
die('При записи изображения на диск произошла ошибка.');
};
$image = $name.$format;
?>
//ФАЙЛ INDEX.PHP
<?php
header("Content-Type: text/html; charset=utf-8");
ini_set('display_errors',1);
require("auth.php");
require_once("../database.php");
require_once("../models/articles.php");
$link = db_connect();
$article['title']=''; //это, чтобы не выдавало сообщение об ошибке в выводе статей
$article['data']='';
$article['content']='';
$article['author']='';
$article['image']='';
//-------------обработчик изображения----------
if(!empty($_FILES['upload']['tmp_name'])) {
require_once ("../imageproc.php");
};
// --------------- логика -----------------
if (isset($_GET['action'])) //Проверяет, нажата ли какая-либо кнопка действий
$action = $_GET['action'];
else
$action ="";
if ($action == "add"){ // Если нажато "добавить статью", то вызываем функцию "новая статья" (из подключенного файла models.php)
if (!empty($_POST)){
article_new($link, $_POST['title'], $_POST['content'], $_POST['data'], $image);
header("Location: index.php");
}
<!-- begin snippet: js hide: false console: true babel: false -->
<!DOCTYPE html>
<html lang="ru">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Мой первый блог</title>
<link rel="stylesheet" type="text/css" href="../style.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Мой первый блог</h1>
<h3>Форма добавления статьи</h3>
<div>
<form class="form-horizontal" method="post" enctype="multipart/form-data" action="index.php?action=<?=$_GET['action']?>&id=<?=$_GET['id']?>" >
<div class="form-group">
<label>
Название
<input type="text" name="title" value="<?=$article['title']?>" class="form-control" autofocus required>
</label>
</div>
<div class="form-group">
<label>
Дата
<input type="date" name="data" value="<?=$article['data']?>" class="form-control" required>
</label>
</div>
<div class="form-group">
<label>
Содержимое
<textarea name="content" class="form-control" required><?=$article['content']?></textarea>
</label>
<label>
<input type="file" name="upload" value=<?=$article['image']?>>
</label> <br/>
</div>
<input type="submit" value="Сохранить" class="btn">
</form>
</div>
<div class="footer">
<p>Мой первый блог<br>Copyright © 2016</p>
</div>
</div>
</body>
</html>
include("../views/article_admin.php");
}
else if ($action == "edit"){ //Если нажато "редактировать", то вызываем функцию "редактировать стьатью""
if (!isset($_GET['id']))
header("Location: index.php");
$id = (int)$_GET['id'];
if (!empty($_POST) && $id > 0){
article_edit($link, $id, $_POST['title'], $_POST['content'], $_POST['data'], $image);
header("Location: index.php");
}
$article = article_get($link, $id);
include("../views/article_admin.php");
} else if ($action == "delete"){ //Если нажато "удалить", то вызываем функцию "удаления"
$id = $_GET['id'];
article_delete($link, $id);
header("Location: index.php");
}
else{
$articles = article_all($link); // Иначе вывести все статьи списком(вызов соответствующей функции)
include("../views/articles_admin.php");
}
?>
Хранить имя уже существующего изображения в <input type="hidden">
, и при сохранении, если нет нового из type="file"
, использовать его
...
<label>
<input type="file" name="upload">
<input type="hidden" name="image" value="<?=$article['image']?>">
</label>
...
Или просто, если не загружено изображение - не менять старое при сохранении
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Регулярные выражения для меня - что-то далекое и неизведанноеНе могу сейчас сесть изучать, т
Хотел спросить, относится ли абстракция к принципам ООП? Почему на некоторых ресурсах только: наследование, инкапсуляция, полиморфизм?