Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MYSQL+PHP listy rozwijane zależne od siebie
Forum PHP.pl > Forum > PHP
lukasz33
Witam posiadam bazę danych która zawiera tabele markę, model, paliwo, auto z listy rozwijane na stronie chciałbym wybrać markę i model do tej marki jednak gdy wybieram np. markę audi to wyświetlają mi się również modele innych marek sad.gif . Czy ktoś mogłyby mi pomóc w rozwiązaniu tego problemu aby wszystko wyświetlało się jak należny. Jeżeli piszę w złym dziale to bardzo przepraszam

index.php
  1. <html>
  2. <head>
  3. <link rel="stylesheet" href="style.css" type="text/css">
  4. </head>
  5. <body class="back">
  6. <div class="txt"></div>
  7. <form method="POST" action="szukaj.php">
  8. <div id="rejestracja"><br>
  9.  
  10. <label class="font">Marka i Model:</label><br>
  11. <select id="marka" class="marka" name="marka">
  12. <?php
  13.  
  14. include("sterownik_db.php");
  15. $zapytanie = "SELECT * FROM marka";
  16. $wynik = mysql_query($zapytanie);
  17. {
  18. while ($wiersz = mysql_fetch_assoc($wynik))
  19. {
  20. ?>
  21. <option value="<?php echo $wiersz['id_marki'];?>"><?php echo $wiersz['nazwa'];?></option>
  22. <?php
  23. }
  24. }
  25. ?>
  26. </select>
  27. <select id="model" class="model" name="model">
  28. <?php
  29. include("sterownik_db.php");
  30. $zapytanie1 = "SELECT id_marka,model FROM model,marka WHERE model.id_marka = marka.id_marki";
  31. $wynik1 = mysql_query($zapytanie1);
  32. {
  33. while($wiersz1 = mysql_fetch_assoc($wynik1))
  34. {
  35. ?>
  36. echo "<option value="<?php echo $wiersz1['id_marka'];?>" class="<?php echo $wiersz1['id_model'];?>"><?php echo $wiersz1['model'];?></option>
  37. <?php
  38. }
  39. }
  40. ?>
  41. </select>
  42. <select id="paliwo" class="benzyna" name="paliwo">
  43. <?php
  44. include("sterownik_db.php");
  45. $zapytanie2 = "SELECT * FROM paliwo";
  46. $wynik2 = mysql_query($zapytanie2);
  47. while ($wiersz2 = mysql_fetch_array($wynik2))
  48. {
  49. echo "<option value=".$wiersz2['id_paliwa'].">".$wiersz2['rodzaj_paliwa']."</option>";
  50. }
  51. echo "</select>";
  52.  
  53. ?>
  54. <br>
  55. <input class="prze" name="txt">
  56. <input class="prze2" name="txt">
  57. </div>
  58. </form>
  59. </div>
  60. </div>
  61. </div>
  62. </body>
  63. </form>
  64. </html>


create.sql
  1. CREATE TABLE marka
  2. (
  3. id_marki int NOT NULL PRIMARY KEY,
  4. nazwa varchar(20)
  5. );
  6.  
  7. CREATE TABLE paliwo
  8. (
  9. id_paliwa int PRIMARY KEY AUTO_INCREMENT,
  10. rodzaj_paliwa varchar(20) NOT NULL
  11. );
  12.  
  13. CREATE TABLE model
  14. (
  15. id_model int NOT NULL PRIMARY KEY AUTO_INCREMENT,
  16. id_marka int NOT NULL,
  17. model char(20),
  18. CONSTRAINT FOREIGN KEY model(id_marka) REFERENCES marka(id_marki)
  19. );
  20.  
  21.  
  22. CREATE TABLE auto
  23. (
  24. id_auta int PRIMARY KEY AUTO_INCREMENT,
  25. marka int NOT NULL,
  26. rok_produkcji int(4) NOT NULL,
  27. przebieg int(20) NOT NULL,
  28. id_rodzaj_paliwa int NOT NULL,
  29. CONSTRAINT FOREIGN KEY (marka) REFERENCES marka(id_marki),
  30. CONSTRAINT FOREIGN KEY (id_rodzaj_paliwa) REFERENCES paliwo (id_paliwa)
  31. );


insert.sql
  1. INSERT INTO marka VALUES (1, 'Audi');
  2. INSERT INTO model VALUES (NULL,1,"A6");
  3. INSERT INTO model VALUES (NULL,1,"A8");
  4. INSERT INTO model VALUES (NULL,1,"100");
  5.  
  6. INSERT INTO marka VALUES (2, 'BMW');
  7. INSERT INTO model VALUES (NULL,2,"318");
  8. INSERT INTO model VALUES (NULL,2,"750");
  9. INSERT INTO model VALUES (NULL,2,"Z3");
  10.  
  11. INSERT INTO marka VALUES (3, 'Citroen');
  12. INSERT INTO model VALUES (NULL,3,"Berlingo");
  13. INSERT INTO model VALUES (NULL,3,"Xsara");
  14. INSERT INTO model VALUES (NULL,3,"C3");


Proszę o szybka pomoc smile.gif
SmokAnalog
Cytat(lukasz33 @ 6.11.2016, 22:52:54 ) *
gdy wybieram np. markę audi to wyświetlają mi się również modele innych marek


Możesz trochę jaśniej? Gdzie mają się wyświetlać te marki? Po wysłaniu formularza? Pytam, bo nie pokazałeś w ogóle pliku szukaj.php, a to on obsługuje u Ciebie dane z formularza.
Shou
szukaj.php to zapewne ten plik, którego treść wstawił.

Jeśli wszystko ma się odbywać dynamicznie na jednej stronie, to jest to zadanie nie dla PHP, a dla JavaScriptu.
SmokAnalog
To chyba raczej index.php (jak napisał), w którym jest formularz. Nigdzie nie ma żadnej obsługi $_POST / $_REQUEST.
Shou
Faktycznie, przeoczyłem. Moim zdaniem chodzi po prostu o wybór marki i w polu obok modelu - których lista byłaby zawężona do odpowiednich dla danej marki (bo to typowe działanie). Kwestia interfejsowa, więc co robi szukaj.php, to już raczej nieistotne.
lukasz33
To nie jest dodawanie rekordów do bazy smile.gif chciałbym po prostu wyświetlić dane w polu select jakie dane ? dane marki i model chciałbym aby działało to w ten sposób że w pierwszym polu wybieram załóżmy markę audi a w drugim automatycznie wyświetlają mi się wszystkie modele tej marki, wszystkie dane modeli i marek są pobierane z bazy i porostu wybieram sobie audi to wyświetlają mi się modele audi, mercedes itp problem w tym tak jak już wyżej napisałem że gdy wybieram np. mercedes to nie wyświetlają mi się modele tylko tej określonej marki ale wszystkie modele wszystkich marek i teraz jak napisać skrypt aby to działało jak ja chce?.

A właśnie to szukaj.php jest ze starego skryptu:) i jest całkowicie wyłączone sorki że was to zmyliło po prostu tego nie ma
SmokAnalog
Najlepiej to by było użyć do tego celu JavaScriptu i albo ładować te opcje Ajaxem (jeśli jest ich dużo), albo po prostu je wszystkie załadować i odpowiednio dodawać / usuwać z selecta (jeśli jest ich stosunkowo mało). Masz jakąkolwiek wiedzę JS?
lukasz33
Marną sad.gif
Shou
Jest opcja prostsza bez JS, ale trochę toporna. Czyli wybierasz markę, a następnie strona z formularzem się przeładowuje i wyświetla listę modeli zawężoną do wybranej marki.
SmokAnalog
Tak też można, ale będzie to rzeczywiście toporne. To już prędzej poszedłbym w ekran wyboru marki jako kliknięcie w link. To już by było całkiem fajne, szczególnie z ładnymi grafikami dla każdej marki.
lukasz33
Hehe a myślałem że obejdzie się bez js biggrin.gif
SmokAnalog
Cytat(lukasz33 @ 7.11.2016, 00:20:37 ) *
Hehe a myślałem że obejdzie się bez js biggrin.gif

Przeczytałeś co napisaliśmy?
lukasz33
tak ale raczej wolałbym pozostać przy select

A dało by się przefiltrowac te dane zapytaniem czy coś w tym stylu?
szczemp
Ja bym to filtrował javascriptem. Nawet jak samochodów będzie 1000, to chyba to najprostsze rozwiązanie. Oczywiście po przesłaniu formularz i tak musisz sprawdzić, czy dobrze ktoś pozaznaczał. Bardzo łatwo jest podmienić wartości przed przesłaniem. Żeby potem w bazie nie znalazła się fabia przy fordzie.
https://jsfiddle.net/f5juxdv8/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.