IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Upload multiple JavaScript / PHP


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut Upload multiple JavaScript / PHP
    Bonjour,
    je suis a la recherche d'une solution d'upload multiple.
    En parcourant le site j'ai trouvé cet article:
    http://olance.developpez.com/article...t/multiupload/
    qui m'a l'air bien, mais je n'arrive pas a comprendre ou son uploadé les fichiers?
    j'ai cherché une variable a changer, mais j'ai rien trouvé...
    j'ai aussi essayé de recuperer les fichiers avec un classique move file, mais rien non plus...
    Quelqu'un a dèjà mis en pratique cet article?

    j'ai essayé ca, mais ca marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    foreach($_FILES as $fichier)
            {
            $tempname=$fichier['name'];
            $filename=$_FILES['userfile']['$tempname'];
            $path = 'tmp/'.$fichier['name'];
     
            if(move_uploaded_file($filename, $path ))
                {
             print $fichier['name'] . "<br/>";
             }
     
     
            }
    Merci d'avance,
    A+
    VooDoo

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Les fichiers arrivent dans /tmp qui est définis dans la variable $path
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    Tu as des erreurs dans ta manière de récupérer les informations sur les fichiers téléchargés. Je te conseille de faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach ($_FILES as $fichier) {
        $tempname = $fichier['tmp_name'];
        $filename = $fichier['name'];
        $path = 'tmp/'.$filename;
     
        if (move_uploaded_file($tempname, $path)) {
            echo $filename.'<br/>';
        }     
    }
    Si ca ne fonctionne, pas vérifie qu'il existe bien un dossier tmp/ à côté du fichier qui execute ce script. Le cas échéant, que tu as les droits d'écriture dans ce dossier.

    À bientôt,

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    Ok ca marche, merci bcp!

    Serait-il complexe de modifier le script afin de pouvoir ajouter un select pour selectionner le type de document de chaque fichier?

  5. #5
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    Non il suffit d'ajouter un select avec un name unique pour toute la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($_FILES as $i => $f){
        $tempname = $f['tmp_name'];
        $doctype = $_POST['doctype'][$i];
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    ca marche, mais je ne recois que le dernier type de fichier...
    Comme si chaque upload ecrasé le type au lieu d'ajouter un element au tableau...
    j'ai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $i=0;
    foreach($_FILES as $fichier){
        $tempname = $fichier['tmp_name'];
        $filename = $fichier['name'];
        $path = $filename;
     
        if(move_uploaded_file($tempname, $path)){
     
    		$doctype = $_POST['filetype'][$i];
    		echo $doctype.'-'.$filename.'<br/>';
    	$i++;
        }     
    }
    et ca coté formulaire html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    <span id="input">
    				<select name="filetype[]" id="filetype">
    				<option value="MSDS">MSDS</option>
    				<option value="Iso">Iso</option>
    				</select></span>
    Il faut peut etre generer le select en js en mm temps que les inputs file??
    J'ai essayé mais j'suis trés mauvais en js..

  7. #7
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    Si tu regardes bien, tu verras que dans le code que je t'ai fournit j'utilise $i comme clé lorsque j'itère sur la liste de fichiers. Tu n'as pas à déclarer $i.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($_FILES as $i => $f){
        echo $i;
    }
    Affiche 0, puis 1, puis 2, jusqu'au nombre de fichiers

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    Bonjour,
    merci pour l'explication du $_FILES as $i => $f
    je connaissais pas cet ecriture...
    Par contre cela revient au meme, et du coup:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $doctype = $_POST['filetype'][$i];
    		echo $doctype.'-'.$filename.'<br/>';
    $doctype est toujours vide...

  9. #9
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Hmm, bizzare,

    Et comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for($i = 0; $i < count($_FILES); $i++){
        $file = $_FILES[$i];
        $doctype = $_POST['filetype'][$i];
        $tmp_name = $file['tmp_name'];
    }
    Si cela ne fonctionne pas tu as dû faire une erreur. Aussi, un identifiant doit être unique, tu ne peux pas mettre id="filetype" sur tous tes select.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    non ca ne marche pas...
    pour que l'id ne soit pas unique, il faut que je cree les select en js alors?

  11. #11
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Si ces deux solutions ne marchent pas, tu as fait une erreur ailleurs alors. Chez moi, toutes deux fonctionnent.

    Pour que les identifiants des select soient unique, tu peux leur suffixer un indice à chaque tour de boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for($i = 0; $i < 5; $i++){
        echo '<select name="filetype[]" id="filetype'.$i.'"></select>';
    }

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    Arf, je penses que l'on ne parle pas du meme contexte....
    Moi je suis parti du tuto suscité ou les input file sont généré a la volé par du js aprés chaque selection de fichiers...
    ces input file sont généré par le js dans un span, ou j'ai rajouté mon select.

    Je ne peux donc pas faire apparaitre x select avec une boucle.

    D'ou ma question, ne faut-il pas rajouté ce select dans le fichier js?
    Fichiers attachés Fichiers attachés

  13. #13
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    Oui je me suis un peu planté en écrivant le code en PHP, le raisonnement est identique en JavaScript.

    Pour résumé :

    Les deux codes que je t'ai fournit pour la récupération des fichiers téléchargés et du type sont corrects. Il faut que tu changes ta manière d'écrire les <select name="filetype" />.

    Dans le code JavaScript que tu montres il n'y a pas la partie dédiée à la création des <select name="filetype" /> associées à chaque nouveau fichier.

    De plus, à un endroit tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var filetype = document.getElementById("filetype").value;
    Avec ce code tu récupères à chaque fois la même valeur (et oui un id est unique).

    Donc d'après ce code, j'en déduit que tu n'as qu'un seul <select name="filetype" />. Non ?

    Si c'est le cas pourquoi suffixer [] pour signifier de multiples occurences alors que ton select s'applique à l'ensemble des fichiers ? Tu n'aurais qu'à récupérer la valeur $_POST['filetype'] avant de boucler sur l'ensemble des fichiers.

    Dans le cas contraire, tu dois créer un <select name="filetype[]" /> pour chaque nouveau fichier. Ensuite, tu ne dois pas affecter le même identifiant à chacun d'eux (voire ne pas leur mettre d'identifiant du tout ca me parait pas utile). De ce manière tu pourras utiliser le code que je t'ai fournit ci-dessus.

    Pourrais-tu expliciter et montrer la partie du code incriminée ?

    À bientôt,

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    Merci pour ta reponse, voila 2 jours que je me bat avec js pour rajouter un select filetype en mm tps que le input file mais sans succes...

    Je n'arrive pas a rajouter la creation d'un autre select avec la fonction javascript...
    j'ai essayé du :
    var ligne = document.createElement('p');
    var selection = document.createElement('select');
    et mon dernier en desespoir du:
    document.getElementById("combo2").innerHTML

    dois-je reposter en forum js?
    Fichiers attachés Fichiers attachés

  15. #15
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    Si tu créé ton select avec le DOM (document.createElement) tu ne peux pas ajouter cet élément avec la méthode innerHTML.

    En effet, si tu te documentais sur cette fonction, tu t'apperceverais que celle-ci attend une chaine de caractère.

    Il faut utiliser la méthode appendChild qui ajoute un enfant DOMElement au noeud parent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var select = document.createElement('select');
    select.options.add(new Option('valeur', 'text'), 0);
    select.selectedIndex = 0;
    document.getElementById('id_du_parent').appendChild(select);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var select = document.createElement('select');
    document.getElementById('id_du_parent').appendChild(select);
    select.innerHTML = '<option value="valeur">text</option>';
    À bientôt,

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut
    Cool cette conversation car je baigne dedans, elle m'a bien fait avancer mais je bloque toujours.

    Pour résumer mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    for($i=1; $i<=3; $i++) {
    ?>
    <input type="file" name="file<?php echo $i; ?>" value="Parcourir">
    <input type="text" name="caption" id="file<?php echo $i; ?>" value="Entrer une légende">
    <?php } ?>
    C'est cette fichue légende qui me fatigue, j'ai tenté x 'name'; 'id' sans succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	foreach ($_FILES as $fichiers => $f)
    	{
    		....
    		$nomTemporaire = $f["tmp_name"];
    		...
    		$caption = $_POST['caption'][$fichiers];
    J'en suis à ce test là mais soit j'ai la valeur complète du dernier champ de saisie de la légende, soit, j'ai qu'une lettre, soit pire !

    Donc, merci pour cette discussion très intéressante et si vous aviez une idée d'où est mon problème !

    Et la version javascript m'intéresse, je vais regarder ça de plus pret mais j'aimerais que celle ci soit fonctionelle avant.

  17. #17
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    La manière dont tu construit tes input ne correspond pas avec la manière dont tu tentes de les récupérer :

    Utilises une de ces deux solutions comme je l'ai déjà mentionné et mis en exergue plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach($_FILES as $i => $f){
        $tmp_name = $f['tmp_name'];
        $caption = $_POST['caption'.$i];
    }
    for($i = 0; $i < count($_FILES); $i++){
        $tmp_name = $_FILES[$i]['tmp_name'];
        $caption = $_POST['caption'.$i];
    }

Discussions similaires

  1. Upload multiple JS/PHP
    Par VooDooNet dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 07/11/2009, 09h37
  2. [PHP-JS] Upload de fichier en passant par JAVASCRIPT + PHP
    Par polothentik dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/05/2008, 08h52
  3. Réponses: 6
    Dernier message: 09/10/2005, 14h56
  4. [demande] upload multiples
    Par pIch dans le forum Général Java
    Réponses: 6
    Dernier message: 21/07/2005, 15h47
  5. [Upload] upload multiple
    Par mat10000 dans le forum Langage
    Réponses: 3
    Dernier message: 16/06/2005, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo