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 :

[Tableaux] lecture du tableau $_FILE


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Points : 64
    Points
    64
    Par défaut [Tableaux] lecture du tableau $_FILE
    bonjour,

    pourquoi est il impossible de lire le tableau $_FILE par position ?
    celà ne fonctionne que quand je met le nom de la clé


  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Parce que justement c'est un tableau indexé par clé et non par numéro d'indices. Ca s'appelle un tableau associatif.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Points : 64
    Points
    64
    Par défaut
    je pensais qu'un tableau était quoi qu'il arrive toujours accessible par un l'indice de position. Tu ne sais pas comment je pourrais faire pour avoir accès au tableau de cette façon? $_FILE[0], $_FILE[1], ...

    Merci

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    J'aurai pensé la meme chose, mais un test rapide prouve le contraire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php 
    $a =array('aaa'=> 4, 'bbb' => 5);
     
    echo "Valeur par clé : " . $a['aaa'] . "<br/>";
    echo "Valeur par indice : ". $a[1] ."<br/>";
    ?>
    donne ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Valeur par clé : 4
    Valeur par indice :
    Et pour l'accès direct, une astuce de ce style devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $fileIndexTab = array();
    foreach($_FILES as $valeur)
    {
    $fileIndexTab[] = $valeur;
    }
     
    echo $fileIndexTab[0];
    Mais je ne vois pas trop l'intéret, tu n'as aucune idée dans un tableau associatif de ce qui sera considéré comme la première clé, la seconde clé etc.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Points : 64
    Points
    64
    Par défaut
    pourtant fait un peu un print_r(array_keys($_FILES));

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Et ben il suffit de faire ca alors:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php 
    $monTabAssoc	= array
    	(
    	'cle1' => "valeur 1",
    	'cle2' => "valeur 2",
    	'cle3' => "valeur 3",
    	'cle4' => "valeur 4"
    	);
     
    $cleTab	= array_keys($monTabAssoc);
    echo $monTabAssoc[$cleTab[0]];
    ?>
    ce qui revient surement au meme que de construire ton tableau, parce que array_keys() utilise surement un foreach() pour récupérer les clés.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    La notion de tableaux (indexés numériquement) et de hashage ne font qu'un en PHP. En général, quand on utilise un hashage (tableau indexé par des clés en PHP), vous ne retrouverez pas nécessairement les clés dans le même ordre que celui dans lequel elles ont été définies : cela vient de la structure/organisation interne du hashage.

    $_FILES est créé de sorte que, dans un upload multiple de fichiers, il ait cette forme :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Array(
        'name' => Array(
            0 => nom du fichier 1,
            1 => nom du fichier 2
        ),
        'tmp_name' => Array(
            0 => chemin du fichier temporaire 1,
            1 => chemin du fichier temporaire 2
        ),
        'error' => Array( ... ),
        'size' => Array( ... ),
        'type' => Array( ... )
    )
    Et non celle-ci :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Array(
        0 => Array(
            'name' => nom du fichier 1,
            'tmp_name' => chemin du fichier temporaire 1,
            'error' => ...,
            'size' => ...,
            'type' => ...
        ),
        1 => Array(
            ...
        )
    )

    C'est vrai que je trouve moi aussi la deuxième plus pratique et plus logique. Pour contourner son fonctionnement, vous ne pouvez faire que des associations comme celle que propose koopajah (à moins de patcher PHP ...).

  8. #8
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Points : 64
    Points
    64
    Par défaut
    bon je vais poster mon problème complet parceque je n'arrive pas à trouver comment faire.

    j'ai 2 champ d'uploads(doc, ref). chacun d'entre eux peut contenir plusieur fichiers à uploader. Tout ceci ce fait en javascript/php à l'aide d'un script.soit..

    Au final j'obtient un tableau comme ceci

    la 2 ème clé est vide, c'est normal, c'est un bug, mais passons ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Array
    (
        [doc_1] => Array
            (
                [name] => 
                [type] => 
                [tmp_name] => 
                [error] => 4
                [size] => 0
            )
     
        [doc_0] => Array
            (
                [name] => AcajoomNews1.2.3.zip
                [type] => application/octetstream
                [tmp_name] => c:/wamp/tmp\php1F3.tmp
                [error] => 0
                [size] => 677512
            )
     
        [ref_1] => Array
            (
                [name] => 
                [type] => 
                [tmp_name] => 
                [error] => 4
                [size] => 0
            )
     
        [ref_0] => Array
            (
                [name] => Remository341.zip
                [type] => application/octetstream
                [tmp_name] => c:/wamp/tmp\php1F5.tmp
                [error] => 0
                [size] => 719983
            )
     
    )
    Il faudrait que je puisse séparé les clés "doc" des clés "ref".
    et par exemple uploader les fichiers de chacune de ces clé dans des 2 dossiers respectif.

    Merci pour votre aide

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <form method="POST" action="upload.php" enctype="multipart/form-data">
        Doc 0 : <input type="file" name="doc[]" /><br />
        Doc 1 : <input type="file" name="doc[]" /><br />
        Ref 0 : <input type="file" name="ref[]" /><br/>
        Ref 1 : <input type="file" name="ref[]" /><br />
        <input type="submit" value="Envoyer" />
    </form>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    header('Content-type: text/plain');
    print_r($_FILES);
    ?>

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Array
    (
        [doc] => Array
            (
                [name] => Array
                    (
                        [0] => 0226.jpg
                        [1] => 0260.jpg
                    )
                [type] => Array
                    (
                        [0] => image/jpeg
                        [1] => image/jpeg
                    )
                [tmp_name] => Array
                    (
                        [0] => C:\PROGRA~1\EASYPH~1\\tmp\php4.tmp
                        [1] => C:\PROGRA~1\EASYPH~1\\tmp\php5.tmp
                    )
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )
                [size] => Array
                    (
                        [0] => 64036
                        [1] => 329467
                    )
            )
        [ref] => Array
            (
                [name] => Array
                    (
                        [0] => 0280.jpg
                        [1] => 0297.jpg
                    )
                [type] => Array
                    (
                        [0] => image/jpeg
                        [1] => image/jpeg
                    )
                [tmp_name] => Array
                    (
                        [0] => C:\PROGRA~1\EASYPH~1\\tmp\php6.tmp
                        [1] => C:\PROGRA~1\EASYPH~1\\tmp\php7.tmp
                    )
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )
                [size] => Array
                    (
                        [0] => 190177
                        [1] => 623803
                    )
            )
    )


  10. #10
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Points : 64
    Points
    64
    Par défaut
    pour ne pas faire 50 champs upload j'utilise un script php/javascript

    http://the-stickman.com/web-developm...-file-element/

    donc j'obtient un tableau sous la forme que j'ai montré donc je suis obligé de partir de la.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Points : 64
    Points
    64
    Par défaut
    il faudrait que dans chaque foreach un test soit effectué sur le préfix de la clé [doc_] ou [ref_] et uploader dans le bon répertoire

  12. #12
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Et si tu gardes ton script actuel et que tu fais qqch comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
     
    $finTable = false;
    $index = 0;
    while(!$fintableau)
    {
    // si le document d'index $i existe
    if(isset($monTab["doc_".$i]))
    {
    // traitement spécial
    }
    else // plus de clé
    {
    $fintableau = true;
    }
     
    $i++;
    }
    ?>
    En fait tu peux accéder a tes clés puisque tu sais exactement comment elles se nomment (ce que tu sais pas en fait c'est le nombre de clés que tu auras)

    t'en penses quoi?

  13. #13
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Points : 64
    Points
    64
    Par défaut
    j'ai finalement essayé ça et ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $ul = new AP_File_Upload();
    $CptNumericKeys = 0;
    foreach($_FILES as $file){
    	$ArrayNumericKeys = array_keys($_FILES);
    	$pattern_a = 'doc';
    	$pattern_b = 'ref';
    	if(stripos($ArrayNumericKeys[$CptNumericKeys], $pattern_a) !== false){if(!empty($file['name']) && $ul->save_file($file,$destination) == false){$ERROR = true;}}
    	if(stripos($ArrayNumericKeys[$CptNumericKeys], $pattern_b) !== false){if(!empty($file['name']) && $ul->save_file($file,$destination.'ref/') == false){$ERROR = true;}}
    	$CptNumericKeys ++;
    }
    Merci beaucoup pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Problème lecture de tableau
    Par jbidou88 dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2008, 08h24
  2. [Tableaux] lecture tableau associatif
    Par jcaspar dans le forum Langage
    Réponses: 1
    Dernier message: 13/10/2007, 19h58
  3. Réponses: 2
    Dernier message: 10/08/2007, 12h50
  4. [Tableaux] Lecture répertoire + remplir tableau
    Par Guiona dans le forum Langage
    Réponses: 1
    Dernier message: 19/01/2007, 09h15
  5. [Tableaux] Tableau $_FILES
    Par Seth77 dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2006, 11h51

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