Bonjour à tous.
J'aurais besoin d'un peu d'aide concernant 4 listes liées et 4 tables dans ma bdd.
Je voudrai savoir si au lieu d'avoir 4 table liée entre elles par id je pouvais en avoir qu'une seul ou je trierais les infos avec un DISTINCT lors de la requête pour récupérer les infos.
Voici les tables et les listes associées je pense que ce sera plus claire.
1èr liste qui affiche le type de cartouche d'encre et qui récupère l'id en value :
table type_generique
INSERT INTO `type_generique` (`id`, `type`) VALUES
(1, 'Cartouche jet d''encre'),
(2, 'Kit de recharge'),
(3, 'Cartouche laser'),
(4, 'Cartouche de nettoyage'),
(5, 'Papier'),
(6, 'Ruban de transfert');
L'id du type est envoyé à la liste des marques et affiche les marques qui correspondes la colonne id_cor_type
table marques_generique
INSERT INTO `marques_generique` (`id_mar`, `marque`, `id_cor_type`, `id_marque`) VALUES
(1, 'BROTHER', 4, 1),
(2, 'APPLE', 4, 2),
(3, 'EPSON', 4, 3),
(4, 'BROTHER', 1, 4),
(5, 'CANON', 1, 5),
(6, 'APPLE', 1, 6),
(7, 'ALCATEL', 1, 7),
(8, 'SIEMENS', 1, 8),
(9, 'HEWLETT PACKARD', 1, 9),
(10, 'LEXMARK', 1, 10),
(11, 'UTAX', 1, 11),
(12, 'BROTHER', 3, 12),
(13, 'MINOLTA', 3, 13),
(14, 'LEXMARK', 3, 14),
(15, 'DELL', 3, 15),
(16, 'IBM', 3, 16),
(17, 'OKI', 3, 17),
(18, 'SAMSUNG', 3, 18),
(19, 'BROTHER', 3, 19),
(20, 'BROTHER', 6, 20),
(21, 'EPSON CANON BROTHER HEWLETT PACKARD LEXMARK XEROX', 2, 21),
(22, 'PAPIER', 5, 22);
L'id_marque de la marque est envoyé à la liste des gammes et affiche les gammes qui correspondes la colonne id_cor_marque de la table gammes_generique
table gammes_generique
INSERT INTO `gammes_generique` (`id_gen`, `GAMME`, `id_cor_marque`, `id_gamme`) VALUES
(1, 'PCRF', 4, 1),
(2, 'BJ', 4, 2),
(3, 'DCP', 4, 3),
(4, 'Fax', 4, 4),
(5, 'HJ', 4, 5),
(6, 'IntelliFax', 4, 6),
(7, 'MFC', 4, 7),
(8, 'MFC-J', 4, 8),
(9, 'P', 4, 9),
(10, 'QBJ', 4, 10),
(11, 'DCP', 12, 11),
(12, 'HL', 12, 12),
(13, 'MFC', 12, 13),
(14, 'DCP', 1, 14),
(15, 'Fax', 1, 15),
(16, 'MFC', 1, 16),
(17, 'Fax', 20, 17),
(18, 'Fax T', 20, 18),
(19, 'MFC', 20, 19);
et pour finir ma table principale affiche les valeurs qui corresponde à id_gamme.
Je pense que la c'est plus claire
Ce que je voudrai c'est faire tous ça avec une seule table car c'est la folie de mettre tous ces numéro d'id.
J'ai donc essayé de faire ma requête avec un DISTINCT mais le problème c'est de pouvoir récupérer les valeurs des différente liste.
Je m'explique.
Voici la liste qui récupère le type :
La page refreshMarques.php est bien appelée et elle affiche la seconde liste, celle de la marque.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <select id="types" name="type" onchange="refreshMarques();"> <option value="">-- Sélectionnez --</option> <?php while($data = mysql_fetch_assoc($exec)): ?> <option value="<?php echo ''.$data['TYPE'].''; ?>"><?php echo $data['TYPE']; ?></option> <?php endwhile; ?> </select> et le js associé : function refreshMarques() { var listTypes = document.getElementById('types'); var idType = listTypes.options[listTypes.selectedIndex].value; if (idType != '') { callAndRefresh('marques', '<?php echo ROOTPATH; ?>/insert/refreshMarques.php', 'type='+idType); } }
Jusque là tous va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 page refreshMarques.php if (isset($_POST['type']) && $_POST['type'] !='') { $_SESSION['type'] = htmlspecialchars($_POST['type']); mysql_connect("***","***","***"); mysql_select_db("***"); $query = mysql_query("SELECT DISTINCT marque FROM cartouche_generique WHERE TYPE='".$_SESSION['type']."' ORDER BY marque");?> <option value="">-- Sélectionnez --</option> <?php while ($back = mysql_fetch_assoc($query)) { echo '<option value="'.$back["marque"].'">'.$back["marque"].'</option>'; } } header("Content-Type: text/html"); et le js associé function refreshGammes() { var listMarques = document.getElementById('marques'); var idMarque = listMarques.options[listMarques.selectedIndex].value; if (idMarque > 0) { callAndRefresh('gammes', '<?php echo ROOTPATH; ?>/insert/refreshGammes.php', 'marque='+idMarque); } }
Le souci est ici lors de la sélection de la marque, je voudrai que la liste gamme affiche que les gammes qui corresponde au type et à la marque choisi mais je ne sais pas comment faire pour récupérer ces valeurs.
Voici la page refreshGammes.php
J'ai essayé ça mais ça fonctionne pas, rien n'est affiché.
ça fonctionne mais ça m'affiche toutes les gammes et pas celle qui corresponde au type et à la marque.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <?php // Ajax : Liste des marques après sélection d'un type if (isset($_POST['marque']) && $_POST['marque'] != '') { //$idMarque = htmlspecialchars($_POST['marque']); $_SESSION['marque'] = htmlspecialchars($_POST['marque']); // recuperation de id_liste1 mysql_connect("***","***","***"); mysql_select_db("***"); $query = mysql_query("SELECT DISTINCT gamme FROM cartouche_generique WHERE TYPE='".$_SESSION['type']."' AND marque='".$_SESSION['marque']."' ORDER BY gamme");?> <option value="">-- Sélectionnez --</option> <?php while ($back = mysql_fetch_assoc($query)) { echo '<option value="'.$back["gamme"].'">'.$back["gamme"].'</option>'; } } header("Content-Type: text/html"); ?> par contre si je met cette requête $query = mysql_query("SELECT DISTINCT gamme FROM cartouche_generique WHERE TYPE='".$_SESSION['type']."' AND marque='".$_SESSION['marque']."' ORDER BY gamme");?>
Idem pour la quatrième liste.
J'espère avoir été assai claire dans mes explications.
Un grand merci à tous ceux qui pourrons m'aider.
Partager