Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Alert po wygenerowaniu kodu javascript
Forum PHP.pl > Forum > Przedszkole
pyrek
Mam problem z przerobieniem tego skryptu:

http://webmaster.helion.pl/kurshtml/skrypt/doubmenu.htm


i przerabiam go na php i mysql sugerowałem się już wcześniej przedstawionym opisem na forum ale tam chyba nie udało się rozwiązać problemu:

wuwala mi cały czas alert js 'temp.options' jest pusty lub nie jest obiektem

oto kod:
  1. echo '<?xml version="1.0" encoding="iso-8859-2"?\>';
  2. ?>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
  7. <meta http-equiv="reply-to" content="Adres_e-mail" />
  8. <meta name="generator" content="WebSite PRO 4.2" />
  9. <meta name="author" content="Autor_dokumentu" />
  10. <meta name="description" content="Opis" />
  11. <title>Bez Tytułu</title>
  12. </head>
  13. <body>
  14.  
  15. <form name="doublecombo">
  16. <?php
  17.  
  18.  
  19.  
  20.  
  21. $result = mysql_query("SELECT * FROM {$pr}ogloszenia_dzial WHERE naleznosc_kat='0' and widzialnosc_kat='1' ORDER BY nazwa_kat ;") OR DIE (mysql_error());
  22.  
  23. ?>
  24.  
  25. <select name="example" size="1" onChange="redirect(this.options.selectedIndex)">
  26.  
  27. <?php
  28. while ($row = mysql_fetch_assoc($result)) {
  29. echo '
  30. <option value="'.$row['id_kat'].'">'.$row['nazwa_kat'].'</option>
  31. ';
  32. }
  33.  
  34.  
  35. ?>
  36. </select>
  37. <select name="stage2" size="1">
  38.  
  39. <?
  40. $result1 = mysql_query("SELECT * FROM {$pr}ogloszenia_dzial WHERE naleznosc_kat='0' and widzialnosc_kat='1' ORDER BY nazwa_kat LIMIT 1") OR DIE (mysql_error());
  41. $row1 = mysql_fetch_assoc($result1) OR DIE (mysql_error());
  42.  
  43.  
  44.  
  45. $result2 = mysql_query("SELECT * FROM {$pr}ogloszenia_dzial  WHERE naleznosc_kat='$row1[id_kat]' and widzialnosc_kat='1' ORDER BY nazwa_kat") OR DIE (mysql_error());
  46.  
  47. while ($row2 = mysql_fetch_assoc($result2)) {
  48.  
  49.  
  50. echo '<option value="'.$row2['id_kat'].'">'.$row2['nazwa_kat'].'</option>';
  51.  
  52.  
  53.  
  54. }
  55. ?>
  56.  
  57. </select>
  58.  
  59.  
  60.  
  61. </form>
  62.  
  63. <?php
  64. echo '
  65. <script> 
  66. <!--
  67.  
  68. /*
  69. Double Combo Script Credit
  70. By Website Abstraction (www.wsabstract.com)
  71. Over 200+ free JavaScripts here!
  72. */
  73.  
  74. var groups=document.doublecombo.example.options.length
  75. var group=new Array(groups)
  76. for (i=0; i<groups; i++)
  77. group[i]=new Array()
  78.  
  79. ';
  80. $xl=0;
  81. $result3 = mysql_query("SELECT * FROM {$pr}ogloszenia_dzial WHERE naleznosc_kat='0' and widzialnosc_kat='1' ORDER BY nazwa_kat") OR DIE (mysql_error());
  82.  
  83. while ($row3 = mysql_fetch_assoc($result3)) {
  84.  
  85. ++$xl;
  86. $x2;
  87. $result4 = mysql_query("SELECT * FROM {$pr}ogloszenia_dzial  WHERE naleznosc_kat='$row3[id_kat]' and widzialnosc_kat='1' ORDER BY nazwa_kat");
  88.  
  89.  
  90. while ($row4 = mysql_fetch_assoc($result4) AND $i= mysql_num_rows($result3)) {
  91. ++$x2;
  92.  
  93.  
  94. echo "
  95. group['".$row3['id_kat']."']['".$row4['id_kat']."']= new Option('".$row4['nazwa_kat']."','".$row4['id_kat']."')
  96. ";
  97.  
  98.  
  99. }
  100.  
  101. }
  102. echo '
  103.  
  104. var temp=document.doublecombo.stage2
  105.  
  106.  
  107.  
  108. function redirect(x){
  109. for (m=temp.options.length-1;m>0;m--)
  110. temp.options[m]=null
  111. for (i=0;i<group[x].length;i++){
  112. temp.options[i]=new Option(group[x][i].text,group[x][i].value)
  113. }
  114. temp.options[0].selected=true
  115. }
  116.  
  117. function go(){
  118. location=temp.options[temp.selectedIndex].value
  119. }
  120.  
  121. //-->
  122. </script>
  123. ';
bigZbig
Skoro wyskakuje blad js to latwiej by sie to analizowalo gdybys wkleil kod wygenerowany przez php, a nie kod zrodlowy strony.
Vogel
Cytat(pyrek @ 2006-01-10 23:20:12)
Kod
var temp=document.doublecombo.stage2

polecalbym jednak odwolywac sie do elementow HTML w ten sposob:
  1. (...) <select name="stage2" id="stage2" size="1"> (...)

Kod
var temp=document.getElementById("stage2")


i wklej jeszcze wynikowy HTML jak zasugerowal bigZbig
ArturS
Ponieważ nie mam dokładnie takiej bazy jak Ty, więc stworzyłem sobie fikcyjną tabelę "telefony" z dwiema kolumnami: "producent" i "model" (czyli np Nokia i 6310i). Przerobiłem podany w linku skrypt na generowany właśnie z tej bazy. Wygląda to tak (i działa)

  1. <form name="doublecombo">
  2. <p><select name="example" size="1" onChange="redirect(this.options.selectedIndex)">
  3. <?php
  4. require_once('../mysql_connect_magazyn.php');
  5. $query = "SELECT DISTINCT producent FROM telefony ORDER BY producent";
  6. $result = @mysql_query($query);
  7. $num = mysql_num_rows($result);
  8. if ($num > 0) {
  9. while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
  10. echo '<option value="'.$row[0].'">'.$row[0].'</option>';
  11. }
  12. }
  13.  
  14. ?>
  15. </select>
  16. <select name="stage2" size="1">
  17. <?php
  18. $query = "SELECT DISTINCT model FROM telefony WHERE producent = (
  19. SELECT DISTINCT producent FROM telefony ORDER BY producent LIMIT 1)";
  20. $result = @mysql_query($query);
  21. $num = mysql_num_rows($result);
  22. if ($num > 0) {
  23. while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
  24. echo '<option>'.$row[0].'</option>';
  25. }
  26. }
  27. ?>
  28. </select>
  29. <input type="button" name="test" value="Wczytaj!" onClick="go()">
  30. </p>
  31. <?php
  32. echo '<script>
  33. <!--
  34.  
  35. var groups=document.doublecombo.example.options.length
  36. var group=new Array(groups)
  37. for (i=0; i<groups; i++)
  38. group[i]=new Array()
  39. ';
  40.  
  41.  
  42.  
  43. $i=0;
  44. $j=0;
  45. $result2 = @mysql_query("SELECT DISTINCT producent FROM telefony ORDER BY producent");
  46. while ($row = mysql_fetch_array($result2,MYSQL_NUM)) {
  47. $result3 = @mysql_query( "SELECT DISTINCT model FROM telefony WHERE producent='{$row[0]}' ORDER BY model");
  48. while ($row2 = mysql_fetch_array($result3)) {
  49. //echo "document.write("".$row[0]." ".$row2[0]."<br>")n";
  50. echo "group[$i][$j]=new Option("".$row2[0]."","".$row[0]."")n";
  51. ++$j;
  52. }
  53. $j=0;
  54. ++$i;
  55. echo "n";
  56. }
  57.  
  58. echo 'var temp=document.doublecombo.stage2
  59.  
  60. function redirect(x){
  61. for (m=temp.options.length-1;m>0;m--)
  62. temp.options[m]=null
  63. for (i=0;i<group[x].length;i++){
  64. temp.options[i]=new Option(group[x][i].text,group[x][i].value)
  65. }
  66. temp.options[0].selected=true
  67. }
  68.  
  69. function go(){
  70. location=temp.options[temp.selectedIndex].value
  71. }
  72. //-->
  73. </script>
  74. ';
  75. ?>



Mam nadzieję że ten przykład Ci pomoże.

--------------------------

Okazało się że i mi ten skrypcik się przydał, ale generował zbyt dużo kodu JS jeśli druga lista była zbyt długa i zmodyfikowałem trochę kod JS generowany z kodu ze zmienioną ostatnią częścią....
  1. <?php
  2.  
  3. $result2 = @mysql_query("SELECT DISTINCT producent FROM telefony ORDER BY producent");
  4. while ($row = mysql_fetch_array($result2,MYSQL_NUM)) {
  5. echo "var ".$row[0]." =new Array(";
  6. $result3 = @mysql_query( "SELECT DISTINCT model FROM telefony WHERE producent='{$row[0]}' ORDER BY model");
  7. while ($row2 = mysql_fetch_array($result3)) {
  8. echo """.$row2[0]."",";
  9. }
  10. echo "" ");n";
  11. echo "for (i=0;i<".$row[0].".length-1;i++) group[".$i."][i]=new Option(".$row[0]."[i],"".$row[0]."");nn";
  12. ++$i;
  13. }
  14.  
  15.  
  16. ?>


Dzięki temu, bazując na przykładowej bazie z telefonami, zamiast długiej listy typu

Kod
group[2][0]=new Option("1100","Nokia")
group[2][1]=new Option("2600","Nokia")
group[2][2]=new Option("3100","Nokia")
group[2][3]=new Option("3130","Nokia")
group[2][4]=new Option("3210","Nokia")
group[2][5]=new Option("3310","Nokia")
group[2][6]=new Option("3310i","Nokia")
group[2][7]=new Option("5110","Nokia")
group[2][8]=new Option("5150","Nokia")
group[2][9]=new Option("6020","Nokia")
group[2][10]=new Option("6030","Nokia")
group[2][11]=new Option("6100","Nokia")
group[2][12]=new Option("6110","Nokia")
group[2][13]=new Option("6230i","Nokia")
group[2][14]=new Option("6310i","Nokia")
group[2][15]=new Option("6610i","Nokia")
group[2][16]=new Option("6630","Nokia")
group[2][17]=new Option("6680","Nokia")
group[2][18]=new Option("9500","Nokia")
group[2][19]=new Option("N70","Nokia")
group[2][20]=new Option("N90","Nokia")


wygeneruje mi się zamiast tego

Kod
var Nokia =new Array("1100","2600","3100","3130","3210","3310","3310i","5110","5150","6020","6030","6100","6110","6230i","6310i","6610i","6630","6680","9500","N70","N90"," ");
for (i=0;i<Nokia.length-1;i++) group[2][i]=new Option(Nokia[i],"Nokia");


Sorki, że tyle tego kodu nawaliłem, ale może się przyda :-)

Pozdrawiam
Artur
allegra
czy ktoś może mi napisać jak wyświetlić (np. przy użyciu echo liub printf ) teraz to co w obu combo wybraliśmy questionmark.gif? Już powyższy kod mi działa biggrin.gif Jednak nie do końca wiem jak to śmiga sad.gif Potrzebuję złapać zawartość obu tych combo, a już cały dzień kombinowałam i nie mogę sobie z tym rady dać sad.gif
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.