Télécharger plusieurs fichiers en PHP

Subodh Poudel 30 janvier 2023
  1. Utilisez la balise multiple, un tableau dans la balise name de l’attribut input dans le formulaire et la fonction move_uploaded_file() pour télécharger plusieurs fichiers en PHP
  2. Utilisez le PDO pour télécharger les fichiers multiples dans la base de données en PHP
Télécharger plusieurs fichiers en PHP

Nous allons introduire une méthode pour uploader plusieurs fichiers en PHP en spécifiant l’attribut name de la balise input sous forme de tableau et en utilisant l’attribut multiple. La valeur de l’attribut enctype de la balise form est multipart/form-data. Cette méthode utilise mysqli pour la connexion à la base de données.

Nous présenterons également une autre méthode pour télécharger plusieurs fichiers en PHP à l’aide du PDO. Nous allons télécharger les fichiers dans un dossier, puis les télécharger dans une base de données. Cette méthode est similaire à la première méthode en termes de mise en œuvre.

Utilisez la balise multiple, un tableau dans la balise name de l’attribut input dans le formulaire et la fonction move_uploaded_file() pour télécharger plusieurs fichiers en PHP

Nous pouvons spécifier l’attribut name de la balise input sous forme de tableau pour télécharger plusieurs fichiers. La balise input utilise le mot clé multiple qui nous permet de sélectionner le fichier multiple lors du téléchargement. Nous pouvons écrire l’encodage multipart/form-data pour l’attribut enctype pour spécifier comment les données du formulaire doivent être encodées lors de la soumission du formulaire. On peut utiliser le mysqli pour se connecter à la base de données. La fonction move_uploaded_file() déplace le fichier téléchargé d’un emplacement temporaire du serveur vers l’emplacement souhaité. Nous pouvons utiliser les instructions SQL INSERT pour télécharger le fichier sélectionné dans la base de données.

Par exemple, définissez une connexion à la base de données avec l’objet mysqli et affectez la valeur à la variable $db. Créez un formulaire HTML avec la méthode POST et le type d’encodage multipart/form-data pour télécharger les fichiers. Spécifiez l’attribut type de la balise input comme file et l’attribut name comme file. N’oubliez pas d’écrire l’attribut multiple avant de fermer la balise input. Écrivez la balise input pour soumettre le formulaire.

Vérifiez si le formulaire a été soumis avec la fonction isset(). Utilisez la fonction count pour compter le nombre de fichiers téléchargés. Prenez le $_FILES['file']['name'] comme paramètre de la fonction count et affectez-le à une variable $countfiles. Utilisez la boucle for pour parcourir le fichier téléchargé. À l’intérieur de la boucle, créez une variable $filename et affectez-la comme $_FILES['file']['name'][$i]. Créez un dossier nommé upload dans le répertoire racine. Utilisez la fonction move_upload_file() pour déplacer le fichier. Utilisez $_FILES['file']['tmp_name'][$i] comme premier paramètre qui est le fichier avec le nom temporaire. Utilisez 'upload/'.$filename comme deuxième paramètre qui est le nom du fichier et l’emplacement pour stocker le fichier téléchargé.

Exécutez une requête SQL INSERT pour insérer les fichiers dans la base de données. Insérez la variable $filename comme id et name dans la table fileup de la base de données. Utilisez la variable $db pour appeler la fonction query() avec la variable $sql comme paramètre pour exécuter la requête.

Exemple de code :

# 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>
?>

Production:

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

Utilisez le PDO pour télécharger les fichiers multiples dans la base de données en PHP

Nous pouvons utiliser le PDO pour télécharger plusieurs fichiers en PHP. Nous pouvons utiliser l’objet PDO pour créer une connexion à la base de données. Nous utilisons les instructions préparées pour insérer le fichier dans la base de données. Cette méthode ne diffère de la première méthode qu’en termes de connexion à la base de données. Nous pouvons également utiliser le formulaire HTML exact pour cette méthode. Nous démontrons cette méthode en téléchargeant deux fichiers jpg dans le dossier et la base de données.

Par exemple, établissez une connexion à la base de données PDO à l’aide du mot-clé new et affectez-le à la variable $conn. Vérifiez si le formulaire a été soumis avec la fonction isset(). Comptez les fichiers en utilisant la fonction count comme ci-dessus. Ensuite, écrivez une requête sur la variable $query pour insérer l’id et le name. Écrivez les espaces réservés ? pour les valeurs de la requête. Préparez la requête à l’aide de la fonction prepare() et attribuez la valeur dans la variable $statement. Déplacez chaque fichier dans le dossier uplaod à l’aide de la fonction move_uploaded_file(). Exécutez la requête à l’aide de la fonction execute(). Fournissez un tableau avec le $filename et $target_file comme paramètres de la fonction.

Dans l’exemple ci-dessous, l’utilisateur télécharge deux fichiers jpg. Tout d’abord, le fichier est téléchargé dans le dossier upload, puis il est téléchargé dans la base de données. La base de données contient la table fileup, et elle a les colonnes id et name. Pour en savoir plus sur la fonction move_uploaded_files(), veuillez vous référer au Manuel PHP

Exemple de code :

#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));
        }
  }    
?>

Production:

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

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn