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] Upload de photos (déjà svt traité, mais suis coincé !)


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [Upload] Upload de photos (déjà svt traité, mais suis coincé !)
    Bonjour,
    j'ai lu de très nombreux articles et forums au sujet de l'upload de fichiers, mais maintenant, je suis coincé.
    Alors je viens voir si quelqu'un de plus malin que moi pourra me venir en aide.

    Ce qui me chiffonne : le premier fichier est correctement uploadé (le programme fonctionne donc), mais les autres ne le sont pas !!!!
    Pourquoi ????

    Page d'appel:

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form action="control_upload_4.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fichattach[]" />
    <input type="file" name="fichattach[]" />
    <input type="file" name="fichattach[]" />
    <input type="submit" value="Send" />
    </form>

    Page d'upload:
    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
     
     
    $DIRDEST='/photos_up/';
    if (isset($fichattach))
      {   foreach($fichattach as $Key => $Value)   
          {echo "111  ".$_FILES['fichattach']['tmp_name'][$Key ]."<br>";
           echo "222  ".$_FILES['fichattach']['name'][$Key ]."<br>";
           echo "333  ".$_FILES['fichattach']['type'][$Key ]."<br>";
           echo "444  ".$_FILES['fichattach']['size'][$Key ]."<br>";       
     
           $DIRDEST = getcwd().$DIRDEST; // dossier où sera déplacé le fichier       
           $tmp_file = $_FILES['fichattach']['tmp_name'][$Key ];
           if( !is_uploaded_file($tmp_file) )          
               { echo("Le fichier est introuvable"."<br>"); }       
           // on copie le fichier dans le dossier de destination       
           $name_file = $_FILES['fichattach']['name'][$Key ];
           if( !move_uploaded_file($tmp_file, $DIRDEST . $name_file) )          
               {echo("Impossible de copier le fichier dans ".$DIRDEST."<br>");  }	   
           else	      
                {$res2=chmod ($DIRDEST . $name_file, 0777);
                 //echo "fichier ".$_FILES['fichattach']['name'][$Key ]." uploadé <br>";		
           }	
    }
    }
    J'avoue que je ne comprends pas pourquoi ça marche UNE fois et pas deux !

    Merci d'avance pour n'importe quelle idée qui fera avancer le machin!

    Mike

  2. #2
    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
    Vous mélanger deux écritures différentes avec/sans register_globals actif. D'après votre code cet extrait me semble plus cohérent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (isset($_FILES['fichattach']))
      {   foreach($_FILES['fichattach'] as $Key => $Value)
    Le parcours du tableau est incorrect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($Key = 0, $c = count($_FILES['fichattach']['name']); $Key < $c; $Key++) {
    Pour remplacer le foreach.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Bonjour Julp,

    merci de ta réponse rapide.
    En ce qui concerne ta première remarque (mélange des variables GlobalSystems et locales), tout-à-fait d'accord: manque de cohérence (mais sans conséquence sur le fonctionnement du programme; j'ai n"anmoins corrigé)

    Par contre, je ne pense pas que le remplacement de la boucle "foreach" par la boucle "for" change quoi que ce soit: la première s'exécutait fort bien dans sa totalité: le "echo" de débugging, que j'avais supprimé dans le post, prouve bien son exécution complète et avec les bons noms de fichiers.

    Néanmoins, pour toute certitude, et faisant foi de ta grande expérience, j'ai procédé au remplacement de ma boucle par ta proposition. Malheureusement, avec exactement le même résultat: boucle exécutée complètement, mais seul le premier fichier est uploadé.

    La question reste donc entière: Pourquoi ????

    Merci encore pour toute aide
    Mike

  4. #4
    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
    Citation Envoyé par mikeduff
    Par contre, je ne pense pas que le remplacement de la boucle "foreach" par la boucle "for" change quoi que ce soit: la première s'exécutait fort bien dans sa totalité: le "echo" de débugging, que j'avais supprimé dans le post, prouve bien son exécution complète et avec les bons noms de fichiers.
    Si justement puisque le tableau $_FILES se présente sous la forme suivante :
    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
    Array
    (
        [fichiers] => Array
            (
                [name] => Array
                    (
                        [0] => X.png
                        [1] => Y.php
                    )
                [type] => Array
                    (
                        [0] => application/octet-stream
                        [1] => application/octet-stream
                    )
                [tmp_name] => Array
                    (
                        [0] => /tmp/php14.tmp
                        [1] => /tmp/php15.tmp
                    )
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )
                [size] => Array
                    (
                        [0] => 44847
                        [1] => 436
                    )
            )
    )
    Et non :
    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
    Array
    (
        [fichiers] => Array
            (
                [0] => Array
                    (
                        [name] => X.png
                        [type] => application/octet-stream
                        [tmp_name] => /tmp/php14.tmp
                        [error] => 0
                        [size] => 44847
                    )
                [1] => Array
                    (
                        [name] => Y.php
                        [type] => application/octet-stream
                        [tmp_name] => /tmp/php15.tmp
                        [error] => 0
                        [size] => 436
                    )
            )
    )
    En développant avec error_reporting à E_ALL vous auriez tout de suite vu qu'il y avait un problème.

    La deuxième partie du problème provient de $DIRDEST qui est faux dès la deuxième itération à cause de la concaténation.
    Supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $DIRDEST = getcwd().$DIRDEST; // dossier où sera déplacé le fichier
    Et modifier :
    En (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $DIRDEST = realpath('./upload/');

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Bonjour Julp,

    Nous ne serons pas d'accord sur tout, mais je ne peux pas t'en vouloir car tu as bel et bien résolu le problème:

    il se trouvait dans la modification à chaque tour de boucle de la variable $DIRDEST. En fait, cette commande s'est retrouvée dans la boucle, je sais pas trop comment sans que je m'en aperçoive.
    Je suppose que j'étais tellement persuadé que le problème était lié à la technique d'upload (qui m'avait déjà pas mal fait galérer), que ce qui aurait dû m'être évident m'a échappé.
    Bref, il m'a suffit de replacer le "$DIRDEST=...." avant la boucle, et tout est rentré dans l'ordre.

    Ce qui m'amène au second point: la boucle "Foreach" telle que je l'avais proposée fonctionne parfaitement (maintenant ).
    Il est vrai que les variables d'array ne prennent pas tout à fait la même valeur, comme tu le soulignes, mais c'est sans importance, les 2 versions semblent équivalentes (à moins que qqch m'échappe, bien sûr)

    Voilà. En tout cas merci beaucoup du coup de main.

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

Discussions similaires

  1. [Upload] Upload d'une photos
    Par defacta dans le forum Langage
    Réponses: 2
    Dernier message: 26/07/2007, 14h03
  2. [Upload] Uploadé une photo?
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2006, 15h33
  3. Réponses: 2
    Dernier message: 27/02/2006, 10h18
  4. Forcer l'upload de fichier -> Firefox OK mais IE coince
    Par Gédéon dans le forum Autres langages pour le Web
    Réponses: 4
    Dernier message: 28/11/2005, 14h58
  5. [Upload] upload photo
    Par digger dans le forum Langage
    Réponses: 1
    Dernier message: 07/11/2005, 17h52

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