Probleme multi upload

Petit nouveau ! | 7 Messages

25 mai 2011, 11:40

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

ViPHP
ViPHP | 2577 Messages

25 mai 2011, 12:02

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) 
}

Ercan67000
Invité n'ayant pas de compte PHPfrance

25 mai 2011, 14:46

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 mai 2011, 22:39

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.

@+
Il en faut peu pour être heureux ......