Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/12/2012, 11h34   #1
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 78
Points : 78
Par défaut Upload multiple de fichiers

Bonjour à toutes et à tous,

J'effectue un upload multiple de fichiers (4 fichiers), mais seul le premier fichier est uploadé alors que les autres ne le sont pas.

Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
// on parcourt le tableau et la clé de l'élément courant est copiée dans $k tandis que sa valeur est copiée dans $v
				foreach($_FILES['photo']['name'] as $k=>$v) {
					$tmp = $_FILES['photo']['tmp_name'][$k]; 
					$fichiers = array($k => $v);
					// Rappel : c'est à partir de la clé que l'on retrouve la valeur dans le tableau indexé
					$photo = basename($fichiers[$k]); // le chemin du nom du fichier uploadé
					// on vérifie que le fichier uploadé est une image pour cela ...
					// on récupère l'extension du fichier uploadé et on la met en minuscule
					$ext = explode('.',$photo);
					$img = end($ext); // pour récupérer l'extension du fichier uploadé
					// on place les extensions dans un tableau pour pouvoir récupérer toutes les valeurs en dehors de la boucle 
					$allow_ext = array("jpg", "jpeg", "png", "gif");
					// il faut impérativement vérifier que le répertoire n'existe pas déjà			
					if(!file_exists($dossier)) { // si le dossier n'existe pas encore alors ...				
						// création d'un répertoire où seront stockées les photos	
						mkdir("photos".'/'.$id_annonce."", 0777, true); 
						// puis on déplace sur le serveur les fichiers uploadés
						move_uploaded_file($tmp, $dossier . $fichiers[$k]);	
						// on affecte le type de la photo
						//$photo_type = $_FILES['photo']['type'];			
					} // fin if(!file_exists($dossier))					
				} // fin foreach()

Je pense que le problème vient de cette ligne
Code :
move_uploaded_file($tmp, $dossier . $fichiers[$k]);
$fichiers[$k] ne récupère que le premier fichier et "squeeze" les autres.

Merci d'avance.
Transact.
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2012, 11h55   #2
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 514
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 514
Points : 21 352
Points : 21 352
Est-ce que tu as déjà debugué un peu ?
Par exemple contrôle ce que contient $_FILES['photo'].

Utilise des variables plus parlantes.
En relecture il faut s'accrocher pour faire le lien entre $fichiers[$k] ou même $v et le nom du fichier.
D'ailleurs pourquoi passer par ce $fichiers[$k] ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2012, 15h12   #3
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 78
Points : 78
Voici ce que contient $_FILES['photo'].
Code PHP :
1
2
 
Array ( [name] => Array ( [0] => img1.jpg [1] => img2.jpg [2] => img3.jpg [3] => img4.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg [2] => image/jpeg [3] => image/jpeg ) [tmp_name] => Array ( [0] => C:\xampp\tmp\phpEF12.tmp [1] => C:\xampp\tmp\phpEF13.tmp [2] => C:\xampp\tmp\phpEF14.tmp [3] => C:\xampp\tmp\phpEF15.tmp ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 ) [size] => Array ( [0] => 17610 [1] => 21947 [2] => 10512 [3] => 7357 ) )

Effectivement, il est plus pertinent d'utiliser des variables plus parlantes.
D'ailleurs, je me rends compte que je ne suis peut-être pas obligé de passer par $fichiers[$k].
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 10h56   #4
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 78
Points : 78
J'ai modifié mon code qui donne ceci :
Code php :
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
27
28
29
30
31
32
33
34
 
 
		$dossier = 'photos/'.$id_annonce.'/'; // le répertoire où seront stockées les photos des annonces
 
		$cpt = $_POST['compteur']; // On récupère notre nombre de champs
		while($cpt) {
			$fichier = $_FILES['photo' .$cpt];
			$error = $fichier['error'];
 
			if($error == UPLOAD_ERR_FORM_SIZE) { // si $error correspond au code d'un fichier trop volumineux alors ...
				echo 'La photo est trop volumineuse !';
			} else{
				if($error == UPLOAD_ERR_OK) {
					$tmp = $fichier['tmp_name']; 
					$photo = $fichier['name'];
					$ext = explode('.',$photo); // explode() retourne un TABLEAU de chaînes					
					$img = end($ext); // pour récupérer l'extension du fichier uploadé
					// on place les extensions dans un tableau pour pouvoir récupérer toutes les valeurs en dehors de la boucle 
					$allow_ext = array("jpg", "jpeg", "png", "gif");
 
					// il faut impérativement vérifier que le répertoire n'existe pas déjà			
					if(!file_exists($dossier)) { // si le dossier n'existe pas encore alors ...				
						// création d'un répertoire où seront stockées les photos	
						mkdir("photos".'/'.$id_annonce."", 0777, true); 
						// puis on déplace sur le serveur les fichiers uploadés
						move_uploaded_file($tmp, $dossier . $photo);														
					} // fin if(!file_exists($dossier))
 
				} else {
					echo "Erreur lors de l'upload. Le fichier n'est pas valide !";
				}
			} // fin if() ... else
			$cpt--; // on décrémente le compteur puisque dans la condition du while il vaut 4
		} // fin while($cpt)
La dernière image est uploadée et les 3 premières ne le sont pas!

Merci d'avance.
Transact.
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 14h21   #5
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 78
Points : 78
J'ai modifié mon code les 4 photos sont uploadées, par contre lorsque je crée un bloc de code visant à redimensionner les photos une seule photo est redimensionnée, uniquement la dernière.

Code php :
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
// Dans notre contexte nous devons récupérer 4 images pour l'upload		
	if(isset($_FILES['photo']) && ($size =count($_FILES["photo"]["name"])) <=MAX_FILE){				
		// boucle for pour parcourir l'ensemble des fichiers qui seront uploadés, $i correspond à chacun des fichiers traités
		for($i=0; $i <$size; $i++) {
			if($_FILES["photo"]["error"][$i] ===UPLOAD_ERR_OK && $_FILES["photo"]["size"][$i] <=MAX_FILE_SIZE){
				$photo_tmp = $_FILES['photo']['tmp_name'][$i];
				$photo_name = $_FILES['photo']['name'][$i];
				$photo_ext = explode('.',$photo_name); // explode() retourne un TABLEAU de chaînes
				$img = end($photo_ext); // pour récupérer l'extension du fichier uploadé
				// on place les extensions dans un tableau pour pouvoir récupérer toutes les valeurs en dehors de la boucle 
				$allow_ext = array("jpg", "jpeg", "png", "gif");
if(!file_exists($dossier)) { // si le dossier n'existe pas encore alors ...	
					// on crée le dossier où seront stockées les photos	
					mkdir($dossier, 0777, true);
				}
				if(in_array(strtolower($img), $allow_ext)) { // si l'extension du fichier uploadée est dans le tableau alors ...										
					$image_size = getimagesize($photo_tmp); // getimagesize() renvoi un tableau cf. php.net 			
					print '<pre>';
					print_r($image_size); // mime=>image/jpeg
					print '</pre>';
 
					// partie traitant le redimensionnement des images
					if($image_size['mime'] == 'image/jpeg') { 
						$image_src = imagecreatefromjpeg($photo_tmp);
					} else if($image_size['mime'] == 'image/gif') {
						$image_src = imagecreatefromgif($photo_tmp);
					} else if($image_size['mime'] == 'image/png') {
						$image_src = imagecreatefrompng($photo_tmp);
					} else {
						echo "Le format de votre image n'est pas valide !";
						$image_src = false;				
					}				
 
					if($image_src !== false) { // si le format de l'image est valide
						$image_width = 300; // taille souhaitée des images
						// si la taille de la photo est supérieure à la taille souhaitée alors on redimensionne la hauteur et la largeur de l'image
						if($image_width <= $image_size[0]) { 				 
							$new_width[0] = $image_width; // nouvelle largeur
							$new_height[1] = round(($image_size[1]/$image_size[0])*$image_width,0); // on effectue un ratio de l'image							
 
							$image_finale = imagecreatetruecolor($new_width[0],$new_height[1]) or die ("Erreur");
							imagecopyresampled($image_finale, $image_src,0,0,0,0,$new_width[0],$new_height[1],$image_size[0],$image_size[1]);
							imagedestroy($image_src); // on supprime l'image source car elle ne nous est pas utile
						} else { // sinon on conserve l'image
							$image_size = $image_src; 
						} // fin if() ... else	
 
						$photo_resize = imagejpeg($image_finale,$dossier ."photo1.jpg", 100); // Affichage de l'image dans un fichier	
						$photo_resize = time();
 
					} // fin if($image_src !== false)
 
					// puis on déplace sur le serveur les fichiers uploadés
					move_uploaded_file($photo_tmp, $dossier .$photo_name);
				} else {
					$error = on_error($i, $photo_name);									
					echo "Le fichier n'est pas une image !";
				} // fin if(in_array(strtolower($img), $allow_ext)) ... else
			} else {
				$error = on_error($i, $photo_name);	
			} // fin if($_FILES["photo"]["error"][$i] ===UPLOAD_ERR_OK && $_FILES["photo"]["size"][$i] <=MAX_FILE_SIZE) ... else														
		} // fin boucle for()
 
		if(!$error){ // $error passe à true donc les fichiers sont uploadés 
			echo "Votre annonce est enregistrée et en attente de validation !";
			//header( "refresh:3;url=http://localhost/clothesBusiness/index.php" ); 
 
		}
		$error =false;
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h27.


 
 
 
 
Partenaires

Hébergement Web