Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2011, 18h38   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
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 :
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 @+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 18h43   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 116
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 116
Points : 8 465
Points : 8 465
plutôt faire photo[]
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 19h03   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
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 :
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 :
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[]
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 19h24   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 116
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 116
Points : 8 465
Points : 8 465
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
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 20h56   #5
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Code :
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
?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 06h21   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 116
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 116
Points : 8 465
Points : 8 465
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)
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 10h04   #7
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Un grand merci, grâce à vous deux j'ai [enfin] compris le principe !


@+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h24.


 
 
 
 
Partenaires

Hébergement Web