Page 1 sur 2

foreach

Posté : 16 nov. 2006, 21:52
par gringo
Bonsoir,
Je voudrais faire une boucle pour afficher le nom de plusieur image avant upload mais sa marche pas !

Code : Tout sélectionner

foreach ($_FILES['pictures'] as $key => $value) { echo $value; }
merci pour votre aide

Posté : 16 nov. 2006, 22:58
par Cyrano
Et si tu nous disais ce que ça t'affiche : est-ce que par hasard ça n'afficherait pas "array" par hasard ?

foreach suite

Posté : 17 nov. 2006, 14:45
par gringo
oui il affiche bien array, Pourquoi? alors que l'objectif est de faire un tableau $_files et d'afficher le résultat soit : Image.gif image2.gif

Posté : 17 nov. 2006, 15:21
par Cyrano
Je constate que ma question ne t'a pas inspiré :-k

La super-globale $_FILES est un tableau à deux dimensions, mais tu l'as traité comme un tableau à une seule dimension.

Ce que tu récupères normalement, c'est par exemple : $_FILES['champ1']['name']
Donc, il faudrait modifier un peu ta boucle :
foreach ($_FILES as $key)
{
    echo $key['name']; // Où $key correspond à l'attribut "name" de ta balise <input> de type "file"
}
Par exemple. éventuellement, montre le code du formulaire pour ces champs-là si ça ne fonctionne toujours pas.

Posté : 17 nov. 2006, 16:18
par Invité
Merci pour l'explication de la super globale $_FILES

J'ai toujour rien voici le code

Code : Tout sélectionner

<input name="pictures" type="file" id="pictures"> </p> <p> <input name="pictures" type="file" id="pictures"> <label></label> <br/>
et code foreach

Code : Tout sélectionner

foreach ($_FILES as $key) { echo $key['pictures']; }
merci

Posté : 17 nov. 2006, 16:38
par Cyrano
au lieu de la boucle, essaye donc un :
<pre>
<?php
var_dump($_FILES);
?>
</pre>
Et observe le résultat.

Posté : 17 nov. 2006, 16:41
par gringo
Voila var_drump,

Code : Tout sélectionner

array(1) { ["pictures"]=> array(5) { ["name"]=> array(2) { [0]=> string(10) "gateau.gif" [1]=> string(9) "fleur.gif" } ["type"]=> array(2) { [0]=> string(9) "image/gif" [1]=> string(9) "image/gif" } ["tmp_name"]=> array(2) { [0]=> string(45) "C:\DOCUME~1\gringo25\LOCALS~1\Temp\php3BC.tmp" [1]=> string(45) "C:\DOCUME~1\gringo25\LOCALS~1\Temp\php3BD.tmp" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(1966) [1]=> int(2590) } } }

Posté : 17 nov. 2006, 16:44
par Cyrano
Ajoute donc les balises <pre> comme je l'ai indiqué, tu pourras lire le contenu et ce sera beaucoup plus explicite.

Posté : 17 nov. 2006, 16:56
par gringo
voici :

Code : Tout sélectionner

array(1) { ["pictures"]=> array(5) { ["name"]=> array(2) { [0]=> string(9) "fleur.gif" [1]=> string(10) "gateau.gif" } ["type"]=> array(2) { [0]=> string(9) "image/gif" [1]=> string(9) "image/gif" } ["tmp_name"]=> array(2) { [0]=> string(45) "C:\DOCUME~1\gringo25\LOCALS~1\Temp\php3DA.tmp" [1]=> string(45) "C:\DOCUME~1\gringo25\LOCALS~1\Temp\php3DB.tmp" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(2590) [1]=> int(1966) } } }

Posté : 17 nov. 2006, 17:12
par Cyrano
C'est mieux, tu ne trouves pas ? Et selon toi, comment est-ce qu'on peut travailler avec ça ? Observe bien la structure, il y a une logique dans tout ça. Par exemple, comment ne récupérer que les noms des fichiers envoyés pour les faire afficher ?

Posté : 17 nov. 2006, 17:38
par gringo
Tout d'abort merci pour les réponses à mais questions
Pour finir on peut dire que dans une boucle foreach on ne peut récuperer les valeurs pour les affichers avec echo ou print , vus la structure du tableau

Posté : 17 nov. 2006, 17:53
par Cyrano
bien sur que si. Il semble que tu aies besoin d'un petit + sur les tableaux et leur structure de base. Quand tu auras lu ça, réfléchis à nouveau pour voir comment tu pourrais récupérer toutes les informations souhaitées dans une boucle :)

Posté : 17 nov. 2006, 19:22
par gringo
Merci pour le lien,
j'ai fais ma boucle et sa marche enfin presque, je n'est que la première lettre de l'image dessin.gif j'ai d.

Code : Tout sélectionner

foreach ($_FILES['pictures']['name'] as $key) { echo $key['name']; }
pourquoi?

Posté : 17 nov. 2006, 19:30
par Cyrano
Tu n'utilises pas la bonne boucle. Au lieu d'un foreach(), tu devrais compter combien tu as d'images et ensuite utiliser une boucle for()

Donc :
$nb = count($_FILES['pictures']['name']);
for($i = 0; $i < $nb; $i++)
{
    echo($_FILES['picture']['name'][$i]);
}
?>
Essaye comme ça et dis moi si c'est pas mieux :-k

Posté : 17 nov. 2006, 19:41
par gringo53
Merci Beaucoup pour la réponse,
Mais pour ma boucle faite avec foreach pourquoi a tel affichée que les 2 premieres lettres?

Pas obliger de répondre a cette question mais je me sens obliger de vous la poser!

Foreach est bien orienter tableau, son utilisation pour traverser un tableau est mieux non?

Encore une fois merci ! :D