Загрузить несколько файлов в PHP

  1. Используйте тег multiple, массив в теге name атрибута input в форме и функцию move_uploaded_file() для загрузки нескольких файлов в PHP
  2. Использование PDO для загрузки нескольких файлов в базу данных в PHP

Мы представим метод загрузки нескольких файлов в PHP, указав атрибут name тега input в виде массива и используя атрибут multiple. Значение атрибута enctype тега form - multipart/form-data. Этот метод использует mysqli для подключения к базе данных.

Мы также представим еще один метод загрузки нескольких файлов в PHP с помощью PDO. Мы загрузим файлы в папку, а затем загрузим их в базу данных. Этот метод аналогичен первому по реализации.

Используйте тег multiple, массив в теге name атрибута input в форме и функцию move_uploaded_file() для загрузки нескольких файлов в PHP

Мы можем указать атрибут name тега input в виде массива для загрузки нескольких файлов. Тег input использует ключевое слово multiple, которое позволяет нам выбирать несколько файлов при загрузке. Мы можем написать кодировку multipart/form-data для атрибута enctype, чтобы указать, как должны кодироваться данные формы при отправке формы. Мы можем использовать mysqli для подключения к базе данных. Функция move_uploaded_file() перемещает загруженный файл из временного местоположения сервера в желаемое местоположение. Мы можем использовать SQL-запросы INSERT для загрузки выбранного файла в базу данных.

Например, установить соединение с базой данных с объектом mysqli и присвоить значение переменной $db. Создайте HTML-форму с методом POST и типом кодировки multipart/form-data для загрузки файлов. Укажите атрибут type тега input как file и атрибут name как file. Не забудьте перед закрытием тега input написать атрибут multiple. Напишите тег input для отправки формы.

Проверьте, была ли форма отправлена ​​с помощью функции isset(). Используйте функцию count для подсчета количества загруженных файлов. Возьмите $_FILES['file']['name'] в качестве параметра для функции count и присвойте его переменной $countfiles. Используйте цикл for для перебора загруженного файла. Внутри цикла создайте переменную $filename и присвойте ей значение $_FILES['file']['name'][$i]. Создайте в корневом каталоге папку с именем upload. Используйте функцию move_upload_file(), чтобы переместить файл. Используйте $_FILES['file']['tmp_name'][$i] в качестве первого параметра, который представляет собой файл с временным именем. Используйте 'upload/'.$filename в качестве второго параметра, который является именем файла и местом для хранения загруженного файла.

Выполните SQL-запрос INSERT, чтобы вставить файлы в базу данных. Вставьте переменную $filename как id и name в таблицу fileup в базе данных. Используйте переменную $db для вызова функции query() с переменной $sql в качестве параметра для выполнения запроса.

Пример кода:

# php 7.*
<?php
if(isset($_POST['submit'])){
    $countfiles = count($_FILES['file']['name']);
    for($i=0;$i<$countfiles;$i++){
        $filename = $_FILES['file']['name'][$i];
        $sql = "INSERT INTO fileup(id,name) VALUES ('$filename','$filename')";
        $db->query($sql);
        move_uploaded_file($_FILES['file']['tmp_name'][$i],'upload/'.$filename);
    }
}
?>
<form method='post' action='' enctype='multipart/form-data'>
<input type="file" name="file[]" id="file" multiple>
<input type='submit' name='submit' value='Upload'>
</form>
?>

Выход:

SELECT * FROM `fileup`
id name 
1 cfc.jpg 
2 hills.jpg

Использование PDO для загрузки нескольких файлов в базу данных в PHP

Мы можем использовать PDO для загрузки нескольких файлов в PHP. Мы можем использовать объект PDO для создания подключения к базе данных. Мы используем подготовленные операторы для вставки файла в базу данных. Этот метод отличается от первого только подключением к базе данных. Мы также можем использовать точную HTML-форму для этого метода. Мы демонстрируем этот метод, загружая два файла jpg в папку и базу данных.

Например, установите соединение с базой данных PDO с помощью ключевого слова new и назначьте его переменной $conn. Проверьте, отправлена ​​ли форма с помощью функции isset(). Подсчитайте файлы, используя функцию count, как указано выше. Затем напишите запрос к переменной $query, чтобы вставить id и name. Напишите заполнители ? для значений в запросе. Подготовьте запрос с помощью функции prepare() и присвойте значение переменной $statement. Переместите каждый файл в папку uplaod с помощью функции move_uploaded_file(). Выполните запрос с помощью функции execute(). Предоставьте массив с $filename и $target_file в качестве параметров функции.

В приведенном ниже примере пользователь загружает два файла в формате jpg. Сначала файл загружается в папку upload, а затем загружается в базу данных. База данных содержит таблицу fileup, в ней есть столбцы id и name. Чтобы узнать больше о функции move_uploaded_files(), обратитесь к Руководству по PHP

Пример кода:

#php 7.x
<?php
$conn = new PDO("mysql:host=$server;dbname=$dbname","$username","$password");
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
if(isset($_POST['submit'])){
    $countfiles = count($_FILES['file']['name']);
    $query = "INSERT INTO fileup (id, name) VALUES(?,?)";
    $statement = $conn->prepare($query);
    for($i=0;$i<$countfiles;$i++){
        $filename = $_FILES['file']['name'][$i];
        $target_file = 'upload/'.$filename;
        move_uploaded_file($_FILES['file']['tmp_name'][$i],$target_file);
        $statement->execute(array($filename,$target_file));
        }
  }    
?>

Выход:

SELECT * FROM `fileup`
id name 
1 upload/cfc.jpg 
2+ upload/count.jpg