Vous n'êtes pas identifié(e).
Bonjour,
Je réalise un site touristique.
J'ai créé un formulaire avec différents choix.
J'aimerais qu'une fois que l'internaute ait choisi la spécialité du bar voulu, ma deuxième page affiche la liste de bars avec cette spécialité (appelée dans le code "categorie").
J'ai essayé différents codes. Pour l'instant, la deuxième page m'affiche tous les bars de ma base de données.
Code du formulaire :
<?php
//connexion au fichier des parametres php
include('connexion.php');
$requete_categorie="
SELECT *
FROM categorie";
$resultat_categorie=mysql_query($requete_categorie,$connexion);
while($categorie=mysql_fetch_array($resultat_categorie))
{
echo "<option value=";
echo $categorie['id_categorie'];
echo ">";
echo $categorie['nom'];
echo "</option>";
}
?>
</select>
<br />
<input name="ok" type="submit">
</form>
</body>
</html>
Code de la page de résultat :
<title>Liste de Bars</title>
</head>
<body>
<?php
$categorie=$_POST['categorie'];
include('connexion.php');
$requete_liste_bar="
SELECT bar.nom, bar.adresse, bar.telephone, categorie.nom, prix.niveau
FROM bar, categorie, posseder, prix
WHERE posseder.fk_id_categorie= $categorie
and bar.fk_id_prix= prix.id_prix
ORDER BY bar.nom";
$resultat_liste_bar=mysql_query($requete_liste_bar,$connexion);
while($bar=mysql_fetch_array($resultat_liste_bar))
{
echo"<TR><TD>";
echo $bar['nom'];
echo"</TD><TD>";
echo $bar['adresse'];
echo"</TD><TD>";
echo $bar['telephone'];
echo"</TD><TD>";
echo $bar['niveau'];
}
?>
</body>
</html>
Connaissez-vous des bons tutos pour réaliser cela ?
Je vous remercie par avance.
Jennifer.
Hors ligne
Bonjour,
Avant la piste pour la solution, quelques remarques :
- Si possible utiliser plutot les fonctions mysqli_* que mysql_* qui sont maintenant dépréciés (oui le site n'est pas à jour là dessus )
- Il est important de vérifier le contenu de $categorie avant de l'utiliser dans une requête SQL, car là ça pourrait être n'importe quoi, y compris une injection visant a supprimer toute la base
- Il doit manquer des guillemets dans le html des options du code du formulaire, mais bon pour tester ça ira
Concernant la solution, je pense que cela vient de la requête SQL list_bar, car elle fait appel à 4 tables mais n'en jointe que 3, et encore pas toutes entre elles. Ainsi on a une clause where sur le fk_id_categorie de posseder, mais rien qui ne relie cette table à la table bar. Du coup il n'y a pas limitation sur la sortie de la table bar, et le résultat contient toute la table...
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Bonjour,
Oui, je sais que mysql est dépassé. Mais, je débute donc j'ai préféré l'utiliser, car je le connais déjà un peu.
Pour la table bar et categorie, elles sont reliées par une table intermédiaire "posseder", où j'ai mis fk_id_bar et fk_id_categorie.
Hors ligne
Mais dans la requête de filtrage, on ne voit point de fk_id_bar
Devrait donner de meilleurs résultats (en supposant que la colonne id_bar soit bien celle utilisée dans la table bar).
Tant qu'on y est, pour avoir un truc un peu moins violent à lire, on pourrait peut être utiliser des alias pour les tables, ça serait "plus court" (après pour la lisibilité, chacun fait comme il veut) :
Ceci dit, là on ne sera pas non plus bon, il manque la liaison avec la table categorie. Peut être quelque chose comme :
Attention, je n'ai pas cherché à faire une requête optimisée ou fiable, après tout, j'ai faim !
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
re,
Ta dernière requête fonctionne. Merci beaucoup.
Tu avais faim, mais tu as été plus efficace que moi. Ca fait une semaine et demie que j'essaye des codes.
Bonne soirée
Hors ligne