Одновременая загрузка фотографий и текста в 1 форме PHP Mysql

229
23 апреля 2022, 13:40

Не знаю, либо я просто не создан для программирования и пора все это забросить и оставить только фронтэнд, либо просто реально нет годного материала ни в сети ни в книгах. Я прогуглил все поисковики, один шлак и никакой конкретики по моему вопросу, либо приведено столько кода для этого действия, что его просто бессмысленно внедрять в виду неэффективности и тот кто его писал сам не понимает в программировании.

Объясните пожалуйста коллеги на пальцах и с кодом, чтобы понять все это раз и навсегда.

По отдельности загружать фото - ок, получается, print_r выводит массив и показывает название фотографии и другие ее данные в том числе размер, загрузка множества фотографий выдает пустой массив, хотя выбран multipart в форме, не говоря уже о одновременной загрузке и фото и других полей формы что вообще никак не выходит.

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

Есть форма, в ней помимо текста также нужно позволить пользователям загружать фотографии. Для примера возьмем 1 поле с вводом номера.

<form name="Download" id="Download" method="post" action="So.php" enctype="multipart/form-data">
   <input type="number" name="run" value="run" >    

            <input type="file" name="file">
     
 <input type="submit" value="Загрузить файл!">
    
</form>

Данные при нажатии на кнопку ловлю так.


$data = $_POST;
$photo = $_FILES;

//Выводим
if(isset($data['submit']))            { 
 

  
   echo'<pre>';
     print_r($data);
   echo'</pre>';

   echo'<pre>';
     print_r($photo);
   echo'</pre>';
  
}
else {
  exit('No');  
}

Уже настолько обидно что это не получается, нет подходящих слов. Я прекрасно понимаю что по сути это обычный массив с данными, но как его с технической точки зрения "приручить" не знаю и на англоязычных ресурсах тоже ничего детально описывающего процесс не нашел.

Answer 1

Спокойней, у всех бывают неудачи, особенно во время обучения. Иногда лучше отдохнуть и со свежей головой вернуться к проблеме.

Если разбираться в том, что не так с кодом:

  1. В $_POST не будет поля submit, т.к. у <input type="submit" value="Загрузить файл!"> нет аттирбута name="submit"

  2. enctype="multipart/form-data" означает то как браузер отправит данные, а не какие и сколько

  3. что бы отправить несколько файлов, нужно создать несколько input с type="file" и уникальным name (хотя можно сделать name="arr_name[]")

Что мы имеем в итоге?

<form name="Download" id="Download" method="post" action="so.php" enctype="multipart/form-data">
    <input type="number" name="run" value="run">
    <input type="file" name="file1">
    <input type="file" name="file2">
    <input type="file" name="file3">
<!--                   ^^^^^^^^^^^^      -->
<!--          уникальное name у каждого  -->
    <input type="submit" name="submit" value="Загрузить файл!">
<!--                     ^^^^^^^^^^^^^  -->
<!--                    у submit теперь есть имя -->
</form>

И соответсвенно вот что мы получаем на выводе(я загрузил файлы: exmaple.js, package-lock.json и test.html):

Array
(
    [run] => 123
    [submit] => Загрузить файл!
)
Array
(
    [file1] => Array
        (
            [name] => exmaple.js
            [type] => text/javascript
            [tmp_name] => /tmp/phpADCPPN
            [error] => 0
            [size] => 765
        )
    [file2] => Array
        (
            [name] => package-lock.json
            [type] => application/json
            [tmp_name] => /tmp/phpqG2ipe
            [error] => 0
            [size] => 15311
        )
    [file3] => Array
        (
            [name] => test.html
            [type] => text/html
            [tmp_name] => /tmp/php5UiNYE
            [error] => 0
            [size] => 658
        )
)
READ ALSO
Помогите исправить ошибку в sql запросе

Помогите исправить ошибку в sql запросе

помогите исправить ошибку в данном sql запросе

229
Mysql foreign key

Mysql foreign key

Есть несколько таблиц: user admin clientЗдесь указываются роли и создаются отдельные аккаунты для них

196
Как изменить текущее время в Mysql?

Как изменить текущее время в Mysql?

База данных Mysql не верно показывает время, получаю командой SELECT NOW();

243