Boucle et $_FILE [PHP] - PHP - Programmation
Marsh Posté le 02-03-2007 à 16:50:16
gooopil > un "foreach" ( voir doc ) serait beaucoup plus simple, prendrait tous les fichiers quelque soit le nom du composant html et éviterait de devoir tester l'existance vu qu'on boucle sur ce qui existe.
Marsh Posté le 02-03-2007 à 17:02:15
omega2 a écrit : gooopil > un "foreach" ( voir doc ) serait beaucoup plus simple, prendrait tous les fichiers quelque soit le nom du composant html et éviterait de devoir tester l'existance vu qu'on boucle sur ce qui existe. |
J'avais pas vu sa suggestion du foreach. C'est une possibilité aussi...
Marsh Posté le 02-03-2007 à 17:05:41
dac donc apparement j'était pas a l'ouest... , alors donc comment m'y prendre au niveaux "syntaxe" car le problème quand j'avais essayer c'est qu'il me trouvai pas le fichier puisqu'il les considère comme tableau... donc si je compren bien il me recupère chaque ficher comme une ligne d'un array ?
Marsh Posté le 02-03-2007 à 17:58:37
A la page http://fr3.php.net/manual/fr/features.file-upload.php t'as la description du contenu normal de $_FILE.
Comme tu peux voir entre les deux blocs gris,$_FILE est un tableau dont chaque case contient un autre tableau. Le tableau contenu par chaque case est constitué des éléments "name", "type", "size", "tmp_name" et "error". (voir la page indiqué pour la description)
Donc t'as assez bien compris le truc. Grace au foreach, tu aura accés aux informations de chaque fichier. Il te restera ensuite à utiliser ces informations comme dans les exemples de la documentation pour traiter les fichiers qui t'ont été envoyé.
Marsh Posté le 02-03-2007 à 18:10:08
Code :
|
Bon c'est un bout de mon code...j'ai pas tester encore je sais qu'il manke des parametre, je ne sais pas par quelle bout commencer
Marsh Posté le 02-03-2007 à 18:28:48
C'est toi qui a fait ce code là?
Là, pour le moment, ca donne l'impression que c'est sencé envoyer les fichier à un serveur ftp distant et non pas les stocker simplement sur le même serveur que le site internet. C'est bien ça que tu veux faire?
Marsh Posté le 02-03-2007 à 18:34:26
j'ai mis a jour e code je vous explique donc... c'est pour un upload de photo, je veux donc faire ça dynamiquement plutot que m'embeter a tout copier 10 fois
Marsh Posté le 02-03-2007 à 18:38:41
J'ai un problème la apparement il me met un illegal offset
Marsh Posté le 02-03-2007 à 18:43:37
ok, donc j'image que creation_photo existe vraiment et marche bien.
foreach te donne directement le contenu des cases et non pas la clé. Si la clé t'intéresse également alors il faut le préciser :
" foreach($_FILES['photo'] as $macase) " est sans la clé
" foreach($_FILES['photo'] as $key => $macase) " est avec la clé
Dans ton code, si on garde le même foreach que celui que tu as mis, alors "$name = $_FILES['photo']['name'][$key];" deviens "$name = $key['name'];" .
Je te laisse corriger les autres lignes et modifier le nom de la variable $key si t'as envie.
EDIT : ton code était mieux avant ta derniére modif vu qu'avant la modif il n'avait pas de bug.
Marsh Posté le 02-03-2007 à 18:52:36
ben j'ai fait la correction mai ça prend pas plus d'erreur mais pas de upload...grrrr lol..
edit : L'erreur a l'air de se situé au niveau de la restiction des extension... il me dit que l'extension n'ai pas bonne...je suppose que ça deconne avant donc au moment ou je déclare les varables
Merci de m'aider c'est sympa
Marsh Posté le 02-03-2007 à 19:11:49
Deux trucs que je viens de penser :
1) il faut détruire la variable $erreur aprés chaque fichier pour éviter que la détection d'une erreur ne bloque un autre fichier. Autre solution, utiliser un booléen que tu mais à faux (FALSE) quand tu commences à traiter un fichier et à vrai (TRUE) quand tu trouves une erreur. Dans ce cas là il faut vérifier la valeur du booléen.
2) un test sur l'extension n'est pas fiable pour savoir si c'est vraiment une image. D'une part celui qui l'envoie peut trés bien changé l'extension avant de te l'envoyer et d'autre part tous les systémes d'exploitations ne se basent pas là dessus pour savoir quel logiciel lancer quand on clique sur tel ou tel fichier. Parmis les utilisateurs de mac, il y en a un certain nombre qui ne pensent pas souvent à mettre une extension à leur fichier à cause de ça.
En php, parmis les fonctions de la librairie GD, il en existe une qui permet d'obtenir des informations sur les images telles que les dimensions en pixel et le type d'image. Ca sera beaucoup plus fiable comme test.
Là, je n'ai pas le temps de me pencher d'avantage sur ton code. Il fonctionnait bien quand tu n'envoyais qu'un seul fichier à la fois?
Derniére idée en passant, tu n'aurais pas une majuscule dans ton extension par hasard? Ca serait plus prudent de la mettre en minuscule avant de la tester. (de mémoire, la fonction qui permet ça à pour nom "lower" )
Marsh Posté le 02-03-2007 à 19:18:26
Code :
|
Voila le code fonctionnel avec le if.... je reprend du début parce que il faut que je comprenne aussi et pas que je copie betement...
Donc... foreach me permet de recupérer les valeur pour chaque photo postées...
donc en gro foreach ($_FILES['photo'] as $name) veux dire pour chaque photo qui a une valeur tu fai ça....{ }
donc le input devrait ressembler à ça :
<input type="file" name="photo[]" />
ensuite j'aimerai donc avoir une clé (plus facile pour identifier chaque foto différement je suppose)
Alors ça donnerai ça : foreach ($_FILES['photo'] as $name => $key) (donc pour chaque foto qui a un nom on defini une clé et on fai ...{ }
EDIT : Hop voila la réponse j'ai reussi, bon ce que j'ai fai et que je fait toujours, j'ai repris du début, sur un tout petit code test pour comprendre le fonctionnement en en plus en local.. bcp plus simple, j'ai fai différent essai a partir du code fourni ds le manuel php..., dison que je men suis inspiré... ça sert a ça aussi... voili voilou ...maitenent reste le pb des erreur qui font chier.. je vai voir ça aussi..
Comment je fait sinon pour le coup des extension?? je vois pa tro comment je pourrait faire autrement que ça???
Marsh Posté le 02-03-2007 à 16:43:50
Bonjour,
J'aurais voulu savoir si il était possible de créer une boucle avec un $_FILE pour faire un upload de fichier "automatique"..
J'explique :
J'ai donc 8 <input> qui ont pour nom photo1, photo2 .....
Je recupère le fichier pour photo1 avec if(isset($_FILE['photo1']))...etc...
Ma question suis'je obliger de copier 8 fois le code (assez long) pour chaque champs?
Ou estce possible de procéder ainsi :
<input> name="photo[]" </input>
puis faire un boucle genre foreach($photo as $value) (comme pr les checkbox un peu) ...??