За последние 24 часа нас посетили 17424 программиста и 1651 робот. Сейчас ищут 917 программистов ...

Подскажите пожалуйста как заливать фото на сервер с помощью php form oop

Тема в разделе "PHP для новичков", создана пользователем Anthony Fink, 17 авг 2018.

  1. Anthony Fink

    Anthony Fink Новичок

    С нами с:
    30 май 2018
    Сообщения:
    44
    Симпатии:
    0
    в форме я прописываю
    Код (Text):
    1. enctype="multipart/form-data"
    какие дальше действия ?
     
  2. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    пишешь обработчик формы, например на php .

    Ссылку на обработчик указываешь в теге form, например так:
    Код (Text):
    1. <form  action="ссылка на обработчик формы" method="post" enctype="multipart/form-data">
    2.    ...
    3. </form>
     
  3. Anthony Fink

    Anthony Fink Новичок

    С нами с:
    30 май 2018
    Сообщения:
    44
    Симпатии:
    0
    в контролере сделать класс ?
     
  4. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    Вы наверно с каким то фреймворком работаете?

    Можно сделать контроллер, который работает с изображениями, например class ImageController.
    Создать в нем функцию, которая загружает изображение, переименовывает, сохраняет в нужную папку.
    Создать модель , которая будет работать с базой данных и записывать название изображения.

    Через роутинг прописать, чтобы при отправке запроса по определенной ссылке вызывался соответствующий класс и функция.


    Если без фреймворка достаточно просто один php файл создать, который будет принимать данные из формы
     
  5. Anthony Fink

    Anthony Fink Новичок

    С нами с:
    30 май 2018
    Сообщения:
    44
    Симпатии:
    0
    да работаю с фреймворком с курса https://www.udemy.com/object-oriented-php-mvc/
    --- Добавлено ---
    открыл в контролере класс
    PHP:
    1. <?php
    2. class Upload{
    3.     public $src = "../uploads/";
    4.     public $tmp;
    5.     public $filename;
    6.     public $type;
    7.     public $uploadFile;
    8.  
    9.     public function __construct($string){
    10.         $this -> filename = $_FILES[$string]["name"];
    11.         $this -> tmp = $_FILES[$string]["tmp_name"];
    12.         $this -> uploadFile = $this -> src . basename($this -> filename);
    13.     }
    14.  
    15.     public function startUpload(){
    16.         $this -> filename = $_FILES["file"]["name"];
    17.         $this -> tmp = $_FILES["file"]["tmp_name"];
    18.         $this -> uploadFile = $this -> src . basename($this -> filename);
    19.  
    20.     }
    21.  
    22.     public function uploadFile(){
    23.         if(move_uploaded_file($this -> tmp, $this -> uploadFile)){
    24.             return true;
    25.         }
    26.     }
    27. }
     
  6. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    изучай читай документацию.
    я с этим не работал. наверно там примерно похоже. нужна модель, контроллер к него через use подключается модель(наверно), в роутинге прописываешь чтобы при при переходе по ссылке вызывался метод контроллера.
     
  7. Блэйд

    Блэйд Новичок

    С нами с:
    26 июл 2018
    Сообщения:
    10
    Симпатии:
    0
    Здравствуйте! Кто подскажет, как вытащить конечный путь файла после перемещения через move_uploaded_file().

    Хочу добавить картинку в папку на сервере под другим именем, а после уже конечное имя загрузить в БД.
    Через массив $_FILES[image][name] получаю только начальное название файла, файлы в БД записываются, но название не то что нужно.

    Альтернативный вопрос - есть возможность сменить кодировку отправки файлов на сервер? Если файл в кирилице, то приходят кракозябры.
    Кодировка в корне проекта и в самой форме не помогают.

    Спасибо!
     
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Блэйд, вторым параметром функции move_uploaded_file() как раз и является путь, по которому перемещается файл. То есть он уже определён до вызова этой функции.
    Теперь насчет "кракозябр" в именах файлов.
    Для избегания этой проблемы загруженному файлу дают случайное уникальное имя в латинице-цифрах и сопоставляют в базе данных его оригинальному имени.
    --- Добавлено ---
    В общем-то вопрос должен был быть в новой теме задан...
     
  9. Блэйд

    Блэйд Новичок

    С нами с:
    26 июл 2018
    Сообщения:
    10
    Симпатии:
    0
    @Sail,
    Я знаю что второй параметр это путь. Мне интересно, можно ли вывести этот путь в отдельную переменную, как бы получить её из формы, или что то вроде того, как как название преобрзауется в номер записи БД

    PHP:
    1. if (isset($_POST['submit'])) {
    2.             // Если форма отправлена
    3.             // Получаем данные из формы редактирования. При необходимости можно валидировать значения
    4.             $options['name'] = $_POST['name'];
    5.             $options['code'] = $_POST['code'];
    6.             $options['price'] = $_POST['price'];
    7.             $options['category_id'] = $_POST['category_id'];
    8.             $options['brand'] = $_POST['brand'];
    9.             $options['image'] = ?;            
    10.  
    11.             // Сохраняем изменения
    12.             if (Product::updateProductById($id, $options)) {
    13.  
    14.                 // Если запись сохранена
    15.                 // Проверим, загружалось ли через форму изображение
    16.                 if (is_uploaded_file($_FILES["image"]["tmp_name"])) {
    17.  
    18.                     // Если загружалось, переместим его в нужную папке, дадим новое имя
    19.                    move_uploaded_file($_FILES["image"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'] . "/upload/images/products/{$id}.jpg");
    20.                 }
    21.             }
    Сейчас код ниже, но названия соответственно не меняются
    PHP:
    1. if(isset($_POST['submit'])) {
    2.             $options['name'] = $_POST['name'];
    3.             $options['code'] = $_POST['code'];
    4.             $options['price'] = $_POST['price'];
    5.             $options['category_id'] = $_POST['category_id'];
    6.             $options['brand'] = $_POST['brand'];
    7.             $options['image'] = $_FILES['image']['name'];
    8.            
    9.             if(Product::updateProductById($id, $options)){
    10.                 // Проверим, загружалось ли через форму изображение
    11.                 if(is_uploaded_file($_FILES['image']['tmp_name'])) {
    12.                     // Если загружалось, переместим его в нужную папку, дадим новое имя
    13.                     move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT']. "/template/images/home/{$_FILES['image']['name']}");
    14.                 }
    15.             }
     
    #9 Блэйд, 28 авг 2018
    Последнее редактирование: 28 авг 2018