Liste déroulante + lien en php

Fermé
mistick240 Messages postés 4 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 9 mars 2022 - Modifié le 9 mars 2022 à 08:45
mistick240 Messages postés 4 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 9 mars 2022 - 9 mars 2022 à 10:41
Bonjour,
Je souhaiterais qu'en sélectionnant un nom dans ma liste déroulante que cette valeur soit récupérer pour ensuite l'ajouter dans un URL
Voici mon code et je bloque sur ce point !

Merci pour votre aide

Code :
<?php include '../conn.php'; ?>
 
<!Doctype HTML>
<html lang="fr">
    <body>
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <meta http-equiv="refresh" content="900;url=../logout.php" />
            <link rel="shortcut icon" href="../image/logo.png" type="favicon/ico" />
            <link rel="stylesheet" href="style2.css" />
        </head>
 
        <br>
 
        <div><center>
            <p1>
                <!-- Tableau 2x2 -->
                <table width="50%" border="1" cellspacing="1" cellpadding="50">
                    <tr>
                        <td bgcolor="#CCCCCC" height="50px">
                            <center>Test de 5 requêtes dans une liste déroulante <br></center>
                        </td>
                        <td align="center" bgcolor="#F00">
                            <?php
                                echo '<select name="select" id="select_valeur" >';
                                    $q = $conn->query("SELECT name FROM Poste_1 UNION 
                                                        SELECT name FROM Poste_2 UNION
                                                            SELECT name FROM Poste_3 UNION
                                                                SELECT name FROM Poste_5");
                                    while ( $r = mysqli_fetch_array($q) ) 
                                    {
                                       echo '<option>'.$r['name'].'</option>';
                                    }
                                echo '</select> <br />';
                            ?>
                        </td>   
                    </tr>
                </tr>
            </table>
        </p1>
 
        <br><br>
 
        <p2>
            <!-- Bouton cliquable pour afficher -->    
            <button class="favorite styled" >AFFICHER</button>
        </p2>
 
        <br><br><hr>     
 
      <script type="text/javascript">
        function Click_Button()
        {
            var valeur = document.getElementById("select_valeur").value;
            url = 'file:///C:\Users\\X\\Desktop\\nom1\\'+valeur+'.pdf'
            window.open(url, '_blank');
        }
        </script>
 
    </body>
</html>
A voir également:

4 réponses

jordane45 Messages postés 38184 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 mai 2024 4 670
9 mars 2022 à 09:19
Bonjour,

en sélectionnant un nom dans ma liste déroulante

Soit tu places cette liste dans un <form ( un formulaire ) et tu récupères sa valeur une fois le formulaire "submit" ...
Soit, tu veux effectuer l'action dès que la valeur change dans ta liste .. et dans ce cas ça ne se fera pas en PHP .. mais en Javascript ( via l'évènement ONCHANGE )

et puis..
l'ajouter dans un URL

C'est à dire ?
Sous quelle forme ?
Pour en faire quoi ?


0
mistick240 Messages postés 4 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 9 mars 2022
9 mars 2022 à 09:29
Merci pour ta réponse,

En gros j'ai réalisé une liste déroulante avec tous les noms des fichiers qui sont dans ma BDD.
Ensuit je voudrais que quand l'user choisisse un nom et qu'il appuie sur le bouton afficher cela ouvre le pdf dans un autre onglet

Avant je faisais sans BDD avec du JS, mais j'avais tous mes documents dans un dossier et je faisais comme ceci :
<script type="text/javascript">
        function Click_Button()
        {
            var poste = document.getElementById("select").value;
            var num = document.getElementById("liste2").value;

            url = 'file:///C:\Users\\X\\Desktop\\'+poste +'\\'+num+'.pdf'
            window.open(url, '_blank');
        }


        function choisir()
        {
            
            var liste = document.getElementById("select");
            var numero = liste.selectedIndex;
            var valeur = liste.options[numero].value;
            var liste2 = document.getElementById("liste2");
            var select1 = '<option>ONDSC</option><option>XIDFX</option><option>NDLSC</option><option>LUFVM</option><option>MKGUR</option><option>KJGCH</option><option>QAFIC</option><option>AWXTC</option><option>RIXLFC</option><option>YADYA</option><option>NUPOY</option><option>GDREL</option><option>LRMQM</option><option>QKYAQ</option><option>CVWDA</option><option>AGPKU</option><option>CAPEL</option>' 
            
            var select2 = '<option>MHPHK</option><option>KRNKN</option><option>MUTYB</option><option>SEZTR</option><option>SMNQJ</option><option>NZLKF</option><option>EQNLR</option><option>OUPGT</option><option>DICAC</option><option>IARKN</option><option>SHNMA</option><option>VIYSI</option>'
            
            var select3 = '<option>SBWNA</option><option>LHAQR</option><option>ZKUAF</option><option>LGAFG</option><option>VAFAZ</option><option>GHLBE</option><option>BDLTU</option><option>LPSAR</option><option>SARIA</option><option>HEOOL</option><option>LAPNI</option><option>USSRA</option><option>OSPTT</option>'
            
            var select5 = '<option>TAMBO</option><option>URIAD</option><option>UEREB</option><option>ZABER</option><option>TADEL</option><option>PKULM</option>'
            
            var select0 = '<option>ONDSC</option><option>XIDFX</option><option>NDLSC</option><option>LUFVM</option><option>MKGUR</option><option>KJGCH</option><option>QAFIC</option><option>AWXTC</option><option>RIXLFC</option><option>YADYA</option><option>NUPOY</option><option>GDREL</option><option>LRMQM</option><option>QKYAQ</option><option>CVWDA</option><option>AGPKU</option><option>CAPEL</option><option>ONDSC</option><option>XIDFX</option><option>NDLSC</option><option>LUFVM</option><option>MKGUR</option><option>KJGCH</option><option>QAFIC</option><option>AWXTC</option><option>RIXLFC</option><option>YADYA</option><option>NUPOY</option><option>GDREL</option><option>LRMQM</option><option>QKYAQ</option><option>CVWDA</option><option>AGPKU</option><option>CAPEL</option><option>SBWNA</option><option>LHAQR</option><option>ZKUAF</option><option>LGAFG</option><option>VAFAZ</option><option>GHLBE</option><option>BDLTU</option><option>LPSAR</option><option>SARIA</option><option>HEOOL</option><option>LAPNI</option><option>USSRA</option><option>OSPTT</option><option>TAMBO</option><option>URIAD</option><option>UEREB</option><option>ZABER</option><option>TADEL</option><option>PKULM</option>'
            
            switch(valeur){
                case "Sans Poste":
                liste2.innerHTML = select0;
                break;
                case "Poste 1":
                liste2.innerHTML = select1;
                break;
                case "Poste 2":
                liste2.innerHTML = select2;
                break;
                case "Poste 3":
                liste2.innerHTML = select3;
                break;
                case "Poste 5":
                liste2.innerHTML = select5;
                break;
            }
        }
        
        </script>


Et ça fonctionnait mais trop de place prise sur le pc, j'ai donc pris une BDD online et j'ai mis tous mes documents dans une table sql (id, name, file) avec file en LONGBLOB et maintenant je voudrais que quand l'user choisisse le nom, ça affiche le pdf dans un onglet web.

Voici ce que donne ma partie front pour l'instant :
0
jordane45 Messages postés 38184 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 mai 2024 4 670
9 mars 2022 à 10:02
oula... stocker des fichiers en blob dans une bdd ... mauvaise idée et mauvaise pratique ...
Tu vas vite saturer la base de données ..
Mais bon..
Pour en revenir à ton besoin,
Avec un peu de JS, tu pourrais facilement ouvrir une nouvelle page qui pointerait vers un fichier php qui attendrait, en paramètre, l'ID du document.

Au niveau de ta liste déroulante, il faudrait déjà ajouter ces id dans les VALUE de tes OPTIONS
comme ceci
 while ( $r = mysqli_fetch_array($q) )  {
   echo '<option value="'.$r['id'].'">'.$r['name'].'</option>';
  }

Au niveau de ta balise select, comme indiqué précédemment.. utiliser l'event ONCHANGE
qui déclencherait un script js de ce genre
 var liste = document.getElementById("select");
liste.addEventListener('change',function(){
   let id = this.value;
   let url = " chemin/vers/script/php/pour/generer/pdf/a/partir/du/blob.php?id=" + id;
   window.open(url,'_blank');
});


et enfin, dans le fichier chemin/vers/script/php/pour/generer/pdf/a/partir/du/blob.php
il suffit de récuper l'id passé dans l'url via la variable $_GET
Aller chercher en BDD le blob correspondant ( une simple requête avec un WHERE sur l'id )
Générer le fichier à partir du blob ( des tonnes d'exemples existent sur le net à ce sujet )
1
mistick240 Messages postés 4 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 9 mars 2022
9 mars 2022 à 10:16
J'ai 1Go de stockage dans ma BDD et je penses en utiliser environs 100-200Mo grand max
Après c'est la première fois que j'essaye ce type de manœuvre entre BDD et page HTML

Et sur mon bouton pour afficher ce blob, on fait un fonction "onclick" ?
0
jordane45 Messages postés 38184 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 mai 2024 4 670
9 mars 2022 à 10:22
Ah ben j'avais directement attaché l'évènement sur la liste ( vu qu'au départ c'est ce que tu demandais )
liste.addEventListener('change',function(){    

Mais si tu as un bouton..
Il n'y a même plus besoin de javascript ...
Il suffit de mettre ta liste et ton bouton dans un formulaire (<form action="chemin/vers/script/php/pour/generer/pdf/a/partir/du/blob.php" >)
et ça va se faire tout seul
0
mistick240 Messages postés 4 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 9 mars 2022
9 mars 2022 à 10:41
c'est possible quelque chose de ce type :
        <div><center>
            <p1>
                <!-- Tableau 2x2 -->
                <table width="50%" border="1" cellspacing="1" cellpadding="50">
                    <tr>
                        <td bgcolor="#CCCCCC" height="50px">
                            <center>Tous les fichiers<br></center>
                        </td>
                        <td align="center" bgcolor="#F00">
                            <form name="fichier" enctype="multipart/form-data" method="post" >
                            <?php
                                echo '<select name="select" id="select_valeur" >';
                                    $q = $conn->query("SELECT name FROM all_file");
                                    while ( $r = mysqli_fetch_array($q) )  {
                                        echo '<option value="'.$r['id'].'">'.$r['name'].'</option>';
                                    }
                                echo '</select> <br />';
                            ?>
                           
                            
                        </td>

                    </tr>
                </tr>
            </table>
                            <input type="submit" name="submit" class="favorite styled" />
                        </form>
            </p1>
0