#php #html
#php #HTML
Вопрос:
Я пытаюсь обновить изображение, сохраненное в каталоге. Я также сохранил имя файла в MySQL. Сохранение изображений выполняется с использованием move_uploaded_file()
. Но, похоже, нет способа получить имя файла из базы <input type="file">
данных. Итак, как вы думаете, какой лучший способ сообщить моим пользователям, что они редактируют изображение, поскольку я не могу передать значение в input:file
тег. Как я могу показать пользователям изображение, которое они пытаются редактировать.
[
Комментарии:
1.
it seems that there is no way to fetch the filename from database into <input type="file">
…. нет, это не так. Но зачем вам это нужно?<input type="file">
предназначен для ввода файлов. Если вы хотите отобразить файл на веб-странице, используйте<img>
.2. Onc это имя файла и путь хранятся в базе данных, которую вы не будете использовать
input type='file'
для редактирования чего-либо, только для замены изображения другим изображением, и в этом случае, когда выбрано новое изображение и отправлена форма, вы уже знаете идентификатор записи, в которой изначально хранилось изображение, поэтому обновите эту запись.3. @ProfessorAbronsius итак, вы думаете, мне следует оставить страницу редактирования продукта как есть, не отображая изображение, которое они редактируют? и просто заменить старый загруженный файл на новый?
4. Если вы на самом деле не разрешаете пользователю редактировать изображение (как в Photoshop или аналогичном), то вы на самом деле не редактируете изображение. Вы можете легко отобразить изображение, и это может быть полезно, если, например, пользователь хочет добавить описание изображения…
5. Вы можете использовать некоторые хитрые CSS-позиции элементов и javascript, чтобы создать иллюзию, что
file
на странице редактирования повторно загружен исходный файл.
Ответ №1:
Я бы загрузил изображение на компьютеры пользователей, затем отредактировал, а затем повторно загрузил, заменив существующее изображение.
Ответ №2:
Согласно комментарию — вы могли бы использовать небольшую хитрость, чтобы создать иллюзию, что file input
имя изображения уже загружено с использованием css и javascript. Следующий пример очень быстро собран (протестирован только в Chrome) и примерно соответствует впечатлению, что имя файла предварительно выбрано (кроме текста красным цветом, чтобы выделить вещи здесь)
<?php
$filename='default.jpg'; // this would be from database select query...
?>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title></title>
<style>
#product{
width:200px;
height:2rem;
display:inline-block;
position:absolute;
left:6rem;
background:white;
color:red;
font-weight:bold;
z-index:2;
cursor:pointer;
}
input[type='file']{
height:2rem;
float:left;
clear:none;
z-index:1;
}
</style>
</head>
<body>
<form method='post'>
<div id='container'>
<span id='product'><?=$filename;?></span>
<input type='file' name='product' />
</div>
</form>
<script>
let oInput=document.querySelector('input[type="file"][name="product"]');
let oSpan=document.getElementById('product');
oSpan.addEventListener('click',e=>{e.target.parentNode.removeChild(e.target);
oInput.click();
});
oInput.addEventListener('change',e=>{
oSpan.parentNode.removeChild(oSpan);
})
</script>
</body>
</html>
let oInput=document.querySelector('input[type="file"][name="product"]');
let oSpan=document.getElementById('product');
if( oSpan ){
oSpan.addEventListener('click',e=>{e.target.parentNode.removeChild(e.target);
oInput.click();
});
}
oInput.addEventListener('change',e=>{
if( oSpan )oSpan.parentNode.removeChild(oSpan);
})
#product{
width:200px;
height:2rem;
display:inline-block;
position:absolute;
left:5.75rem;
background:white;
color:red;
font-weight:bold;
z-index:2;
cursor:pointer;
}
input[type='file']{
height:2rem;
float:left;
clear:none;
z-index:1;
}
<form method='post'>
<div id='container'>
<span id='product'>default.jpg</span>
<input type='file' name='product' />
</div>
</form>