Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Select zależny od select
Forum PHP.pl > Forum > PHP
brutal1985
Witam.
Mam formularz edycji, w którym oprócz zwykłych pól tekstowych mam rozwijalne listy: Gmina, Miejscowość, Poczta.
Listy te odnoszą się do odpowiednich tabel w bazie danych, w których są też pola identyfikujące nazwę gminy, w jakiej leży miejscowość, czy też nazwę poczty, przypisaną do danej miejscowości. Problem, w tym jak zrobić, żeby podczas wyboru z pierwszej listy Gmina, do drugiej listy Miejscowość wpisały się tylko te miejscowości, które są w danej gminie (te, które w bazie danych mają przypisane odpowiednie ID gminy, którą wybraliśmy) oraz podczas wyboru z drugiej listy Miejscowość, wybrała się odpowiednia Poczta.

Oto mój kod:
  1. $sql = 'SELECT * FROM `Uczestnicy`, `Gmina`, `Ulice`, `Miejscowosc`, `Poczta`, `Wyksztalcenie`, `Punkt_uczest`, `Plec`, `Stan_cywilny`, `Program` WHERE `Ucz_ID` = "' . $_GET['ID'] . '" AND `ID_Ulica` = `Ulica_ID` AND `ID_Miejsc` = `Miejsce_ID` AND Uczestnicy.ID_Gmina = `Gmina_ID` AND Uczestnicy.ID_Poczta = `Poczta_ID` AND `ID_Wyksztalcenie` = `ID_wykszt` AND `ID_Pkt` = `Pkt_ID AND `ID_Plec` = `Plec_ID`AND `ID_Stan_cyw` = `Stan_cyw_ID`AND `ID_Program` = `Program_ID`';
  2. $result = mysql_query($sql);
  3. $row = mysql_fetch_assoc($result);

  1. <form>
  2. <div class="form_content">
  3. <div class="form_text">
  4. Gmina:
  5. </div>
  6. <div class="form_input">
  7. <select name="Gmina" class="input_select" >
  8. <option selected name="Gmina" value="'.$row['Nazwa_gminy'].'" class="input_option"> ' . $row['Nazwa_gminy'] . ' </option>';
  9. $zapytanie = 'SELECT * FROM `Gmina` ORDER BY `Nazwa_gminy`';
  10. $wynik = mysql_query($zapytanie);
  11. while ($wiersz = mysql_fetch_assoc($wynik))
  12. {
  13. <option name="Gmina" value="' . $wiersz['Nazwa_gminy'] . '" class="input_option">
  14. ' . $wiersz['Nazwa_gminy'] . '
  15. </option>
  16. ';
  17. }
  18. </select>
  19. </div>
  20. </div>';
  21.  
  22. <div class="form_content">
  23. <div class="form_text">
  24. Miejscowość:
  25. </div>
  26. <div class="form_input">
  27. <select name="Miejscowosc" class="input_select" >
  28. <option selected name="Miejscowosc" value="'.$row['Nazwa_miejsc'].'" class="input_option"> ' . $row['Nazwa_miejsc'] . ' </option>';
  29. $zapytanie = 'SELECT * FROM `Miejscowosc` ORDER BY `Nazwa_miejsc`';
  30. $wynik = mysql_query($zapytanie);
  31. while ($wiersz = mysql_fetch_assoc($wynik))
  32. {
  33. <option name="Miejscowosc" value="' . $wiersz['Nazwa_miejsc'] . '" class="input_option">
  34. ' . $wiersz['Nazwa_miejsc'] . '
  35. </option>
  36. ';
  37. }
  38. </select>
  39. </div>
  40. </div>
  41. ';
  42.  
  43.  
  44. <div class="form_content">
  45. <div class="form_text">
  46. Poczta:
  47. </div>
  48. <div class="form_input">
  49. <select name="Poczta" class="input_select" >
  50. <option selected name="Poczta" value="'.$row['Kod_pocztowy]. $row['Nazwa_miejsc_poczt'].'" class="input_option"> ' .$row['Kod_pocztowy]. $row['Nazwa_miejsc_poczt']. ' </option>';
  51. $zapytanie = 'SELECT * FROM `Poczta` ORDER BY `Nazwa_miejsc_poczt`';
  52. $wynik = mysql_query($zapytanie);
  53. while ($wiersz = mysql_fetch_assoc($wynik))
  54. {
  55. echo'
  56. <option name="Poczta" value="'.$wiersz['Kod_pocztowy]. $wiersz['Nazwa_miejsc_poczt'].'" class="input_option">
  57. ' .$wiersz['Kod_pocztowy]. $wiersz['Nazwa_miejsc_poczt']. '
  58. </option>
  59. ';
  60. }
  61. echo'
  62. </select>
  63. </div>
  64. </div>
  65. </form>
  66. ';

kylu31
Nie wiem czy dobrze zrozumiałem ale chyba chodzi Ci o funkcje WHERE smile.gif poczytaj o tym na google
brutal1985
Prawie sobie poradziłem. Pozostał jeszcze problem z przesłaniem wybranej opcji.
Formualrza wygląda następująco.
Nagłówek z java script:
  1. <script type="text/javascript">
  2. function showGmina(str)
  3. {
  4. if (str=="")
  5. {
  6. document.getElementById("txtHint").innerHTML="";
  7. return;
  8. }
  9. if (window.XMLHttpRequest)
  10. {// code for IE7+, Firefox, Chrome, Opera, Safari
  11. xmlhttp=new XMLHttpRequest();
  12. }
  13. else
  14. {// code for IE6, IE5
  15. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  16. }
  17. xmlhttp.onreadystatechange=function()
  18. {
  19. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  20. {
  21. document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  22. }
  23. }
  24. xmlhttp.open("GET","change.php?gmina="+str,true);
  25. xmlhttp.send();
  26. xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');
  27. xmlHttpRequest.overrideMimeType('text/html; charset=ISO-8859-2');
  28. }
  29. </script>

  1.  
  2. Plik, w którym przebiega wybór:
  3. [php]
  4. <?php
  5. include ('db.php');
  6. $gmina=$_GET['gmina'];
  7. mysql_query("SET NAMES 'latin2'");
  8. $sql='SELECT * FROM `Miejscowosc` WHERE `ID_Gmina` = "' . $gmina . '";';
  9. $result = mysql_query($sql);
  10. echo '<select class="input_select" name="Miejscowosc">';
  11. while($row = mysql_fetch_array($result))
  12. {
  13. echo '<option class="input_option" value="' .$row['Miejsce_ID'] . '">' .$row['Nazwa_miejsc'] . '</option>';
  14. }
  15. echo '</select>';
  16. ?>

Przypisanie zmiennych:
  1. $gmina = $_POST['Gmina_ID'];
  2. $miejscowosc = $_POST['Miejsce_ID'];


Wszystko odbywa się niby dobrze, ale po przesłaniu formularza, nie zapisują się wartości obu pól do bazy danych.
Może to dlatego, że wartości select'ów przesyłane są za pomocą GET, a cały formularz za pomocą POST ?

Poradziłem już sobie. Problem tkwił w źle nazwanej zmiennej podczas zapisu do bazy danych.
Temat można zamknąć.
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.