IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifier/uploader plusieurs fichier d'un seul coup ?


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Par défaut Vérifier/uploader plusieurs fichier d'un seul coup ?
    Bonsoir @ tous,

    Ce qui m'amène aujourd'hui, c'est le traitement (en mode MODIFICATION) de plusieurs champs <input type="file" value="fichier"> en un seul envoi du même formulaire : mon pb se situe donc au niveau de la BOUCLE à effectuer pour tester chacun de ces fichiers les uns après les autres.

    A l'origine mon code ressemble à ça : il s'agit de valider/uploader/màj BDD concernant 3 photos pour une même galerie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <form method="post" action="traitement.php" name="formulaire" enctype="multipart/form-data">
        <label for="photo1">Fichier 1 :</label>
        <input type="file" name="photo1" id="photo1" />
        <label for="photo2">Fichier 2 :</label>
        <input type="file" name="photo2" id="photo2" />
        <label for="photo3">Fichier 3 :</label>
        <input type="file" name="photo3" id="photo3" />
        <input type="hidden" name="action" id="action" value="confirm_modif" />
        <input type="hidden" name="id_galerie" id="id_galerie" value="<?=$ID;?>" />
        <input type="submit" name="submit" value="Enregistrer" />
    </form>
    Maintenant, il faut :
    - vérifier quel(s) champ(s) "file" a (ont) été renseigné(s) : donc si $_FILES['photo1']['error']!=4 puis si $_FILES['photo2']['error']!=4 puis si $_FILES['photo3']['error']!=4) -> si l'utilisateur n'a pas renseigné de fichier dans le formulaire, c'est qu'il veut conserver le fichier déjà existant, sinon, ça eut dire il veut remplacer le fichier existant par un nouveau (je suis en mode MODIFICATION, souvenez-vous !)
    - pour chacun de ces 3 fichiers et si ($_FILES['photo...']['error']!=4) : vérifier la taille, le format, le type MIME (et autres tests dont je ne vous donne pas le détail parce que je maîtrise !) etc... et donner une alerte si erreur... Bon ça, je sais faire...
    - et si un ou plusieurs de ces 3 fichiers ont été renseignés, uploader ce(s) fichier(s) et mettre à jour la BDD en conséquence (ça aussi je sais faire, ce n'est pas le pb !)

    Là où je coince, c'est pour optimiser l'écriture de mon fichier "traitement.php". Bien sûr, je pourrais traiter chacun de ces 3 fichiers séparément et à la suite les uns des autres, mais ça va alourdir la procédure vu que, pour chacun des 3 champs "file" de mon formulaire, je vais me retrouver avec un bon demi-milliers de lignes de code et 3 requêtes de MàJ de ma base de données à la suite...pas glop !
    Alors si une boucle, traitant tour à tour les 3 champs "file", pouvait être implémentée, ça simplifierait drôlement mon code !!! Mais là, je bloque...

    Je rêve d'ajouter une boucle du genre :
    for ($i=1; $i<4;$i++) {je traite mon fichier $_FILES[photo.$i]; blablabla...} mais ça marche pas !!!

    Voilou...
    Merci d'avance @+

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    plutôt faire photo[]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Par défaut
    Salut stealth35, et surtout merci pour ta réaction super-rapide !!!

    J'ai fait ce que tu m'as dit mais ça marche pas, ou alors (et sûrement), je me suis planté :

    Donc dans mon form, j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <label for="photo[1]">Fichier 1 : </label><input type="file" name="photo[1]" id="photo[1]" />
    <label for="photo[2]">Fichier 2 : </label><input type="file" name="photo[2]" id="photo[2]" />
    <label for="photo[3]">Fichier 3 : </label><input type="file" name="photo[3]" id="photo[3]" />
    Puis ensuite dans traitement.php, j'essaie de traiter ces 3 champs avec cette boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $i = 1;
    for ($i=1; $i<4; $i++) {
        $photo[$i] = $_FILES['photo'][$i];
        echo "photo : ".$photo[$i];
        traitement blablabla...
    }
    Mais j'y arrive pas : quand je fais un echo sur chaque "$photo[$i]", j'obtiens un vide(null) sidéral !!!

    J'ai dû raté un truc...

    Voilou...

    Citation Envoyé par stealth35 Voir le message
    plutôt faire photo[]

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    oula non c'est juste pour le name, pas besion non plus de mettre de valeur c'est juste photo[] pour chaque name, ensuite fait un print_r($_FILES) et tu comprendras

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    	$nombre_photos = count($_FILES['photo']['name']);
      for($x=0;$x<$nombre_photos;$x++)
      {
    	if($_FILES['photo']['size'][$x]>0) // seulement si on a une photo (poids>0)
    	{
    		// extension du fichier uploadé (en minuscule)
    		$file_Extension = strtolower(pathinfo($_FILES['photo']['name'][$x],PATHINFO_EXTENSION));
    		// --------------------
    		// Gestion d'erreurs
    		// .......
    		// --------------------
    		// .......
    		// --------------------
    		// NOM de la PHOTO
    		$file_Upload = $_FILES['photo']['name'][$x];
    		// --------------------
    		// ENREGISTREMENTS de la PHOTO
    		$temp = $_FILES['photo']['tmp_name'][$x];
    		move_uploaded_file($temp, $rep_photos.$file_Upload);
    		// --------------------
    		// .......
     
    	}
      } // fin for
    ?>
    Dernière modification par Invité ; 28/08/2011 à 08h14.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    pourquoi un for avec avec un sizeof (qui est un alias au passage), un foreach suffit, les vraies boucles for c'est :

    for($x = 0, $t = count($_FILES['photo']['name']); $x < $t; ++$x)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Par défaut
    Un grand merci, grâce à vous deux j'ai [enfin] compris le principe !


    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. traiter plusieurs fichiers d'un seul coup
    Par hajarita dans le forum Langage
    Réponses: 15
    Dernier message: 24/05/2012, 09h08
  2. uploader plusieurs fichiers d'un coup
    Par laurentSc dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2010, 20h44
  3. Modifier les propriétés de plusieurs fichiers en un seul coup
    Par 00Dexter00 dans le forum SharePoint
    Réponses: 4
    Dernier message: 08/12/2009, 09h12
  4. [XML][Java] parser plusieurs fichiers en un seul arbre DOM ?
    Par mrlenul dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/11/2005, 11h09
  5. Réponses: 2
    Dernier message: 05/12/2002, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo