Liste déroulante et affichage

[Résolu/Fermé]
Signaler
Messages postés
34
Date d'inscription
vendredi 3 février 2012
Statut
Membre
Dernière intervention
12 février 2019
-
Messages postés
499
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
27 avril 2021
-
Bonsoir,

J'ai fais une liste déroulante sur un côté de mon site et j'aimerais afficher le résultat de l'option sélectionnée juste en bas, sans modifier ce qui est autour de la liste déroulante.
Je ne souhaite pas faire de Javascript ni de Ajax.

Voilà pour l'instant un morceau du code :
<form name="statistique" method="post" action="">
<select name="categorie">
<option value="">--Choisissez--</option>
<option value="1">Par année</option>
<option value="2">Par lieu</option>
</select>
<br>
<input type="submit" name="sValider" value="Afficher">
</form>

<!--Ici afficher le résultat de l'option choisie-->

Dans la partie commentée, je voudrais afficher le résultat d'une requête SQL en fonction de l'option choisie.
Peut-on le faire dans la même page (avec des if ?) ?
Sinon faut-il créer d'autres pages ?

Merci pour vos réponses

1 réponse

Messages postés
499
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
27 avril 2021
115
Bonjour,

NB: Vu que tu veux afficher le résultat d'une requête SQL, je suppose a priori que tes pages sont écrites en PHP. Je te propose donc une solution PHP.

La chose peut se faire si ta liste déroulante se trouve dans une frame pour ne pas modifier ce qui est à droite (si ta liste est à gauche) :
+-------------+-----------------------------------+
| liste | reste de la page à ne pas toucher |
| ... | ... |
+-------------+-----------------------------------+

<frameset cols="30,*" frameborder="0" border="0" marginheight="0" marginwidth="0">
<frame name="liste" src="liste.php" scrolling="no" noresize>
<frame name="main" src="page.php" scrolling="auto">
</frameset>

Ci-dessous le contenu du fichier liste.php (frame de gauche). Le fichier liste.php est récursif, c'est à dire qu'il s'appelle lui-même avec l'attribut action du conteneur form.

<html>

<head>
<title></title>
</head>

<body>
<form name="statistique" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
 <select name="categorie">
  <option value="">--Choisissez--</option>
  <option value="1">Par année</option>
  <option value="2">Par lieu</option>
 </select>
<br>
<input type="submit" name="sValider" value="Afficher">
</form>
<p>&nbsp;</p>
<!--Ici (ci-dessous) afficher le résultat de l'option choisie-->
<?php
if($_POST["sValider"]) {
 $requete = "écrire la requête SQL à exécuter";
 ... exécuter la requete...
 ... afficher le résultat ...
}
?>
</body>

</html>


1)
Quand la page est affichée pour la première fois, le formulaire s'affiche mais n'a pas été validé et donc la variable tableau $_POST["sValider"] correspondant au contrôle input de type submit et de nom sValider n'existe pas. Donc, le code PHP qui suit n'est pas exécuté

2)
Quand tu cliques sur le bouton [Afficher] du formulaire, le traitement va être effectué par la page désignée dans l'attribut action (et donc PHP_SELF). Ce qui revient à dire que la page va se rappeler elle-même mais cette fois-ci AVEC le formulaire validé et transmis dans la variable tableau $_POST utilisable par le script qui va traiter (et donc par le script lui-même). A ce moment là, la page va s'afficher à nouveau avec affichage du formulaire (au même endroit, et on aura l'impression qu'il n'a pas bougé) et comme le contrôle input de type submit et de nom sValider existe dans la variable $_POST["sValider"],le code du if() sera exécuté.

Ce code :
1) c'est créer la requête,
2) l'exécuter,
3) afficher le résultat.

Ci-dessous, un exemple en http://www.fauque.fr/demogen/ordre.php
Dans une base de données généalogique de démo, je vais piocher les personnes (noms et prénoms). Le formulaire permet de décider de l'ordre d'affichage. Le principe est le même et le code, ci-dessous.

<html>

<head>
<title></title>
</head>

<body>
<form name="type_ordre"
      method="post"
      action="<?php echo $_SERVER["PHP_SELF"]; ?>">
  <select name="choix">
    <option value="null">Par ordre</option>
    <option value="nom">Nom, Prénom</option>
    <option value="prenom">Prénom, Nom</option>
  </select><br/>
  <input type="submit" name="submit" value="Afficher">
</form>
<p>&nbsp;</p>
<?php
if($_POST["submit"]) {

 // Définition de la connexion. Mettre ses infos de connexion
 define (NOM,    "xxxx");           // Utilisateur MySQL
 define (PASS,   "xxxxxxxxxx");     // Mot de passe
 define (SERVER, "xxxxxxxxxxxxx");  // adresse du serveur MySQL
 define (BASE,   "xxxx");           // Nom de la base de données
 $connexion = mysql_pconnect(SERVER,NOM,PASS); // Connexion au serveur
 $ok = mysql_select_db(BASE,$connexion); // Sélection de la base

 // Prise en compte du choix fait dans le formulaire
 switch($_POST["choix"]) {
  case "nom"    : $ordre = "lname,fname"; break;
  case "prenom" : $ordre = "fname,lname"; break;
 }

 // Création de la requête et exécution,
 $requete = "SELECT lname,fname FROM gen_People ORDER BY $ordre;";
 $resultat = mysql_query($requete,$connexion);

 // Affichage
 while($r=mysql_fetch_object($resultat)) {
  echo "$r->lname $r->fname<br/>\n";
 }
}
?>
</body>

</html>


Cela répond-il à ta question ?
Bon dimanche...
Un problème sans solution est un problème mal posé. (Albert Einstein)
Messages postés
34
Date d'inscription
vendredi 3 février 2012
Statut
Membre
Dernière intervention
12 février 2019
5
Merci beaucoup heliconius !

Je pense avoir compris comment faire avec tes explications. Merci encore une fois d'avoir pris de ton temps pour m'expliquer (ce que tu as d'ailleurs très bien fait), bon dimanche à toi aussi !
Messages postés
499
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
27 avril 2021
115 >
Messages postés
34
Date d'inscription
vendredi 3 février 2012
Statut
Membre
Dernière intervention
12 février 2019

:-)
Ben les forums d'entraide, c'est fait pour ça, non ?
A+.