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 :

Choix d'un fichier à ouvrir à partir d'une liste déroulante


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut Choix d'un fichier à ouvrir à partir d'une liste déroulante
    Bonjour à tous,

    Voici mon problème: J'ai une liste déroulante qui offre un choix de documents pdf à ouvrir. J'aimerais que l'utilisateur puisse choisir un de ces documents, et que lorsqu'il clique sur ok le document choisi s'ouvre (dans acrobat reader de préférence).

    Ma liste déroulante est basée sur une table oracle qui contient entre autre le nom du fichier et le chemin d'accés au serveur (http://...).

    Jusqu'à présent je n'ai trouvé que des solutions avec des liens (href), mais ça ne convient pas au besoin des utilisateurs.
    Est-il possible de déclencher l'ouverture d'un document via un bouton (avec $_POST), tout en faisant en sorte que le fichier à ouvrir soit une variable?

    Merci de m'aider, je ne maitrise pas encore le monde complexe du php...

    Ceuce

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Voici ce que je te conseille pour faire simple...

    Converti l'URL de tes fichiers avec base64_encode(), il ne s'agit pas dans ce cas-ci de crypter mais de récupérer facilement et simplement tous les caractères spéciaux d'une URL (oui je sais, il existe des fonctions pour ça mais base64 c'est tlmt plus simple !)

    Et tu redirige ton formulaire (<form action="download.php" method="post">)vers un fichier qui contient :

    Code download.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    $file = base64_decode($_POST['file']);
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    //header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
    ?>

    EDIT : hmmm en fait, ceci force le téléchargement, donc c'est pas bon non plus... j'ai lu trop vite

    Pour ton problème c'est presque pareil mais c'est encore plus simple ! Toujours pareil pour le début, y'a juste le fichier appelé qui va être différent
    <form action="read.php" method="post">
    Code read.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $file = base64_decode($_POST['file']);
    header("Location: ".$file);
    ?>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup pour cette réponse super réactive...
    J'ai testé la solution que tu proposes, mais il y a surement qq chose que je n'ai pas compris car ça ne fonctionne pas.

    J'ai donc crée un fichier read.php qui contient les 2 lignes de codes indiquées.
    Pour le tester, j'ai remplacé 'file' par l'url du fichier à ouvrir ('http://...')

    Dans mon autre fichier php, j'ai rajouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form action="read.php" method="post">
    <input type="submit" name="ok" id="ok" value="Ouvrir fichier pdf" />
    </form>
    J'ai bien mon bouton sur mon formulaire, ms lorsque je clique dessus, cela me renvoit sur le répertoire http://localhost où j'ai tout mes fichiers js et php.

    Qu'est-ce qui fait que cela ne fonctionne pas, aurais-tu une idée?

    Merci d'avance

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    This is working ;-)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    if( isset($_POST['file']) && ! empty($_POST['file']) ) {
    	header("Location: ".base64_decode($_POST['file']));
    }
    $file = "http://www.wizards.com/dnd/files/QuickStartRules.pdf";
    ?>
    <form method="post" action="">
    <input type="hidden" name="file" value="<?php echo base64_encode($file); ?>" />
    <input type="submit" value="Ouvrir le PDF !" />
    </form>

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup, ça marche impec!

    Avant de qualifier ce sujet de "résolu", je vais toutefois essayer de voir comment je m'en sors avec mes variables...
    En tout cas, vraiment un grand merci!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Je reviens vers vous, car comme je le craignais je ne m'en sors pas avec ma variable... ça n'avait pourtant l'air pas trés compliqué.

    Voici le bout de code précédent (qui marche trés bien sinon) que j'ai adapté :
    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
    <?php
    global $cheminGlobal;
    if( isset($_POST['file']) && ! empty($_POST['file']) && isset($_POST['departement']) && $_POST['departement'] != "") 
    {
                 $dept_selectionne = $_POST['departement'];
                 $chemin="cartotheque/".$dept_selectionne;
                 //header("Location: ".base64_decode($_POST['file']));
                 $cheminGlobal=$chemin;
    }
    echo " CHEMIN_GLOBAL: "; echo $cheminGlobal;
    //$file = $cheminGlobal;
    ?>
     
     
    <form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
           <select name="departement" id="departement" >
           <?php     
           foreach($departements as $nr => $nom)    
           {?>
               <option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?>
               </option>
            <?php  
           }   ?>
           <input type="hidden" name="file" value="<?php echo base64_encode ($file); ?" />
           <input type="submit" value="Ouvrir le PDF !" />
    </form>
    Lorsque j'exécute ce code tel quel (càd sans le header et le $file = $cheminGlobal, lignes en commentaire), j'affiche bien le chemin du fichier à ouvrir avec le "echo".
    Mais lorsque ces deux lignes ne sont plus en commentaire, rien ne se passe...

    Je n'arrive pas à comprendre comment lui passer en value la variable $file renseignée plus haut.

    J'espère que mes explications sont assez claires, merci pour votre aide.

    Ceuce

  7. #7
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    hmm où se trouve le fichier que vous exécutez par rapport à celui que vous désirez télécharger ?

    Actuellement, voici comment ça se passe dans l'absolu :

    Avec une arborescence avec "download.php" (appelons-le comme ça ^^) à la racine :

    Code arborescence : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    \download.php
    \cartotheque\gironde\unfichier.ext
    \cartotheque\meuse\unautrefichier.ext

    dans le cas précis uniquement, où le dossier cartotheque se trouve dans le même que download.php ça marchera.



    Bon sinon le principal problème, c'est que vous n'ajoutez jamais le nom du fichier... donc forcément le serveur peut pas comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        $dept_selectionne = $_POST['departement'];
        $chemin="cartotheque/".$dept_selectionne;
        $file = base64_decode($_POST['file']); // On récupère le fichier
        $cheminGlobal = $chemin.'/'.$file; // On ajoute le fichier au chemin
        //header("Location: ".$cheminGlobal ); // On redirige vers le fichier
    PS : global $cheminGlobal;
    ne sert à rien et même à éviter

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/08/2010, 20h59
  2. [XL-2007] ouvrir un fichier PDF à partir d'une liste
    Par croky23 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/09/2009, 15h53
  3. Choix à partir d'une liste déroulante
    Par amesnaou dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/04/2009, 10h43
  4. Requête avec choix d'un champ à partir d'une liste déroulante
    Par Worms6969 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/03/2008, 14h53
  5. [.NET]réécriture d'un fichier a partir d'une list box
    Par scorpking dans le forum VC++ .NET
    Réponses: 14
    Dernier message: 24/04/2006, 14h16

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