|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
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 : Code :
Code :
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é. Code :
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. |
||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() |
Bonsoir,
Euh, c'est pas très clair tout ça. Déjà pour commencer tu devrais te faire un formulaire de saisie en bonne et due forme avec des listes et tout ce qu'il faut pour que l'alimentation de ta base soit confortable. Par ailleurs, ce formulaire pourra te servir pour gérer aussi les modifications. Je serais toi, je ne gérerai pas la gamme. C'est inutile à mon sens. Le modèle de l'imprimante suffit amplement : MFC-7420 ou MP-810... Pas la peine de s'embêter plus.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
Bonsoir.
j'ai besoin du select gamme car il y a plusieurs gamme disponible pour une même marque de même type. Je sais que ce n'est pas très claire mais c'est pas facile à expliquer. il faudrait en gros que mes quatre select recherche et affiche les informations qui sont dans une seule table plutôt que quatre. il faudrait pour ça que je récupère la valeur de la liste une et deux pour faire la requête de mon troisième select. |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() ![]() |
Bon si tu veux, mais je pense que c'est pas gagné.
Déjà je ne comprends pas trop tes champs de table... Pour arriver à faire ce que tu veux il faut faire une jointure entre les tables : Code sql :
Enfin, là c'est le b.a.ba de la base de données, il faudrait que tu bouquines un peu parce que tu vas perdre patience en moins de temps qu'il ne faut pour l'écrire. Tu n'échappes pas tes valeurs avec htmlspecialchars() pour la base de données, c'est soit requêtes préparées (PDO) soit mysql_real_escape_string() htmlspecialchars() ne sert qu'à échapper des données potentiellement dangereuses à l'affichage dans le navigateur. Je t'invite à passer un peu de temps ici
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||
|
00
|
|
|
#5 | ||||||||||||
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
Bonjour et merci.
J'ai du mal m'exprimer mais justement je ne veux pas avoir plusieurs table. Ok pour le htmlspecialchars() je pensé que pour un simple appel c’était bon. Je met mes pages en dessous je pense que ce sera plus explicite. page cartouche_generique.php dans le head Code :
Code :
Code :
Code :
Code :
Code :
Pour la requête de la page refreshImprimantes.php çe sera le même problème. Voila j'espère que c'est plus claire comme ça et encore merci. |
||||||||||||
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() ![]() |
Postes moi plutôt le code sql des tables marques, gammes, types, cartouches
Je ne veux pas les données juste la structure.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#7 |
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
Désolé je comprend pas ce que tu veux.
les tables type, marque,gamme et imprimante sont posté plus haut au début du post, je l'ai avaient créer pour faire fonctionner le code que tu m'a donné dans l'autre post (4 listes liées) sur le forum. par contre je veux utiliser qu'un seul table la table cartouche_generique qui regroupe tous ces champs dans des colonnes. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() ![]() |
Je voudrais voir la DDL de tes tables c'est le code sql qui permet de les créer, le code commençant par CREATE TABLE...
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
Voici, désolé je n'avais pas compris
-- -- Structure de la table `cartouche_generique` -- Code sql :
|
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() ![]() |
C'est ce que je soupçonnais, tu utilises le moteur MyISAM de MySql alors que dans ton cas il aurait été préférable d'utiliser InnoDb. Je me demande bien comment tu gères tes intégrités référentielles ? Tout est codé à la mano non ? Procédures stockées ?
Sinon, pour ta table cartouche_generique tu as des erreurs de types pour les champs suivants : marque, type et gamme. Ils devraient être en int(11) et devraient également référencer les id autonum des tables correspondantes. Vu que tu es en MyISAM, t'es marron. La correction n'est pas simple. Changer le type d'un champ est généralement impossible à cause des données déjà présentes dedans. Sans compter que tu as dû dupliquer les valeurs textes entre tes tables (marque, type, gamme) et leurs champs correspondants dans la table cartouche_generique. Bref, pas simple pour revenir à un schéma correcte et maintenable. Il faudrait que tu te documentes quand même un peu plus sur les bases de données parce que là tu t'embarques dans un système qui est ou sera ingérable à très court terme. Je te conseille de reprendre intégralement ton design après t'être documenté et avoir pratiqué quelques cas d'école.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#11 |
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
Merci pour tous ces renseignement mais je pensai que int(11) était à utiliser pour des nombres entier.
côté code oui tous est fait à la mano comme tu dit. Je n'ai pas encore fait mes quatre tables, je voulais d'abord savoir si il existait un moyen de faire avec ma table actuelle cartouche_generique car jusqu’à présent mon système fonctionne avec quatre select qui passe leur valeur en valident le choix les uns après les autres (en php). Dans le second je récupère la valeur du premier, dans le troisième je récupère la valeur du premier et du second pour faire ma requête (WHERE type=$type AND marque=$marque) et dans le quatrième je récupère la valeur du premier du second et du troisième (WHERE type=$type AND marque=$marque AND gamme=$gamme) J'aurais voulu faire la même chose mais avec des listes liées. pourtant il me semble que si j'arrive à récupérer toutes les valeurs des select au fur et à mesure c'est faisable. |
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé
![]() ![]() |
essaies avec ça pour refreshGammes.php :
Code :
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||
|
00
|
|
|
#13 |
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
Il me semble avoir déjà essayer if (isset($_POST['type']) pour pouvoir récupérer la valeur et l'utiliser dans ma requête mais sans succès car le $_POST['type'] n'a pas l'air d’exister.
Je réessayerais ce soir on ne sais jamais, la je suis au boulot. Par contre je comprend pas pourquoi tu fait un tableau associatif $where = array(); ce n'est pas se compliquer pour rien ? |
|
|
00
|
|
|
#14 | ||||||||||||||||||
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
J'ai modifié ma page refreshGammes.php comme tu me la dit mais ça affiche toutes les gammes et pas uniquement la gamme qui correspond au type et à la marque sélectionné dans le deux premier select (type et marque).
Désolé je vient de comprendre pourquoi tu me dit de mettre int(11), mes champs marque, type et gamme ne sont pas des nombres mais des champs de texte. Voici le contenu de ma table cartouche_generique (enfin une partie car elle fait 13000 lignes) -- -- Structure de la table `cartouche_generique` -- Code sql :
-- Contenu de la table `cartouche_generique` -- Code sql :
Je vais reprendre depuis le début car je pense que je me suis mal fait comprendre et on part dans tous les sens. Je voudrai faire fonctionner 4 listes liées qui iraient chercher les informations dans une seule table (la table cartouche_generique ci-dessus) Je remet mon code Tout d'abord la page cartouche_generique Dans le head Code :
Code :
refreshMarques.php Code :
Code :
Code :
Code :
Code :
Merci encore. |
||||||||||||||||||
|
|
00
|
|
|
#15 | ||
|
Expert Confirmé
![]() ![]() |
Voilà comment récupérer les valeurs de marque et de type pour mettre à jour les gammes :
Code :
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||
|
00
|
|
|
#16 |
|
Invité de passage
![]() Serge Educateur spécialisé Inscription : janvier 2012 Messages : 21 ![]() |
Oh merci, je croix que la ce sera bon.
Il me tarde ce soir pour tester ça. Je teste ce soir et EDIT. EDIT : Merci beaucoup rawsrc tous fonctionne comme je le voulais. Merci et bravo.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com