[PHP] Créer un multi-upload
Fermé
Bonjour, j'ai un script simple pour héberger des fichier 1 par 1, mais j'aimerais créer un système de multi-upload pour aller plus vite mais je ne sais pas comment faire.
Je ne veux pas un script tout fait avec le multi-upload mais juste ce qu'il fait ajouté a mon code actuel.
Je pense qu'il faut utilisé une chaine PHP style for() mais je sais pas du tout comment faire, comment compté le nombre de fois il faut répété le code etc.... même coté HTML je sais pas comment faire.
Merci d'avance.
PS : Si vous voulez, je peux parler sur MSN pour arrivé a bout du problème plus rapidement que sur le forum.
Je ne veux pas un script tout fait avec le multi-upload mais juste ce qu'il fait ajouté a mon code actuel.
Je pense qu'il faut utilisé une chaine PHP style for() mais je sais pas du tout comment faire, comment compté le nombre de fois il faut répété le code etc.... même coté HTML je sais pas comment faire.
Merci d'avance.
PS : Si vous voulez, je peux parler sur MSN pour arrivé a bout du problème plus rapidement que sur le forum.
A voir également:
- [PHP] Créer un multi-upload
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
- Créer un lien pour partager des photos - Guide
24 réponses
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
Modifié par avion-f16 le 5/07/2010 à 22:23
Modifié par avion-f16 le 5/07/2010 à 22:23
Je me suis trompé dans mes explications.
En fait, la structure n'est pas
Pour me faire pardonner, je t'ai codé un exemple fonctionnel.
https://gist.github.com/anonymous/d3c4d9dc096a464c374e
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
En fait, la structure n'est pas
$_FILES['fichiers'][0]['...'] $_FILES['fichiers'][1]['...'] $_FILES['fichiers'][2]['...'] ...Mais
$_FILES['fichiers']['...'][0] $_FILES['fichiers']['...'][1] $_FILES['fichiers']['...'][2] ...
Pour me faire pardonner, je t'ai codé un exemple fonctionnel.
https://gist.github.com/anonymous/d3c4d9dc096a464c374e
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
27 juin 2010 à 00:33
27 juin 2010 à 00:33
Salut.
Pour la partie HTML, il faudra passer par du Javascript pour l'ajout dynamique de champs.
Pour le name de tes input (type="file"), il faudra mettre la même chose avec des crochets au bout.
Par exemple : name="fichiers[]".
Au niveau du PHP, il suffit de traiter les fichiers un par un avec une boucle foreach.
Pour la partie HTML, il faudra passer par du Javascript pour l'ajout dynamique de champs.
Pour le name de tes input (type="file"), il faudra mettre la même chose avec des crochets au bout.
Par exemple : name="fichiers[]".
Au niveau du PHP, il suffit de traiter les fichiers un par un avec une boucle foreach.
foreach($_FILES['fichiers'] as $fichier) { /* Traitement du fichier. * $fichier est un array contenant les données sur le fichier actuel : * size, filename, ... */ }
D'accord, pour le traitement du fichier j'ai tout ce qu'il faut avec les if() de vérifications, par contre je comprend pas a partir d'ici :
* $fichier est un array contenant les données sur le fichier actuel :
* size, filename, ...
* $fichier est un array contenant les données sur le fichier actuel :
* size, filename, ...
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
27 juin 2010 à 19:53
27 juin 2010 à 19:53
Dans la boucle foreach, $fichier représente un fichier.
Tu peux donc accèder aux valeurs de $fichier['size'], $fichier['type'], $fichier['name'], $fichier['error'], $fichier['tmp_name'], ...
Tu peux donc accèder aux valeurs de $fichier['size'], $fichier['type'], $fichier['name'], $fichier['error'], $fichier['tmp_name'], ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
D'accord mais foreach() permet de traité un array et non du HTML avec name="fichiers[]"...
name="fichiers[]" = Array php convertie en HTML ? Si oui :
Il faut pas plutôt faire ceci :
name="fichiers[0]"
name="fichiers[1]"
name="fichiers[2]"
name="fichiers[3]" ....
Merci d'avance.
name="fichiers[]" = Array php convertie en HTML ? Si oui :
Il faut pas plutôt faire ceci :
name="fichiers[0]"
name="fichiers[1]"
name="fichiers[2]"
name="fichiers[3]" ....
Merci d'avance.
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
28 juin 2010 à 12:55
28 juin 2010 à 12:55
$_FILES['fichiers'] sera un array.
Inutile de préciser des chiffres, ça se fera automatiquement.
D'ailleur, en PHP, tu peux même faire ça :
Inutile de préciser des chiffres, ça se fera automatiquement.
D'ailleur, en PHP, tu peux même faire ça :
<?php $array[] = 'Valeur 1'; $array[] = 'Valeur 2'; var_dump($array); ?>
D'accord et pour le dernier point de sécurité :
Je veux limité l'upload simultané à 5, si une personne crée une page en HTML il pourra en mètre en illimité, comment bloqué si c'est plus que 5 en PHP ?
Je veux limité l'upload simultané à 5, si une personne crée une page en HTML il pourra en mètre en illimité, comment bloqué si c'est plus que 5 en PHP ?
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
28 juin 2010 à 15:38
28 juin 2010 à 15:38
$nb = 0; foreach($_FILES['fichiers'] as $fichier) { if($nb < 5) { // Traitement $nb++; } }
Re, désolé pour la remonté, mais encore une question :
Pour le traitement du fichier, avec les vérifications je doit plus utilisé ceci : if(filesize($_FILES[fichier]['tmp_name']) > $taille) mais ceci : if(filesize($fichier['tmp_name']) > $taille) ?
Et puis comment affiché le les lien tout en bas ?
Pour le traitement du fichier, avec les vérifications je doit plus utilisé ceci : if(filesize($_FILES[fichier]['tmp_name']) > $taille) mais ceci : if(filesize($fichier['tmp_name']) > $taille) ?
Et puis comment affiché le les lien tout en bas ?
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
2 juil. 2010 à 14:14
2 juil. 2010 à 14:14
Oui.
Pour afficher les liens, il suffit de faire des echo dans la boucle foreach.
Pour afficher les liens, il suffit de faire des echo dans la boucle foreach.
Ok mais les lien vont s'afficher à la suite :
http://site.com/http://site.com/http://site.com/http://site.com/
Moi je souhaité faire une présentation :
Fichier 1 hébergé :
https://www.salesforce.com/products/platform/overview/
HTML
BBCode
Fichier 2 hébergé :
https://www.salesforce.com/products/platform/overview/
HTML
BBCode
.....
http://site.com/http://site.com/http://site.com/http://site.com/
Moi je souhaité faire une présentation :
Fichier 1 hébergé :
https://www.salesforce.com/products/platform/overview/
HTML
BBCode
Fichier 2 hébergé :
https://www.salesforce.com/products/platform/overview/
HTML
BBCode
.....
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
2 juil. 2010 à 15:25
2 juil. 2010 à 15:25
Et bien il suffit d'écrire le HTML correspondant à chaque "bloc" ...
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
2 juil. 2010 à 21:21
2 juil. 2010 à 21:21
Tu as appris le PHP où ?!
$fichier est un array, tu ne peux pas l'afficher !
Puis si tu ne me donnes pas plus de détails comme le dossier dans lequel tu enregistres le fichier est le nom que tu lui donnes, j'aurais du mal à t'aider.
$fichier est un array, tu ne peux pas l'afficher !
Puis si tu ne me donnes pas plus de détails comme le dossier dans lequel tu enregistres le fichier est le nom que tu lui donnes, j'aurais du mal à t'aider.
Le dossier est /up/ a partir de la racine et le nom des fichiers héberger est renommé par un uniqid() + md5().
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
3 juil. 2010 à 19:49
3 juil. 2010 à 19:49
Dans la boucle foreach, stocke dans une variable ($url) l'url complète vers le fichier.
Après, il te suffit d'écrire le code HTML avec des echo (pense à utiliser les entités HTML).
Après, il te suffit d'écrire le code HTML avec des echo (pense à utiliser les entités HTML).
Je comprend pas trop, actuellement j'utilise ceci pour 1 seul fichier :
<?php
echo '<p><a href="'.$repertoire.$id.$extension.'" onclick="window.open(this.href); return false;">'.$repertoire.$id.$extension.'</a></p>'."\n";
?>
Et pour mes if(), j'utilise ceci :
if(filesize($_FILES[fichier]['tmp_name']) > $taille)
Si c'est un array, il faut que je mètre $fichier[] ?
Désoler mais je ne suis pas très fort en PHP, et la je suis vraiment perdu, merci pour ta patience.
<?php
echo '<p><a href="'.$repertoire.$id.$extension.'" onclick="window.open(this.href); return false;">'.$repertoire.$id.$extension.'</a></p>'."\n";
?>
Et pour mes if(), j'utilise ceci :
if(filesize($_FILES[fichier]['tmp_name']) > $taille)
Si c'est un array, il faut que je mètre $fichier[] ?
Désoler mais je ne suis pas très fort en PHP, et la je suis vraiment perdu, merci pour ta patience.
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
4 juil. 2010 à 00:30
4 juil. 2010 à 00:30
Déjà $_FILES[fichier] c'est invalide : il manque les guillemets et c'est "fichiers", avec un "s".
Comme je te l'ai déjà dis, $_FILES['fichiers'] est donc un array : on l'explore grâce à une boucle foreach.
À l'intérieur de la boucle, $fichier représente le fichier en cours de traitement. Toutes les opérations dans cette boucle sont répétées pour chaque fichier.
Donc dans tes conditions, c'est $fichier['tmp_name'], $fichier['size'], $fichier['error'], ... qu'il faut utiliser.
Pour afficher les codes HTML et BBCode, il suffit de faire de simples echo des codes, en pensant à remplacer les caractères <, > et " par leur équivalent HTML (amp, lt, gt).
Comme je te l'ai déjà dis, $_FILES['fichiers'] est donc un array : on l'explore grâce à une boucle foreach.
À l'intérieur de la boucle, $fichier représente le fichier en cours de traitement. Toutes les opérations dans cette boucle sont répétées pour chaque fichier.
Donc dans tes conditions, c'est $fichier['tmp_name'], $fichier['size'], $fichier['error'], ... qu'il faut utiliser.
Pour afficher les codes HTML et BBCode, il suffit de faire de simples echo des codes, en pensant à remplacer les caractères <, > et " par leur équivalent HTML (amp, lt, gt).
Re, j'ai testé avec un simple if() et cela ne fonctionne pas...
<input type="file" name="fichier[]" />
<?php
$nb = 0;
foreach($_FILES['fichier'] as $fichier) {
if($nb < 5) {
if(!preg_match("/image\//i", $fichier['type']))
echo '<p>Le fichier n\'est pas une image.</p>'."\n";
else {
echo 'OK';
}
$nb++;
}
}
?>
Résulta : Sa affiche 5 fois (a cause du if limité a 5) que le fichier est n'est pas une image, pourtant j'ai bien utiliser $fichier comme tu ma dit...
<input type="file" name="fichier[]" />
<?php
$nb = 0;
foreach($_FILES['fichier'] as $fichier) {
if($nb < 5) {
if(!preg_match("/image\//i", $fichier['type']))
echo '<p>Le fichier n\'est pas une image.</p>'."\n";
else {
echo 'OK';
}
$nb++;
}
}
?>
Résulta : Sa affiche 5 fois (a cause du if limité a 5) que le fichier est n'est pas une image, pourtant j'ai bien utiliser $fichier comme tu ma dit...
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
4 juil. 2010 à 18:15
4 juil. 2010 à 18:15
Ce n'est pas possible qu'il t'affiche 5 alertes si tu n'as qu'un fichier car le contenu de la boucle foreach ne serait exécuté qu'une fois car il n'y a qu'une entrée dans le tableau $_FILES['fichier'].
6 juil. 2010 à 00:19
Donc coté HTML : name="fichiers[]"
Coté PHP : On utilise foreach() mais comment ? (Serrais t-il possible d'avoir une explication comme le tout premier message (malheureusement faux) ?)
Merci d'avance.
6 juil. 2010 à 00:37
En partant de ça, on sait que si $_FILES['fichiers']['error'][0] existe, alors les autres données ($_FILES['fichiers']['name'][0], ...) existent aussi.
On stocke donc le numéro de l'entrée dans la variable $nb qui vaut 0 par défaut. À la fin de la boucle foreach, on l'incrémente de 1, de cette façon, au prochain "passage" dans la boucle, elle vaudra 1, puis 2, ainsi de suite. Avec cette variable $nb, nous pourrons donc récupérer les données (error, tmp_name, size, ...) de cette façon : $_FILES['fichiers']['donnee'][$nb]
$allowedTypes est un array contenant les types MIME autorisés. Je vérifie donc si $_FILES['fichiers']['type'][0] est dans cet array. À la place de cette vérification, j'aurais pu vérifier l'extension, mais cette vérification serait alors inutile : il ne faut pas faire confiance aux extensions.
Je pense avoir expliqué ce qui était nécessaire.