При редактировании статьи, как повторно отправить имя изображения

106
06 мая 2021, 07:50

Помогите, пожалуйста. Никак не могу при редактировании статьи придумать, как "не потерять" изображение из формы. При редактировании оно просто теряется.

<?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 &copy; 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");
    }
?>
Answer 1

Хранить имя уже существующего изображения в <input type="hidden">, и при сохранении, если нет нового из type="file", использовать его

...
<label>
    <input type="file" name="upload">
    <input type="hidden" name="image" value="<?=$article['image']?>">
</label>
...

Или просто, если не загружено изображение - не менять старое при сохранении

READ ALSO
Цикл запроса mysql php

Цикл запроса mysql php

Подскажите пожалуйста, есть такой массив:

102
Регулярное выражение с цифрами, буквами и знаками припенания

Регулярное выражение с цифрами, буквами и знаками припенания

Регулярные выражения для меня - что-то далекое и неизведанноеНе могу сейчас сесть изучать, т

76
вхождение IP в подсеть CIDR

вхождение IP в подсеть CIDR

есть файл cidrtxt :

106
ООП в Java. Относится ли абстракция к принципам ООП?

ООП в Java. Относится ли абстракция к принципам ООП?

Хотел спросить, относится ли абстракция к принципам ООП? Почему на некоторых ресурсах только: наследование, инкапсуляция, полиморфизм?

92