Zone liste déroulante

Eléphant du PHP | 108 Messages

22 mars 2021, 19:35

Bonjour à toutes et à tous,

Grand débutant je me lance dans le grand bain.

Je voudrais faire un site php à usage personnel pour divers calculs et données.

Première étape : faire une page avec une liste déroulante qui reprend des infos d'une table mysql (ça c'est fait)
<?php
require_once 'pdoconfig.php';
            
//On se connecte
   try{
    $liste = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
   }

catch(PDOException $e){
      echo "Erreur : " . $e->getMessage();
}
    
?>

<!--On affiche la liste déroulante--> 
    
    <label for="bot-select">Bot : </label>
    <select name="bot" id="bot-select" required>

<?php 
$reponseliste = $liste->query('select nom_bots from nom_bots');

while ($donneesliste = $reponseliste->fetch())
{
?>
        <option value="<?php echo $donneesliste['nom_bots']; ?>"><?php echo $donneesliste['nom_bots']; ?></option>

<?php
        } 
?>
    </select>
Ensuite, je voudrais que lorsque je clique sur un nom dans cette liste, s'affiche d'autres données qui sont en relation avec ce nom sélectionné.

J'ai cherché un peu partout sur le net, j'ai pas dû indiquer les bons mots clés parce que je ne trouve rien que je puisse appliquer ou comprendre.

Merci d'avance pour vos pistes et aides.

Bonne journée

Mammouth du PHP | 2703 Messages

22 mars 2021, 19:43

pour commencer, mieux vaut ajouter les balises <form> et </form> et récupérer le contenu du formulaire pour faire la recherche dans la table avec le bon bot.
à noter qu'il est préférable dans le champ value de mettre l'id du bot plutôt que son nom.

Eléphant du PHP | 108 Messages

22 mars 2021, 19:50

Bonjour or 1,

Merci pour ta réponse.

Désolé mais je ne comprends pas ce que tu me conseilles.

<form> A la suite du code ? Pour afficher les infos que je souhaite ?

id du bot ?
Comme ceci ?
 <option value="<?php echo $donneesliste['id_bots']; ?>"><?php echo $donneesliste['nom_bots']; ?></option>
et donc je change ceci aussi ?
$reponseliste = $liste->query('select * from nom_bots');
(* parce que je n'ai que 2 champs dans cette table, l'id et le nom)

Merci

Mammouth du PHP | 2703 Messages

22 mars 2021, 20:26


Eléphant du PHP | 108 Messages

22 mars 2021, 20:54

Merci pour ce lien.

Donc mes recherches n'étaient pas les bonnes.

Avec la mention formulaire, ça va tout de suite mieux ;)

Merci.

Eléphant du PHP | 108 Messages

24 mars 2021, 07:13

Bonjour,

Voici ce que j'ai fait en trouvant quelques infos et code sur divers forum et sur le net.
 <!DOCTYPE html>
 <html>
 
 <head>
     <meta charset="utf-8" />
     <title>Recherche</title>
 </head>
 
 <body>
     <?php include('pdoconfig.php');
 
//On se connecte
 
   try{
    $liste = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
   }
 
catch(PDOException $e){
      echo "Erreur : " . $e->getMessage();
}
 
?>
 
 
     <!--On affiche la liste déroulante-->
 
     <form method='post'>
 
 
         <select name="recherche_valeur" id="bot-select" required>
 
             <?php 
$reponseliste = $liste->query('select nom_bots from nom_bots');
 
while ($donneesliste = $reponseliste->fetch())
{
?>
             <option value="<?php echo $donneesliste['nom_bots']; ?>"><?php echo $donneesliste['nom_bots']; ?></option>
 
             <?php
        } 
?>
         </select>
 
         <input type='submit' value="Rechercher" />
     </form>
 
 
 
     <!--On affiche le résultat de la recherche-->
 
     <table>
         <thead>
             <tr>
                 <th>Bots</th>
             </tr>
         </thead>
         <tbody>
             <?php
				$sql='select nom_bots from nom_bots';
				$params=[];
				if(isset($_POST['recherche_valeur'])){
					$sql.=' where nom_bots like :nom_bots';
					$params[':nom_bots']="%".addcslashes($_POST['recherche_valeur'],'_')."%";
				}
				$resultats=$liste->prepare($sql);
				$resultats->execute($params);
				if($resultats->rowCount()>0){
					while($d=$resultats->fetch(PDO::FETCH_ASSOC)){
					?>
             <tr>
                 <td><?=$d['nom_bots']?></td>
             </tr>
             <?php
					}
					$resultats->closeCursor();
				}
				else echo '<tr><td colspan=4>aucun résultat trouvé</td></tr>'.
				$connect=null;
			?>
         </tbody>
     </table>
 
 </body>
 
 </html>
Et le résultat (regardez pas la mise en page : merci )

https://wagstd.laptopdiscountexport.site/search_1.php

Ca fonctionne mais ...

Comment faire pour que :

1 - Le nom sélectionné reste affiché dans la liste déroulante (actuellement, il affiche le premier de la liste)
2 - Au chargement de la page, toute la liste est affichée. Est il possible de ne rien affiché ?
3 - Se passer du bouton rechercher et que l'affichage des données se fasse dès que l'utilisateur a sélectionné un nom dans la liste déroulante.
4 - Je n'ai pas réussi à me baser sur le ID donc j'ai pris le nom (je sais que ce n'est pas conseillé.) J'arrive à le faire en accès mais pas en PHP.

Merci d'avance pour vos avis et aides.

Bonne journée.

Mammouth du PHP | 2703 Messages

24 mars 2021, 20:00

1. https://developer.mozilla.org/fr/docs/W ... ent/select
2 oui
3 https://www.google.com/search?q=select+onchange
un click pour accéder au détail d'un élément, cela s’appelle un lien, avant de mettre du javascript, il vaut mieux commencer par faire un simple lien, une fois que cela fonctionne, ce sera plus facile de faire marcher le onchange. après, d'un point du vue ergonomie, la liste déroulante est très discutable.
4 qu'est-ce qui a été essayé et qui ne fonctionne pas ?

Avatar du membre
Mammouth du PHP | 1564 Messages

25 mars 2021, 00:05

(je sais que ce n'est pas conseillé.)
Disons que c'est mieux d'avoir des id car les nom peuvent contenir des caractères spéciaux et pourrait mettre le bordel dans tes values.

Pour réafficher les champs d'un formulaire envoyé, tu peux utiliser les fonctions gratuites que j'ai partagé sur mon site.

Eléphant du PHP | 108 Messages

25 mars 2021, 08:19

Bonjour à vous deux,

Merci pour vos réponses et liens.

J'ai pas trop le temps aujourd'hui, je me pencherai sur tout cela demain ou ce week-end.

@or 1
Mon point 2 et 3 : parfait avec le lien, je pense arriver à une solution valable.

Pourquoi la liste déroulante est discutable ?

En fait, je vais faire des recherches précises avec des "mots" définis donc la liste me paraissait pas mal.
Quel est le problème ? et que conseille tu en remplacement d'une liste ?

4 - Je reprends le fichier plus tard et je fais un résumé des tentatives ;)

Merci à vous 2

Bonne journée

Eléphant du PHP | 108 Messages

25 mars 2021, 10:54

J'ai quand même pris le temps. Je voulais tester.

https://wagstd.laptopdiscountexport.site/search_2.php

Voilà ça fonctionne pour les points 1 à 3.

Par contre le point 4 (se baser sur ID pour la recherche, je n'arrive pas.)

Voici mon code de cette nouvelle page test.
 <!DOCTYPE html>
 <html>

 <head>
     <meta charset="utf-8" />
     <title>Recherche</title>
 </head>

 <body>
     <?php include('pdoconfig.php');
    
//On se connecte
    
   try{
    $liste = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
   }

catch(PDOException $e){
      echo "Erreur : " . $e->getMessage();
}
    
?>


     <!--On affiche la liste déroulante-->

<form method='post'>

    <select id="bot-select" onchange="myFunction()">

    <?php 
        $reponseliste = $liste->query('select * from nom_bots');

        while ($donneesliste = $reponseliste->fetch())
{
?>
        <option value="<?php echo $donneesliste['nom_bots']; ?>"><?php echo $donneesliste['nom_bots']; ?></option>

     <?php
} 
?>

    </select>
</form>



     <!--On affiche le résultat de la recherche-->
<p id="demo"></p>

<script>
function myFunction() {
  var x = document.getElementById("bot-select").value;
  document.getElementById("demo").innerHTML = "You selected: " + x;
}
</script>

 </body>

 </html>
Et le code de la création de la table mysql
CREATE TABLE nom_bots
(
    id_nom_bots INT PRIMARY KEY auto_increment NOT NULL,
    nom_bots VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
)
J'ai essayé de modifier dans les options de select mais alors ça m'affiche le numéro et non le texte ou inversement.

Comment faire pour que php se base bien sur le chiffre id_nom_bots ?

Autre question : ok j'en suis pas encore là mais c'est l'objectif.
Il y aura une autre table (même plusieurs) qui sera en relation avec la table nom_bots par le biais de id_nom_bots.

Comment je peux faire afficher cette table en fonction de la sélection de mon formulaire ? (avec ce nouveau code et script ma logique se perd)

Merci d'avance pour vos aides et pistes.

Bonne journée

Mammouth du PHP | 2703 Messages

25 mars 2021, 11:31

il n'y a aucune recherche avec une liste déroulante qui liste tous les bots, qui ne permet pas de n'en sélectionner aucun, dans un formulaire sans autre champ. donc pour l'instant, une simple liste de liens fait l'affaire. et pour débuter, c'est bien de commencer par faire la page qui affiche les données d'un bot. une fois que cette page sera faite, mettre le bon contenu dans le onchange sera plus facile, si tu tiens à ta liste déroulante.

Eléphant du PHP | 108 Messages

25 mars 2021, 11:45

Bonjour or 1,

Merci pour ta réponse.

Oui je tiens à la liste déroulante parce que je vais me retrouver avec des bots ayant des noms proche (eth 4h b+r ou eth 4h b, .....) donc plus facile la liste déroulante pour ne pas faire d'erreur.

Non je veux systématiquement sélectionner un bot...

Pour le reste, désolé mais je ne comprends pas trop ce que tu as écris :(

1 - Que veux tu dire par la liste de liens ?

2 - Faire une autre page avec les données d'un bot (données qui sont dans une autre table) ?

Merci.

Mammouth du PHP | 2703 Messages

25 mars 2021, 11:49

dans php-debutant/
tu as une liste de sujets, tu peux cliquer sur un lien, tu arrives sur une page qui affiche le détail d'un sujet.

Eléphant du PHP | 108 Messages

26 mars 2021, 06:56

Ok je te remercie.

Faut que je réfléchisse à cette idée et voir ce que je pourrais exploiter en plus par rapport à la liste déroulante.

Merci ;)