foreach

gringo
Invité n'ayant pas de compte PHPfrance

16 nov. 2006, 21:52

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

Mammouth du PHP | 19672 Messages

16 nov. 2006, 22:58

Et si tu nous disais ce que ça t'affiche : est-ce que par hasard ça n'afficherait pas "array" par hasard ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

gringo
Invité n'ayant pas de compte PHPfrance

17 nov. 2006, 14:45

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

Mammouth du PHP | 19672 Messages

17 nov. 2006, 15:21

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

17 nov. 2006, 16:18

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

Mammouth du PHP | 19672 Messages

17 nov. 2006, 16:38

au lieu de la boucle, essaye donc un :
<pre>
<?php
var_dump($_FILES);
?>
</pre>
Et observe le résultat.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

gringo
Invité n'ayant pas de compte PHPfrance

17 nov. 2006, 16:41

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

Mammouth du PHP | 19672 Messages

17 nov. 2006, 16:44

Ajoute donc les balises <pre> comme je l'ai indiqué, tu pourras lire le contenu et ce sera beaucoup plus explicite.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

gringo
Invité n'ayant pas de compte PHPfrance

17 nov. 2006, 16:56

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

Mammouth du PHP | 19672 Messages

17 nov. 2006, 17:12

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

gringo
Invité n'ayant pas de compte PHPfrance

17 nov. 2006, 17:38

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

Mammouth du PHP | 19672 Messages

17 nov. 2006, 17:53

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 :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

gringo
Invité n'ayant pas de compte PHPfrance

17 nov. 2006, 19:22

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?

Mammouth du PHP | 19672 Messages

17 nov. 2006, 19:30

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

17 nov. 2006, 19:41

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