Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][MySQL][PHP]Generowanie dynamicznego select
Forum PHP.pl > Forum > Przedszkole
marcel_gdynia
Witam, mam utworzoną tabelę w bazie która wygląda w podobny sposób:
Kod
+-------------+---------+
| kraj        | miasto   |
+-------------+---------+
| Polska     | Gdynia  
| Polska     | Gdańsk  
| Hiszpania  | Madryt  
| Polska     | Sopot    
| Hiszpania  | Madryt  
| Hiszpania  | Barcelona
| Polska     | Bydgoszcz  
| Polska     | Toruń  
| Hiszpania  | Tarragona  
| Polska     | Toruń  
| Hiszpania  | Tarragona


Pobieram sobie z bazy kraj i wypisuję sobie go w select=kraj z zapytania które zawiera DISTINCT.

I teraz chciałbym w JS generować automatycznie select=miasto w którym byłyby wypisane miasta które odpowiadają konkretnemu krajowi. Miasta w danym kraju mogą się powtarzać. Próbowałem poradzić sobie sam przy pomocy Ajax (np. jQuery) ale kompletnie nie daję sobie z tym rady.
Skrypty są strasznie rozbudowane, a ja chcę to uproscić ile się da.

Proszę o pomoc i z góry dziękuję za wyrozumiałość :-))
Kshyhoo
Zobacz, czy takie coś Cię zadowoli:
  1. <?php
  2. $baza = mysql_connect("localhost", "user", "pass");
  3. mysql_select_db("tabela");
  4.  
  5. $kraje = mysql_query("SELECT DISTINCT(kraj) FROM tabela;");
  6.  
  7. for ($i=0;$i<mysql_num_rows($kraje);$i++) {
  8. $kraj = mysql_fetch_row($kraje);
  9. $tkraje[]=$kraj[0];
  10. $wynik = mysql_query("SELECT DISTINCT(miasto) FROM tabela WHERE kraj='$kraj[0]';");
  11. for ($j=0;$j<mysql_num_rows($wynik);$j++) {
  12. $miasto = mysql_fetch_row($wynik);
  13. $tmiasta[$i][$j] = $miasto[0];
  14. }
  15. }
  16. mysql_close($baza);
  17.  
  18. echo '<form name="form1" action="index.php" method="get">
  19. <select name="lista1" onChange="zmien(this.options.selectedIndex)">';
  20.  
  21. foreach ($tkraje as $linia) echo "<option>$linia</option>";
  22.  
  23. echo '</select>
  24. <select name="lista2"></select>
  25. <input type="submit" value="Szukaj" />
  26. </form>';
  27.  
  28. <script language="javascript" type="text/javascript">
  29. <!--
  30. function zmien(wybor) {
  31. l2=document.form1.lista2;
  32. for (i=l2.options.length;i>=0;i--) l2.options[i]=null;
  33. for (i=0;i<opcje[wybor].length;i++)
  34. l2.options[i]=new Option(opcje[wybor][i].value,opcje[wybor][i].text);
  35. }
  36.  
  37. ile_lista1=document.form1.lista1.options.length;
  38. opcje=new Array(ile_lista1)
  39. for (i=0;i<ile_lista1;i++) opcje[i]=new Array();
  40. ';
  41.  
  42. for ($i=0;$i<count($tmiasta);$i++) {
  43. for ($j=0;$j<count($tmiasta[$i]);$j++) {
  44. echo "opcje[$i][$j]=new Option(\"";
  45. echo $tmiasta[$i][$j]."\",\"".$tmiasta[$i][$j]."\");\n";
  46. }
  47. }
  48.  
  49. echo 'zmien(0);
  50. // -->
  51. </script>';
  52. ?>
marcel_gdynia
Dzięki za podpowiedź, ale poradę Darka znam. Siedzę nad nią od wczoraj. Działa bez zarzutu, jednak wywala błędy składni pod Validatorem W3C od wiersza 33 w dół.

I właśnie dlatego szukam innego sposobu, bo nie mogę sobie z tym poradzić.

błędy jakie wskazuje W3C:
Kod
invalid comment declaration: found character ")" outside comment but inside comment declaration
  for (i=l2.options.length;i>=0;i--) l2.options[i]=null;

Check that you are using a proper syntax for your comments, e.g: <!-- comment here -->. This error may appear if you forget the last "--" to close one comment, and later open another.

character "[" not allowed in attribute specification list
  for (i=0;i<opcje[wybor].length;i++)

character ";" not allowed in attribute specification list
for (i=0;i<ile_lista1;i++) opcje[i]=new Array();

element "ile_lista1" undefined
for (i=0;i<ile_lista1;i++) opcje[i]=new Array();
Kshyhoo
Zobacz ten kod, ew. może ten, lub ten.
marcel_gdynia
Dzięki wielkie, poradziłem sobie z poprawką tamtego skryptu. Dla zainteresowanych, żeby W3C się nie czepiał:

Linia 24: dodany pusty option
  1. <select name="lista2"><option></option></select>


Linia 33: zamiast i-- dać i=i-1 bo i-- było interpretowane jako początek komentarza.
  1. for (i=l2.options.length;i>=0;i=i-1) l2.options[i]=null;
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.