Page 1 sur 1

Probleme multi upload

Posté : 25 mai 2011, 11:40
par Jordan67000
Bonjour, je suis actuellement bloqué sur le multi upload. Je m'explique, j'ai réussi a uploader un fichier dans le répertoire que j'ai voulu mais avec plusieurs fichiers on m'a dit qu'il fallait que je présente ma balise sous la forme : <input type="file" name="fichier[]"> mais je n'arrive pas récupérer ces données dans mon script après. J'ai utilisé un foreach.

Partie formulaire.php :

Code : Tout sélectionner

<input type="hidden" name="MAX_FILE_SIZE" value="20971520" /> <br><input type="file" name="fichier" size="30"><br> <br><input type="file" name="fichier2" size="30"><br> <br><input type="file" name="fichier3" size="30"><br> <br><input type="file" name="fichier4" size="30"><br> <br><input type="reset" value="Tout annuler"><br>
Partie upload.php :

Code : Tout sélectionner

<?php $dossier = 'upload/'; $fichier = basename($_FILES['fichier']['name']); $taille_maxi = 20971520; $taille = filesize($_FILES['fichier']['tmp_name']); $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.mp3', '.doc', '.docx', '.avi', '.txt'); $extension = strrchr($_FILES['fichier']['name'], '.'); //Début de la boucle des inputs //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, doc, mp3 ou encore avi'; } if($taille>$taille_maxi) { $erreur = 'Le fichier est trop volumineux'; } 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); $fichier = date('Y-m-d-H-i-s').uniqId().$extension; if(move_uploaded_file($_FILES['fichier']['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 beaucoup de votre aide

Re: Probleme multi upload

Posté : 25 mai 2011, 12:02
par Mazarini
Bonjour,

Pas besoin de forcement utiliser des noms de type fichier[] dans l'input
foreach ($_FILES as $nom => $fichier)
{
   traitement de $fichier / $fichier['name']...
ou traitement de $_FILE[$nom] ($nom remplace 'fichier' dans ton code) 
}

Re: Probleme multi upload

Posté : 25 mai 2011, 14:46
par Ercan67000
Merci de votre aide, je pense avoir trouvé la solution mais je suis encore bloqué une fois l'upload des fichiers réalisés, le message : "Votre upload a été effectué avec succès" s'affiche 3 - 4 fois d'affiler selon le nombre de fichiers uploadés et je voudrais qu'il ne s'affiche qu'une fois..

Extrait du code upload.php :

Code : Tout sélectionner

<?php if (isset($_FILES["fichier"])) { foreach ($_FILES["fichier"]["error"] as $key => $error) { $dossier = 'upload/'; $fichier = basename($_FILES['fichier']['name'][$key]); $taille_maxi = 20971520; $taille = filesize($_FILES['fichier']['tmp_name'][$key]); $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.mp3', '.doc', '.docx', '.avi', '.txt'); $extension = strrchr($_FILES['fichier']['name'][$key], '.'); //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, doc, mp3 ou encore avi<br>'; } if($taille>$taille_maxi) { $erreur = 'Le fichier est trop volumineux'; } 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); $fichier = uniqId().$extension; $tmp_name = $_FILES["fichier"]["tmp_name"][$key]; if(move_uploaded_file($_FILES['fichier']['tmp_name'][$key], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { echo 'Upload effectué avec succès ! <br>'; } else //Sinon (la fonction renvoie FALSE). { echo 'Echec de l\'upload !'; } } else { echo $erreur; } } } ?>

Re: Probleme multi upload

Posté : 25 mai 2011, 22:39
par moogli
Salut,

C'est normal le message est dans la boucle foreach donc l'affichage se fait pour chaque fichier.

Il te faut déplacer ce bout de code en dehors du foreach sans pour autant oublier de compter les possibles erreurs.

Le mieux c'est d'utiliser un tableau avec les messages dedans et tu les affiches après.

@+