Witam. Posiadam następujący skrypt do wypełniania selectów w zależności od wcześniejszego wyboru. Wybór pomiędzy dwoma selectami działa poprawnie. Dołożenie trzeciego selecta skojarzonego z dwoma poprzednimi jest tym co chcę osiągnąć.
Select 1 - wybieram imiona z bazy
Select 2 - wybieram nazwiska z bazy skojarzone z wybranym wcześniej imieniem (redirect)
Select 3 - (niezaimplementowane) - wybieram pesel dla wybranego wcześniej imienia i nazwiska.(redirect2)
  1. <form name="doublecombo">
  2. <p>
  3.  
  4.  
  5. <select name="example" size="1" onChange="redirect(this.options.selectedIndex)">
  6. <?
  7. include 'db.php';
  8. $TABLE_TABELE="awizacja"; 
  9.  
  10.  
  11. $result1 = pg_query ($conn, "SELECT distinct imiekierowcy FROM ".$TABLE_TABELE." order by 1"); 
  12. if (!$result1) { 
  13. echo "Wystąpił błąd przy pobieraniu danych.\n"; 
  14. exit; 
  15. }
  16. $count1=pg_num_rows($result1); //liczba wierszy
  17. if ($result1)
  18. { 
  19. for ($licznik1=0;$licznik1<$count1;$licznik1++) 
  20. {  
  21. $arr = pg_fetch_array ($result1,$licznik1, PGSQL_NUM);
  22.  
  23. echo '<OPTION value="'.$arr[0].'">';
  24. echo $arr[0];
  25. echo '</OPTION>';
  26. }  
  27. }
  28.  
  29. ?>
  30.  
  31. </select>
  32.  
  33.  
  34.  
  35.  
  36. <select name="stage2" size="1" onChange="redirect2(this.options.selectedIndex)">
  37. <option value="Wybierz">----</option>
  38. </select>
  39.  
  40. <select name="stage3" size="1">
  41. <option value="Wybierz">----2</option>
  42. </select>
  43.  
  44. <input type="button" name="test" value="Wczytaj!"
  45. onClick="go()">
  46. </p>
  47.  
  48. <?php
  49.  
  50. echo '<script>;
  51.  
  52.  
  53. /*
  54. Double Combo Script Credit
  55. By Website Abstraction (www.wsabstract.com)
  56. Over 200+ free JavaScripts here!
  57. */
  58.  
  59. var groups=document.doublecombo.example.options.length
  60. var group=new Array(groups)
  61. for (i=0; i<groups; i++)
  62. group[i]=new Array()
  63. ';
  64.  
  65.  
  66. //$j=0;
  67.  
  68.  
  69. $result2 = pg_query($conn, "SELECT DISTINCT imiekierowcy FROM awizacja");
  70. //$row = pg_fetch_array($result2,1,PGSQL_NUM); 
  71. $count1=pg_num_rows($result2); //liczba wierszy
  72. if ($result2)
  73. { 
  74. for ($licznik1=0;$licznik1<$count1;$licznik1++) 
  75. {  
  76. $arr = pg_fetch_array ($result2,$licznik1, PGSQL_NUM);
  77. //echo $arr[0].' ';
  78.  
  79.  
  80. $result3 = pg_query($conn, "SELECT DISTINCT nazwiskokierowcy FROM awizacja WHERE imiekierowcy='{$arr[0]}'");
  81.  $count2=pg_num_rows($result3); //liczba wierszy
  82. if ($result3)
  83. { 
  84. for ($licznik2=0;$licznik2<$count2;$licznik2++) 
  85. {  
  86. $arr2 = pg_fetch_array ($result3,$licznik2, PGSQL_NUM);
  87. //echo $arr2[0].'<BR>';
  88.  echo "group[$licznik1][$licznik2]=new Option(\"".$arr2[0]."\",\"".$arr[0]."\")\n"; 
  89. }
  90. }
  91.  
  92. }
  93. }
  94. echo "\n";
  95.  
  96.  
  97.  
  98.  
  99. echo 'var temp=document.doublecombo.stage2
  100.  
  101. function redirect(x){
  102. for (m=temp.options.length-1;m>0;m--)
  103. temp.options[m]=null
  104. for (i=0;i<group[x].length;i++){
  105. temp.options[i]=new Option(group[x][i].text,group[x][i].value)
  106. }
  107. temp.options[0].selected=true
  108. }
  109.  
  110. function go(){
  111. location=temp.options[temp.selectedIndex].value
  112. }
  113.  
  114. </script>
  115. ';
  116.  
  117.  
  118.  
  119. //obsluga trzeciego selecta
  120.  
  121. echo '<script>;
  122.  
  123.  
  124.  
  125. var groups=document.doublecombo.stage2.options.length
  126. var group=new Array(groups)
  127. for (i=0; i<groups; i++)
  128. group[i]=new Array()
  129. ';
  130.  
  131.  
  132. $TABLE_TABELE="awizacja"; 
  133.  
  134.  
  135. //$j=0;
  136.  
  137.  
  138. $result4 = pg_query($conn, "SELECT DISTINCT imiekierowcy FROM awizacja");
  139. $count4=pg_num_rows($result4); //liczba wierszy
  140. if ($result4)
  141. { 
  142. for ($licznik4=0;$licznik4<$count4;$licznik4++) 
  143. {  
  144. $arr4 = pg_fetch_array ($result4,$licznik4, PGSQL_NUM);
  145.  
  146. $result5 = pg_query($conn, "SELECT DISTINCT nazwiskokierowcy FROM awizacja WHERE imiekierowcy='{$arr[0]}'");
  147. $count5=pg_num_rows($result5); //liczba wierszy
  148. if ($result5)
  149. { 
  150. for ($licznik5=0;$licznik5<$count5;$licznik5++) 
  151. {  
  152. $arr5 = pg_fetch_array ($result5,$licznik5, PGSQL_NUM);
  153.  
  154. $result6= pg_query($conn, "SELECT peselkierowcy FROM awizacja WHERE imiekierowcy='{$arr4[0]}' and nazwiskokierowcy='{$arr5[0]}'");;  
  155.  $count6=pg_num_rows($result6); //liczba wierszy
  156. if ($result6)
  157. { 
  158. for ($licznik6=0;$licznik6<$count6;$licznik6++) 
  159. {  
  160. $arr6 = pg_fetch_array ($result6,$licznik6, PGSQL_NUM);
  161.  echo "group[$licznik4][$licznik5][$licznik6]=new Option(\"".$arr6[0]."\",\"".$arr5[0]."\",\"".$arr4[0]."\")\n"; 
  162.  }
  163.  }
  164.  }
  165.  
  166.  }
  167.  }
  168.  }
  169. echo "\n";
  170.  
  171.  
  172.  
  173.  
  174. echo 'var temp=document.doublecombo.stage3
  175.  
  176. function redirect2(x){
  177. for (m=temp.options.length-1;m>0;m--)
  178. temp.options[m]=null
  179. for (i=0;i<group[x].length;i++){
  180.  
  181. temp.options[i]=new Option(group[x][i].text,group[x][i].value)
  182. }
  183. temp.options[0].selected=true
  184. }
  185.  
  186.  
  187. ';
  188.  
  189. S
  190.  
  191. ?>

Moim zdaniem funkcja redirect2 w tym momencie powinna przyjmować dwa argumenty, imię i nazwisko aby wszystko sprawnie działało. Mogę się mylić i funkcja redirect w wyjściowej postaci wystarczy. Proszę o pomoc przy rozbudowie skryptu i wszelkie uwagi.
Pozdrawiam