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 :

recupération valeur d'un input type FILE [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 253
    Par défaut recupération valeur d'un input type FILE
    Bonjour,

    Je voudrais savoir comment on fait pour récupérer les infos d'un INPUT de type FILE

    Pour nimporte quel autre input "normal" il suffit de faire un $_POST['moninput'] et ça récupère la valeur du champs.
    Mais je n'ai jamais utilisé l'input file et je ne sais pas comment récupérer sa valeur.
    Je précise que la valeur que je voudrais récupérer est le chemin complet d'une image séléctionnée par cet input file.

    Merci beaucoup d'avance.

    Ju'

    PS: j'espere être dans la bonne section)

  2. #2
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Salut,

    les input file sont récupérés via la super globale $_FILE.

    http://php.developpez.com/faq/?page=...ormulaire-file
    Il faut utiliser la variable $_FILES qui contient les données du fichier envoyé :

    * $_FILES['nomDuChamp']['name'] : le nom original du fichier
    * # $_FILES['nomDuChamp']['type'] : le type MIME du fichier
    * # $_FILES['nomDuChamp']['tmp_name'] : l'endroit provisoire où se trouve le fichier sur le serveur
    * # $_FILES['nomDuChamp']['error'] : le code d'erreur encontrée (0 = OK)
    * # $_FILES['nomDuChamp']['size'] : la taille du fichier en octets

    Note : Ne pas oublier d'ajouter l'attribut enctype dans la balise form.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 253
    Par défaut
    Merci thes32 pour cette réponse.
    Mais je ne comprends pas une chose,
    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_FILES['nomDuChamp']['name']
    , j'ai compris ce qu'etais $_FILES, tout comme $_SESSION, $_POST, $_GET (merci pour le vocabulaire "super globale" ne je savais pas que ça s'appelait comme ceci) et ['nomDuChamp'] qui doit être le nom de mon input, mais ['name'] qu'est-ce que c'est ?

    Merci

    Ju'

  4. #4
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    la superglobale $_FILE est renseignée automatiquement par PHP lorsque qu'un fichier est envoyé au travers d'un formulaire multipart-data

    comme tu le disais, le premier indice représente l'attribut "name" de ton champ input

    les autres indices disponibles sont :
    • name => Le nom du fichier original sur la machine source
    • type => Le type MIME du fichier, si le navigateur a fourni cette information
    • tmp_name => Le nom temporaire du fichier qui sera chargé sur la machine serveur
    • error => le type d'erreur (int)
    • size => La taille du fichier envoyé, en octets


    tu peux avec l'indice "error" traiter les différents cas d'erreur
    exemple :
    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
     
    if ($_FILES['nom_du_fichier']['error']) {
        switch ($_FILES['nom_du_fichier']['error']){
            case 1: // UPLOAD_ERR_INI_SIZE
                echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";
                break;
            case 2: // UPLOAD_ERR_FORM_SIZE
                 echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !");
                 break;
            case 3: // UPLOAD_ERR_PARTIAL
                 echo "L'envoi du fichier a été interrompu pendant le transfert !";
                 break;
            case 4: // UPLOAD_ERR_NO_FILE
                 echo "Le fichier que vous avez envoyé a une taille nulle !");
                 break;
         }
    }


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 253
    Par défaut
    Encore une petite question

    Les erreurs 1, 2,3 et 4 sont des erreurs reconnues et par défaut ? ou tu les a attribuées toi-même ?

    Et quand je fais mon INSERT INTO dans la base de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lien_image = $_FILES['lien_image']['name];

    cela enregistrera dans ma base de donnée le nom brut du fichier si j'ai bien compris ? et à la palce de ['name'] jefais ['size'] (interressant) j'inscrirais dans la BDD la taille du fichier c'est bien ça ?

    Et dernière question, si je veux récupérer le chemin d'accès complet de l'image pour l'introduire dans ma base de données comment je peux procéder s'il te plaît ?

    Car mon but est ensuite de rebalancer les infos sur une page web, pour qu'elle se remplisse automatiquement en fonction du numéro que j'ai renseigné en GET. Et pour le moment ma fiche produit est très bien agencée, mais il me reste juste à connaitre le chemin de l'aimge du produit pour la mettre automatiquement.

    Voilà Et merci

  6. #6
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Citation Envoyé par ju0123456789 Voir le message
    Encore une petite question

    Les erreurs 1, 2,3 et 4 sont des erreurs reconnues et par défaut ? ou tu les a attribuées toi-même ?
    non elle sont gérées par le moteur PHP.

    Citation Envoyé par ju0123456789 Voir le message
    Et quand je fais mon INSERT INTO dans la base de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lien_image = $_FILES['lien_image']['name];

    cela enregistrera dans ma base de donnée le nom brut du fichier si j'ai bien compris ? et à la palce de ['name'] jefais ['size'] (interressant) j'inscrirais dans la BDD la taille du fichier c'est bien ça ?
    oui

    Citation Envoyé par ju0123456789 Voir le message
    Et dernière question, si je veux récupérer le chemin d'accès complet de l'image pour l'introduire dans ma base de données comment je peux procéder s'il te plaît ?
    quand tu envoies le fichier tu l'enregistres sur le disque en lui donnant la concaténation du chemin_du_répertoire avec le nom physique du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    move_uploaded_file($_FILES['nom_du_fichier']['tmp_name'], $chemin_du_repertoire.$_FILES['nom_du_fichier']['name']);
    ?>
    il te suffit donc :
    • ou d'enregistrer le chemin complet du fichier dans ta BD
    • ou de re-contatener le chemin avec le nom du fichier en BD a l'affichage



  7. #7
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Les erreurs 1, 2,3 et 4 sont des erreurs reconnues et par défaut ? ou tu les a attribuées toi-même ?
    tu peux le voir ici http://fr.php.net/manual/fr/features...oad.errors.php

    Par défaut le fichier est toujours chargé dans un répertoire temporaire de php $_FILES['nomDuChamp']['tmp_name'] avec un nom aléatoire (c'est pour une question de sécurité). Jet te conseil de lire ce tutoriel http://antoine-herault.developpez.co...ls/php/upload/

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 253
    Par défaut
    Ok merci j'ai tout compris, quoiqu'une seule chose reste encore un peu floue, l'historie d'enregistrement du répertoire.
    J'aurais bien aimé avoir un truc qui m'enregistre la localisation de l'image en fonction de la racine du site, mais ça je pense que c'est pas trop possible.

    Enfin j'ai déjà pigé pas mal de choses grâce à toi, pour le reste je vais me documenter un peu.

    MErci beaucoup

    @+ bonne journée.
    Ju'

  9. #9
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par ju0123456789
    J'aurais bien aimé avoir un truc qui m'enregistre la localisation de l'image en fonction de la racine du site, mais ça je pense que c'est pas trop possible.
    Pas bien compris la question.

  10. #10
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Si la racine du site est "/" et que tu as un répertoire nommé "upload" puis un sous-répertoire nommé "images" alors le chemin pour afficher une image nommée "image.gif" sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="/upload/images/image.gif" alt="" />
    donc quand tu enregistres le fichier uploadé tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $chemin_du_repertoire="/upload/images/";
    move_uploaded_file($_FILES['nom_du_champ']['tmp_name'], $chemin_du_repertoire.$_FILES['nom_du_fichier']['name']);
    puis quand tu récupères la référence de l'image dans la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // par exemple
    <img src="/upload/images/<?php echo $resultat_query['nom_image']; ?>" alt="" />
    si ta question était de savoir comment récupérer le chemin de l'image en local (CAD sur le poste du client) alors c'est simple : ce n'est pas possible ! Ceci pour des raisons évidentes de sécurité. La seule voie de contournement serait d'utiliser un activeX ce que je déconseille pour des raisons de portabilité.


  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 253
    Par défaut
    a oui c'est à peu de chose près exactement ce que je voulais

    MERCI

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/05/2010, 20h16
  2. Récupération d'une valeur d'un input type file
    Par Bizoo dans le forum Langage
    Réponses: 4
    Dernier message: 14/03/2009, 19h46
  3. Mettre une valeur par défaut dans un input type='file'
    Par fab76000 dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2009, 19h59
  4. [MySQL] Récupérer valeur d'un input type="file"
    Par kamnouz dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/01/2009, 10h45
  5. Affecter une valeur à un input type="file" ?
    Par rocs dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/08/2005, 11h10

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