Liste déroulante et affichage

Résolu/Fermé
Juuli Messages postés 34 Date d'inscription vendredi 3 février 2012 Statut Membre Dernière intervention 12 février 2019 - 12 déc. 2015 à 20:45
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 13 déc. 2015 à 16:09
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

heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
Modifié par heliconius le 13/12/2015 à 11:40
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)
0
Juuli Messages postés 34 Date d'inscription vendredi 3 février 2012 Statut Membre Dernière intervention 12 février 2019 5
13 déc. 2015 à 15:22
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 !
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137 > Juuli Messages postés 34 Date d'inscription vendredi 3 février 2012 Statut Membre Dernière intervention 12 février 2019
Modifié par heliconius le 13/12/2015 à 16:10
:-)
Ben les forums d'entraide, c'est fait pour ça, non ?
A+.
0