Formulaire d’upload de fichier permettant les envois multiples

Résolu/Fermé
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 - Modifié par Chris 94 le 17/01/2017 à 02:40
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 - 29 avril 2017 à 04:29
Bonjour,

Suite à mon message dans ce forum qui date du mois de février 2016: https://forums.commentcamarche.net/forum/affich-33201106-comment-cree-une-formule-d-upload#p33204435

J’aurais une autre question, mais à cause que le message original date de février 2016, sois presque un ans dans le passé, j’ai pris l’initiative d’ouvrir un nouveau billet.

Donc ma nouvelle question va comme suis: comment multiplier les boutons pour sélectionner un fichier, avoir qu'un seul bouton "Envoyer" et que tout les fichier sois envoyé en même temps? C'est quoi que je doit ajouter dans le code pour avoir ce résultat?

Contenu du fichier: index.html

<form method="POST" action="uploads.php" enctype="multipart/form-data">
<!-- On limite le fichier à 100Ko mais tu peux retirer ou augmenter cette valeur -->
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Fichier : <input type="file" name="avatar">
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>


Contenu du fichier: uploads.php

<?php
$dossier = 'uploads/'; //dossier où tu veux mettre le fichier uploadé
$fichier = basename($_FILES['avatar']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg'); //les extensions que tu autorises
$extension = strrchr($_FILES['avatar']['name'], '.'); 

//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}

//si tu supprimes la limitation de taille, enlève ce if
if($taille>$taille_maxi) 
{
     $erreur = 'Le fichier est trop gros...';
}

if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
?>


Merci et bonne journée!

Guillaume
A voir également:

7 réponses

Utilisateur anonyme
17 janv. 2017 à 10:18
Utilise l'attribut multiple dans ton input comme ceci:

https://www.w3schools.com/tags/att_input_multiple.asp
0
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8
18 janv. 2017 à 06:01
Bonsoir ZeNairolf!

C'est good ça mais comment avoir plusieurs bouton pour selectioner les files, c'est que c'est pour uploader des images et des vidéos prises avec mon Sony PSP directement sur un des server et c'est pas mal long de selectionner une file à la fois. Avec une machine "station de travail" avec Linux et Firefox il n'y auras pas de troubles car Firefox permet ça mais avec un PSP c'est impossible de selectionner deux file en même temps via leur "file manager" qui permet de voir les files qui sont sur le Memory Stick dans le PSP. C’est un fichier par selection.

Ce que ça prendrait c'est comme 20 bouton “Selectioner Fichier” et un seule bouton “Upload”. J’avais tenter de faire ça et oui il avais plusieurs bouton de selection et juste un bouton pour envoyer mais seule le fichier selectionné par le bouton de selection numéro 1 était envoyé au serveur, les autres files n’étaient pas envoyées.

Merci!

Guillaume
0
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8
22 janv. 2017 à 05:24
Bonjour/Bonsoir ! (dépendamment de l'emplacement)


Est-ce que je pourrais avoir plus de conseils svp concernant le formulaire d’envoi multiples de fichiers ?

J’ai essayé la méthode qui ce trouvait sur le site https://www.w3schools.com/tags/att_input_multiple.asp mais comme je disait dans mon autre message, je ne peut pas faire ça avec ce code là car les Sony PSP permettes d’entrer juste un fichier à la fois à l’aide du gestionnaire de fichier. Si je clique encore sur le bouton pour sélectionner un fichier, le nouveau fichier sélectionné prend la place du premier que j’avais sélectionné initialement.

Avec un navigateur internet régulier comme par exemple Mozilla FireFox, ça fonctionne mais la raison de ce formulaire d’upload multiple c’est pour être utilisé avec un Sony PSP pour permettre l’upload de photos et de vidéos prises à partir de lui et de pouvoir envoyé ces photos et vidéos là en « batch » pour que cette tâche là prenne moins de temps. Pour pouvoir en arriver à ça, il faudrait qu’il ai plusieurs bouton « Sélectionner le fichier » et un seul bouton « Envoyé ».

Mais je sais pas quoi modifier dans le code pour faire ça.

Merci d’avance pour si je peut avoir un peut plus d’aide.

Guillaume
0
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8
25 janv. 2017 à 21:40
SVP? Quelqu'un?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8
21 févr. 2017 à 04:23
Bonsoir tous le monde.

Je sais que les réponses et l'aide sur CCM est faite bénévolement, mais il doit certainement y avoir quelqu'un sur ce forum qui doit savoir comment "multiplier" le code, si je peut me permettre d'appeler l'opération de cette façon.

Peut-être que ce message n'a tous simplement pas vu par cette personne.

@ZeNairolf

Votre contribution est exactment ce que je chercais, pour cette partie du code. Il faudrais juste que je sache maintenant comment de peut modifier le code pour crée plus de "Select File" et que le bouton "Upload/Envoyé" prenne en considération tous les fichiers entrés en cliquant sur "Select File".

Merci en espérant que je puisse trouver la solution.

Guillaume
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
21 févr. 2017 à 11:27
Salut,

Tu peux effectivement, à la place d'utiliser l'attribut multiple sur un seul input, utiliser plusieurs input en spécifiant leurs nom sous forme de tableau (avec des []) afin de pouvoir récupérer l'ensemble des input coté PHP :
https://www.php.net/manual/fr/features.file-upload.multiple.php

Pour ajouter un input de manière dynamique, on peut utiliser javascript pour exécuter une fonction sur le clique d'un bouton "Ajouter un fichier" (addEventListener)? Dans cette fonction, on crée simplement un nouveau input de type file et on l'ajouter dans le formulaire.
Un exemple simple : https://jsfiddle.net/u1h9f884/

Enfin une solution alternative est d'utiliser un plugins javascript déjà développé. Un exemple parmi plein d'autres : https://blueimp.github.io/jQuery-File-Upload/

Bonne journée,
0
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8
23 févr. 2017 à 08:44
Bon matin Pitet!

J'ai été sur le site php.net à l'aide du lien que vous m'avez donné dans votre message mais dans les exemples des utilisateurs c'est juste des petits boutes de codes qui sembles avoir besoin dêtre mis ensembles. Eux ils donnes ces exemples comme si ceux qui s'y connnaissent pas beaucoup en php, comme moi, serais quoi faire avec ces boutes de codes là.

Pouvez vous svp si possible me donner un exemple?

Je sais que le fichier .php doit commençé par <?php et finir par ?> mais certain des exemples avec les arrays sont incomplets, c'est ce que je veut dire par boutes de codes.

Merci pour l'aide et bonne journée à vous aussi!

Guillaume
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
23 févr. 2017 à 11:03
Le premier commentaire (https://www.php.net/manual/fr/features.file-upload.multiple.php#53240) propose une fonction permettant de réordonner le tableau $_FILES lors de l'envoi de plusieurs fichiers afin de pouvoir utiliser ce tableau plus facilement.

Le 6e commentaire (https://www.php.net/manual/fr/features.file-upload.multiple.php#119143) propose un exemple simple et complet en utilisant la fonction proposé au dessus.

En reprenant le code de ce 6e commentaire et en l'adaptant à ton formulaire, on pourrait avoir :
<?php
if(!empty($_FILES['avatar']))
{
    $avatarFiles = reArrayFiles($_FILES['avatar']);
   
    foreach($avatarFiles as $file)
    {
        var_dump($file)
    }
}

function reArrayFiles($file)
{
    $file_ary = array();
    $file_count = count($file['name']);
    $file_key = array_keys($file);
   
    for($i=0;$i<$file_count;$i++)
    {
        foreach($file_key as $val)
        {
            $file_ary[$i][$val] = $file[$val][$i];
        }
    }
    return $file_ary;
}


L'instruction var_dump($file) devrait te permettre d'afficher les informations (name, tmp_name, size, ...) pour chaque fichier uploadé. Il suffit alors de remplacer cette instruction par le code actuel de ton fichier uploads.php en adaptant les variables utilisées : par exemple en remplacant $_FILES['avatar']['name'] par $file['name'].
0
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8
29 avril 2017 à 04:29
Bonjour,

Merci pour votre réponse et désoler du délais de la mienne.


Quand je selectionne deux fichier, et que je pèse sur "Envoyer les fichiers", il y a de l'activité sur la carte mémoire du PSP, mais dans le code que vous m'avez donné comme exemple je ne vois pas ou ça précise ou que les fichiers vont. Dans le code que j'avais déja ceux-ci vont dans /tmp et sont ensuite transféré dans uploads/ .

Je vourais bien ajouter ces lignes dans votre code mais je sais vraiment pas ou les mettres.

Merci encore et votre aide est très apprécié.

Guillaume
0