Interface php dynamique

Fermé
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 - 28 janv. 2009 à 15:07
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 - 29 janv. 2009 à 00:23
Bonjour,

J'ai une interface php/html qui affiche "statiquement" les informations d'une base de donnée (2 tables en l'occurence)
J'ai créé une 3ème table dite de correspondance car j'aimerai en fait, que lorsque je selectionne un choix dans mon select 1 les choix dans le select 2 soit limités à ce que dit la table de correspondance !

Je ne sais absolument pas comment traduire cela et je suis bien embêté !
Pouvez-vous me donner un petit coup de main s'il vous plaît ?

Voici le code utilisé pour le 1er select :

//Connexion à la base
$db=mysql_connect('localhost','login','mdp');
mysql_select_db('base1',$db);

$sql = "SELECT * FROM source";
$req = mysql_query($sql) or die ('Erreur SQL : <br>' .$sql);
$nb_ligne = mysql_num_rows ($req);
echo '
<table><tr><td>
<select name="source" size="'.$nb_ligne.'">';

while
($data = mysql_fetch_assoc($req)) {

echo '
<option value="'.$data[nom_source].'"> '.$data[nom_source].'<br>';
}
echo '
</td></tr></table>';


et ici le code utilisé pour le 2nd Select :

//Connexion à la base
$db=mysql_connect('localhost','login','mdp');
mysql_select_db('base1',$db);

$sql_indic = "SELECT * FROM indicateur ORDER BY techno DESC, priorite ASC";
$req_indic = mysql_query($sql_indic) or die ('Erreur SQL : <br>' .$sql_indic);
$nb_ligne = mysql_num_rows ($req_indic);

echo '
<select name="IQ" size="'.$nb_ligne.'">';

while
($data_indic = mysql_fetch_assoc($req_indic)) {

echo '
<option value="'.$data_indic[iq].'"> '.$data_indic[techno].' - '.$data_indic[priorite].' : '.$data_indic[nom_iq].' - '.$data_indic[iq].' <br>';
}

Et donc, bien sur, ma table de correspondance est composée des même valeurs que ces 2 tables là.
Je l'ai renseigné de sorte à créer des couples IQ/source ...

Merci par avance de vos éclaircissements !
Bien à vous ...

Boueep.
A voir également:

20 réponses

jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
28 janv. 2009 à 15:47
Regarde du côté des jointures SQL ;)
1
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
28 janv. 2009 à 16:06
heuuuu oO
j'ai bien envie de te dire que je vois malheureusement pas le rapport :(
0
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
28 janv. 2009 à 16:14
Tu ne connais pas les jointures ou tu ne vois pas pourquoi les utiliser ?

Après c'est peut-être moi qui ai mal compris le problème :)
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
28 janv. 2009 à 16:41
les 2 a vrai dire !
les jointures j'vois a peu près mais j'arrive pas a imaginer en quoi ça peut m'être utile :)
0

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

Posez votre question
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
28 janv. 2009 à 17:00
Regarde ici : https://www.commentcamarche.net/contents/1063-sql-jointures

La troisième table est la jointure.

Tu pourrais faire une liste déroulante sur la marque.
En fonction de la marque tu ne verrais que le modèle lié dans une autre liste déroulante.
Et dans un champ à côté tu pourrais afficher le pays de la voiture.
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
28 janv. 2009 à 17:40
je comprend pas désolé :s

mon select 1 affiche les sources (le select est aussi grand qu'il y a de sources = menu déroulant déroulé).
mon select 2 affiche les IQ (le select est aussi grand qu'il y a de sources = menu déroulant déroulé).

Aujourd'hui on peut coché Source_1 dans le select 1 et IQ_13 dans le select 2.

Hors imaginons que je veuille pas qu'on puisse selectionner IQ_13 si Source_1 est choisie, car pas cohérent dans le traitement des données ensuite.

J'ai créé une table "correspondance" ou l'entrée Source=Source_1 / IQ=IQ_13 n'existe pas !
Mais les entrées Source=Source_1 / IQ=_12 + Source=Source_1 / IQ=IQ_11 existent par exemple.

Je souhaite exploiter cette table afin qu'en selectionnant Source_1 dans mon select_1 il ne me propose dans mon select_2 QUE IQ_11 et IQ_12 car présents dans ma table correspondance et inversement.

on parle toujours de jointure ?

désolé pour mon ignorance hein !
0
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
28 janv. 2009 à 17:43
Dans ta table IQ tu peux mettre un nouveau champ "id_Source"

Pour chaque IQ tu écris l'identifiant de la Source liée comme ça tu sauras quelle IQ va avec quelle Source.
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
28 janv. 2009 à 17:50
une source peut avoir 5 IQ possibles
mais ca veut pas dire que ces 5 IQ n'ont QUE cette source.

d'ou la création de cette table de correspondance qui regroupe tout les "couples" possibles.

a la limite je n'ai plus besoin de ma table IQ ni meme de la table Source ...

la table Correspondance à les infos dont j'ai besoin j'ai juste à faire du GROUP BY dans ma requete pour que l'affichage soit clean.

mon problème porte sur le côté dynamique entre les selects.
0
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
28 janv. 2009 à 18:01
C'est quoi la structure de tes tables ?
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
28 janv. 2009 à 18:04
Structure de la table `indicateur`
0
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
28 janv. 2009 à 18:08
Bah si à chaque à chaque IG tu définis l'id de la Source tu n'auras qu'à afficher les IQ correspondants...

Ex :
IQ1 > Source1
IQ2 > Source2
IQ3 > Source1

Quand tu choisiras Source1 il te renverra IQ1 et IQ3
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
28 janv. 2009 à 18:18
et c'est là que je suis perdu !

en tout cas j'en profite pour te remercier de ta percévérance.

j'ai fait ce que tu m'a dit mais dans une nouvelle table en gros !
puisque mes IQ sont Unique dans ma table idicateur je ne peux mettre qu'1 ID en face.
Et puisque mes nom_source sont uniques dans ma table source je ne peux mettre qu'1 IQ en face.

c'est pourquoi j'ai fait cette table correspondance .... ni les iq ni les source ne sont unique dans cette table là.

je patauge ? :(
0
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
28 janv. 2009 à 18:21
CREATE TABLE IF NOT EXISTS `indicateur` (
`techno` varchar(5) NOT NULL,
`iq` varchar(15) NOT NULL,
`nom_iq` varchar(100) NOT NULL,
`priorite` varchar(2) NOT NULL,
`IQ2` varchar(5) NOT NULL,
`id_source` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


J'espère ne pas me tromper de table ^^

Pour chaque ligne tu complète l'id_source
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
28 janv. 2009 à 21:50
erffff

j'avais bien comprit ce que tu me demandais mais c'est le pourquoi que je ne comprend pas.

je dois mal m'exprimer en fait a priori ...

je ne peux pas mettre les id_source en face des IQ dans la table indicateur !

Ma table indicateur est constituée comme ça :

      IQ
IQ_1
IQ_2
IQ_3
IQ_4

ce sont des valeurs uniques !

pour la table source :

     nom_source          ID
source_1                    1
source_2                    2
source_3                    3
source_4                    4
source_5                    5

ce sont ici aussi des valeurs uniques !

je ne peux pas creer :

      IQ                      ID
IQ_1                         1
IQ_2                         2    => et IQ_2 ID_1 dans tout ca ?

par contre ma table de correspondance elle, elle a :

      IQ            nom_source
IQ_1                  source_1
IQ_1                  source_4
IQ_1                  source_5
IQ_2                  source_1
IQ_2                  source_2
IQ_2                  source_4

etc etc etc ....

jusque maintenant je faisais mon affichage dans mon select "1" en appelant ma table source et mon affichage dans select "2" en appelant ma table indicateur mais c'est STATIQUE !
si on reprend l'exemple de ma table correspondance ci-dessus où IQ_1 source_2 n'existe pas, jusqu'ici rien ne m'empechais de cocher IQ_1 dans mon select 1 et source_2 dans mon select 2 et de "POST" une valeur que je ne veux pas retrouver dans ma table "trucuche" que j'implémente ....

et donc je souhaiterais savoir comment faire (grace à ma table "correspondance" nouvellement créé) :

Si je clic sur IQ_1 dans mon select "1" = il n'y aura QUE source_1, source_4 & source_5 dans mes choix du select "2"
(en me basant toujours sur l'exemple ci-dessus)

==> ?

je suis désolé c'est supra confu mais j'essaye d'être le plus clair et précis possible !

merci de ton (votre ?) aide !
Boueep
0
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
28 janv. 2009 à 22:23
Ce que je ne comprends pas c'est pourquoi tu ne peux pas ajouter de champ dans ta table Indicateur.
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
28 janv. 2009 à 23:10
Parce que rajouter ce champ oui je peux mais je mets quoi comme valeurs ?
Je vais me retrouver avec :
Une source par iq
Hors dans mon besoin le même iq doit pouvoir ressortir pour plusieurs choix de sources.
0
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
29 janv. 2009 à 00:02
Et une source peut avoir plusieurs IQ ?
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
29 janv. 2009 à 00:09
Affirmatif !
Mais tous les couples possibles sont dans ma table "correspondance"
0
jojodivx Messages postés 193 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 9 avril 2009 16
29 janv. 2009 à 00:13
A mon avis il doit être possible de marquer un truc du genre Source_1,Source_2,Source_3... et après prendre chaque partie séparément mais là je ne me suis jamais penché sur un truc comme ça ^^
0
Boueep Messages postés 41 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 26 mai 2009 3
29 janv. 2009 à 00:23
L'idée c'est d'afficher les sources dans un sélect et de dire pour l'affichage des iq
Dans le second sélect :
Si source dans sélect 1 = source_1 alors afficher tel tel tel iq
Si source dans sélect_1 = source_2 alors afficher tel tel tel iq mais potentiellement un de ceux qui ressortiraient pour source_1
0