Menu déroulant à l'aide de PHP

Fermé
jaybolo Messages postés 2 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 22 avril 2004 - 21 avril 2004 à 17:30
 ppp - 14 janv. 2008 à 16:41
Bonjour à tous

Je me retourne vers vous pour un grand S.O.S. et oui en fait je suis débutant en programmation PHP/SQL. Je bosse sur un projet d'études actuellement en créant un site (un annuaire de sites classés par thème puis par rubrique). Mon site est associé à une base de données content 3 tables (themes, rubriques,sites).
Bon pour lancer la recherche des sites par thèmes et par rubriques, je veux fair eun menu déroulant qui en fontion du thème choisisse les rubriques aossicées.
j'ai fait un codea à base du net, de bouquin . mais là, je sis dépassé car je crois que je suis arrivé au summum de la perfection. Cela ne marche pas. Je lance un SOS à celui qui veut bien me voir mon code et m'aider à le faire fonctionner car je suis un peu préssé par le temps. ou si quelqu'un a un code source que je peux manipluer ce serait cool.

merci d'avance

<?php

DEFINE ('DB_USER', 'root'); //définition des paramètres sous forme de constantes
DEFINE ('DB_PASSWORD' , '');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME' , 'togoweb');

//Ouvrir la connection et sélectionner la base de données 

 $dbc = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) or die  ('Connexion à MySQL impossible : 
 '.mysql_error(). '<br>');

mysql_select_db (DB_NAME) OR die   ('Sélection de la base de données impossible: '.mysql_error(). '<br>');
?>

<br>
<form name="recherche" action="recherchenico.php" method="POST">
<table width="400" border="0" style="border : 1px solid #000000">
  <tr>
    <td><span class="style2">Votre thème</span></td>
    <td>
<select name="theme" onChange="document.recherche.submit();">
<? $sql = "select * from themes";
   $req = mysql_query($sql);
   while ($res = mysql_fetch_array($req)) { ?>
    <option value="<?  echo $res["id"];?>"><?  echo $res["nom"];?></option>
<? }?>
</select></td>
  </tr>
<?  if (!empty($_POST["theme"]))  { ?>
  <tr>
    <td class="style2">Votre rubrique</td>
    <td>
<select name="rubriques" onChange="document.recherche.submit();">
<? $sql = "select * from rubriques where fk_themes=".$_POST["theme"];
   $req = mysql_query($sql);
   while ($res = mysql_fetch_array($req)) { ?>
    <option value="<?  echo $res["id"];?>"><?  echo $res["nom"];?></option>
<? } ?>
</select></td>
  </tr>
<? } ?>
<tr><td> </td><td><input type="submit"  name="submit" value="Lancer la recherche"/></td></tr>
</table>
</form>
        















































jaybolo toujours play
A voir également:

8 réponses

tu évite les accents dans ta base my SQL pour les noms de champs tu verra que ça ira mieux
1
ericpons Messages postés 39 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 1 avril 2005 15
21 avril 2004 à 22:58
Salut!
Ta question est un peu compliquée "ça ne marche pas" soit :-).
Peux-tu expliquer, quels sont les messages d'erreur, qu'est ce qui devrait se produire et qui ne se produit pas?
Je subodore que tu veux changer les options du menu en fonction du premier choix?
Si j'ai bien compris, le mieux ce serait de reposter ta question, détaillée, avec javascript dans le sujet, plutôt que PHP qui ne permet pas, je crois, ce genre de réponse dynamique sans aller-retour avec le serveur.
Eric.
0
jaybolo Messages postés 2 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 22 avril 2004
22 avril 2004 à 00:01
salut merci de m'avoir répondu.
comme je le disias , je suis débutant. mon premier select doit aller chercher tous les themes répertoriés dans ma base En fonction du thème associé, le deuxième select doit aller chercher dans ma base les rubriques associés au thème choisi dans le premier select.
Sa ne marche pas:: sur ma page je vois mon menu select mais quand je clique dessus , c'est vide
voilà si celka peut t'aider pour m'aider à voir ce qui ne marche pas .
jaybolo toujours play
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
22 avril 2004 à 10:11
Les deux select sont vides ou le 1er s'affiche correctement ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ericpons Messages postés 39 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 1 avril 2005 15
22 avril 2004 à 17:13
A première vue, ta syntaxe de deuxième requête risque de poser problème:
$sql = "select * from rubriques where fk_themes=".$_POST["theme"];

Notamment avec tes guillemets. Il en manque et tu déclare ta clef avec des guillemets doubles.
Dans les requête le mieux est déja d'éviter d'indenter au maximum les guillemets (quand je fais ça, je me perds tout le temps), et surtout dans les clefs d'éléments array.
Je te conseillerais de simplifier par :
$theme=$_POST['theme']; //simple guillemets pour la clef
$query="SELECT * FROM rubriques WHERE fk_themes='$theme'";//simple guillemets pour encadrer la variable, double pour fermer la déclaration
$sql=mysql_query("$query",$dbc);
if (!$sql)
   echo "erreur : ".mysql_errno()." : ".mysql_error()."<br/>";

L'affichage des erreurs éventuelles ne mange pas de pain, peut te renseigner quand un truc ne fonctionne pas et peut être supprimé si tu le désires quand ton script sera validé.
Eric.
0
salut

je ne comprends pas trop ce que tu as écrit comme code. Il faut vraiment gérer les erreurs??
$sql=mysql_query("$query",$dbc); (comprend pas trop)
je vais voir ce que ça donne dans mon script.

merci d'avance
0
fo pas mettre de point virgule a la fin d'une requete en php
ca doit etre pour ca que ca marche pas
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
23 avril 2004 à 09:09
Si, il le faut. Le problème ne vient pas de là.
0
ericpons Messages postés 39 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 1 avril 2005 15
23 avril 2004 à 14:21
Il ne "faut" pas gérer les erreurs, mais quand ça ne marche pas voires'afficher la raison, même si elle est cryptique peut te mettre sur la voie des corrections.
De la même façon mysql_query utilise la connection courante par défaut, mais normalement tu la précises en second argument ($dbc). Ca n'est pas obligatoire, ça augmente la lisibilité quand il y a des choses qui ne marchent pas.
L'essentiel de ce que je te suggère c'est d'augmenter la lisibilité des opérations pour essayer de voir à quel moment il y a un problème.
Il me semble également que tu compliques beaucoup ton code en ouvrant et fermant sans cesse des portions de scripts. Il serait beaucoup plus lisible d'imbriquer plus d'HTML dans ton PHP avec des echos, et de supprimer toutes ces balises <?...?>, on ne sait pas trop où on en est, surtout lorsqu'il s'agit de rajouter un }. Enfin c'est un point de vue d'amateur non programmeur, pour moi c'est vraiment difficile à lire, je suppose que les pros sont plus à l'aise.
Eric.
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
23 avril 2004 à 14:26
L'avantage "d'ouvrir et fermer sans cesse des portions de scripts", c'est que cela surcharge moins le serveur que si tu lui fais générer tout en entier via des echo.

Ceci dit je suis d'accord avec toi pour dire que les gestions d'erreur permettent de ce rendre compte rapidement de ce qui cloche.
0
ericpons Messages postés 39 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 1 avril 2005 15
23 avril 2004 à 17:57
Oh ben oui je suis bien d'accord, mais pour la mise au point, j'ai du mal à m'y retrouver. Quitte à après voir où on peut alléger la charge du serveur.

Quand aux messages d'erreur qui permettent de "rapidement" trouver où ça cloche, j'ai des fois du mal :-).
Récemment je suis resté 2 jours sur un 1064 : erreur de syntaxe MySql, en étant ben malheureux, parce que franchement ma syntaxe, je voyais pas où était le problème.
Motif, le nom du champ (table créée avec PHPMyAdmin) était trop long ('références', soit 10 caractères)... M'a fallu un moment pour trouver. Le pire c'est que dépité je copiais collais des requêtes directes depuis PHPMyAdmin pour essayer de comparer avec ce qui clochait, mais dans mon script ça ne marchait jamais. Si quelqu'un peut m'expliquer ce que j'ai mal configuré...
Enfin, bon avec des champs plus courts, ça marche...
Eric.
0