пишешь обработчик формы, например на php . Ссылку на обработчик указываешь в теге form, например так: Код (Text): <form action="ссылка на обработчик формы" method="post" enctype="multipart/form-data"> ... </form>
Вы наверно с каким то фреймворком работаете? Можно сделать контроллер, который работает с изображениями, например class ImageController. Создать в нем функцию, которая загружает изображение, переименовывает, сохраняет в нужную папку. Создать модель , которая будет работать с базой данных и записывать название изображения. Через роутинг прописать, чтобы при отправке запроса по определенной ссылке вызывался соответствующий класс и функция. Если без фреймворка достаточно просто один php файл создать, который будет принимать данные из формы
да работаю с фреймворком с курса https://www.udemy.com/object-oriented-php-mvc/ --- Добавлено --- открыл в контролере класс PHP: <?php class Upload{ public $src = "../uploads/"; public $tmp; public $filename; public $type; public $uploadFile; public function __construct($string){ $this -> filename = $_FILES[$string]["name"]; $this -> tmp = $_FILES[$string]["tmp_name"]; $this -> uploadFile = $this -> src . basename($this -> filename); } public function startUpload(){ $this -> filename = $_FILES["file"]["name"]; $this -> tmp = $_FILES["file"]["tmp_name"]; $this -> uploadFile = $this -> src . basename($this -> filename); } public function uploadFile(){ if(move_uploaded_file($this -> tmp, $this -> uploadFile)){ return true; } } }
изучай читай документацию. я с этим не работал. наверно там примерно похоже. нужна модель, контроллер к него через use подключается модель(наверно), в роутинге прописываешь чтобы при при переходе по ссылке вызывался метод контроллера.
Здравствуйте! Кто подскажет, как вытащить конечный путь файла после перемещения через move_uploaded_file(). Хочу добавить картинку в папку на сервере под другим именем, а после уже конечное имя загрузить в БД. Через массив $_FILES[image][name] получаю только начальное название файла, файлы в БД записываются, но название не то что нужно. Альтернативный вопрос - есть возможность сменить кодировку отправки файлов на сервер? Если файл в кирилице, то приходят кракозябры. Кодировка в корне проекта и в самой форме не помогают. Спасибо!
@Блэйд, вторым параметром функции move_uploaded_file() как раз и является путь, по которому перемещается файл. То есть он уже определён до вызова этой функции. Теперь насчет "кракозябр" в именах файлов. Для избегания этой проблемы загруженному файлу дают случайное уникальное имя в латинице-цифрах и сопоставляют в базе данных его оригинальному имени. --- Добавлено --- В общем-то вопрос должен был быть в новой теме задан...
@Sail, Я знаю что второй параметр это путь. Мне интересно, можно ли вывести этот путь в отдельную переменную, как бы получить её из формы, или что то вроде того, как как название преобрзауется в номер записи БД PHP: if (isset($_POST['submit'])) { // Если форма отправлена // Получаем данные из формы редактирования. При необходимости можно валидировать значения $options['name'] = $_POST['name']; $options['code'] = $_POST['code']; $options['price'] = $_POST['price']; $options['category_id'] = $_POST['category_id']; $options['brand'] = $_POST['brand']; $options['image'] = ?; // Сохраняем изменения if (Product::updateProductById($id, $options)) { // Если запись сохранена // Проверим, загружалось ли через форму изображение if (is_uploaded_file($_FILES["image"]["tmp_name"])) { // Если загружалось, переместим его в нужную папке, дадим новое имя move_uploaded_file($_FILES["image"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'] . "/upload/images/products/{$id}.jpg"); } } Сейчас код ниже, но названия соответственно не меняются PHP: if(isset($_POST['submit'])) { $options['name'] = $_POST['name']; $options['code'] = $_POST['code']; $options['price'] = $_POST['price']; $options['category_id'] = $_POST['category_id']; $options['brand'] = $_POST['brand']; $options['image'] = $_FILES['image']['name']; if(Product::updateProductById($id, $options)){ // Проверим, загружалось ли через форму изображение if(is_uploaded_file($_FILES['image']['tmp_name'])) { // Если загружалось, переместим его в нужную папку, дадим новое имя move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT']. "/template/images/home/{$_FILES['image']['name']}"); } }