Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript][MYSQL] Problem z selectami
Forum PHP.pl > Forum > Przedszkole
slawek3422
Witam.
Chcę zrobić coś takiego jak konfigurator monitorów LCD. Ma to działać tak, że wybiera się podstawowe parametry monitora jak wielkość i rodzaj matrycy, rodzaj podstawy itp. Chcę to zrobić bez przeładowania strony. No i mam stworzone odpowiednie selecty które przybierają odpowiednie wartości pobrane z bazy danych. Do tego miejsca nie było problemów. Następnie chciałem zrobić coś takiego, że po wyborze z pierwszego selecta rozmiaru matrycy np. 17" w divie pokazują się wszystkie monitory 17", po wyborze rodzaju matrycy chciałem zrobić tak, że z listy już wyświetlonej znikną modele, które mają inny typ matrycy niż ten wybrany a tymczasem kasuje mi się lista z monitorami 17" a na jej miejsce wskakują monitory z wybranym typem matrycy.

Całość skryptu jest rozbita na następujące pliki:

index.php
  1. <html>
  2. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  3. <body>
  4.  
  5.  
  6.  
  7. <script type="text/javascript">
  8.  
  9. function strona(plik) {
  10.  
  11.  var xml = null;
  12.  var wynik = document.getElementById("wynik");
  13.  wynik.innerHTML = "Trwa ładowanie strony";
  14.  
  15.    if (window.XMLHttpRequest) xml = new XMLHttpRequest();
  16.    else if (window.ActiveXObject) xml = new ActiveXObject("Microsoft.XMLHTTP");
  17.  
  18.  if (xml) {
  19.    xml.onreadystatechange = function() {
  20.      if (xml.readyState==4) {
  21.          wynik.innerHTML = xml.responseText;
  22.      }
  23.    }
  24.    xml.open("GET", plik+".htm", true);
  25.    xml.send(null);
  26.  }
  27.  return false;
  28. }
  29.  
  30. </script>
  31. <script src="select.js"></script>
  32.  
  33. <form>
  34. <table border="1" width="800px">
  35.    <tr><td width="200">Wielkość matrycy :</td>
  36.        <td><select id="wielkosc" name="wielkosc" onchange="select(this.value)">
  37.            <option>wybierz</option>
  38. <?php
  39. include('connect.php');    
  40. $query = mysql_query("SELECT DISTINCT id_parametru, parametr FROM parametry WHERE id_kategorii = 1 ORDER BY parametr ASC;");
  41. $i = 1;
  42. while($wynik = mysql_fetch_array($query)){
  43.        $wielkosc = $wynik['parametr'];
  44.        $id = $wynik['id_parametru'];
  45.        
  46.        echo "\n\t\t\t<option value=$id onclick=\"return strona('s$i')\">$wielkosc</option>";
  47.        $i++;
  48.        }
  49. ?>        
  50.  
  51.        </select></td>
  52.        <td rowspan="6" width="200"> <div id="wynik"></div></td>    
  53.    </tr>
  54.    
  55.    <tr><td width="200">Rodzaj matrycy :</td>
  56.        <td><select name="rodzaj" onchange="select(this.value)">
  57.            <option>wybierz</option>
  58. <?php
  59. $query1 = mysql_query("SELECT DISTINCT id_parametru, parametr FROM parametry WHERE id_kategorii = 2 ORDER BY parametr ASC;");
  60. $i = 1;
  61. while($wynik = mysql_fetch_array($query1)){
  62.        $rodzaj_matrycy = $wynik['parametr'];
  63.        $id = $wynik['id_parametru'];
  64.        
  65.        echo "\n\t\t\t<option value=$id onclick=\"return strona('r$i')\">$rodzaj_matrycy</option>";
  66.        $i++;
  67.        }
  68. ?>            
  69.    
  70.        </select></td>    
  71.    </tr>
  72.    
  73.    <tr><td width="200">Rozdzielczość :</td>
  74.        <td><select name="rozdzielczosc" onchange="select(this.value)">
  75.            <option>wybierz</option>
  76. <?php
  77. $query2 = mysql_query("SELECT DISTINCT id_parametru, parametr FROM parametry WHERE id_kategorii = 3 ORDER BY parametr ASC;");
  78. $i = 1;
  79. while($wynik = mysql_fetch_array($query2)){
  80.        $rozdzielczosc = $wynik['parametr'];
  81.        $id = $wynik['id_parametru'];
  82.        
  83.        echo "\n\t\t\t<option value=$id onclick=\"return strona('p$i')\">$rozdzielczosc</option>";
  84.        $i++;
  85.        }
  86. ?>        
  87.    
  88.        </select></td>    
  89.    </tr>
  90.    
  91.    <tr><td width="200">Rodzaj podstawy :</td>
  92.        <td><select name="podstawa" onchange="select(this.value)">
  93.            <option>wybierz</option>
  94. <?php
  95. $query3 = mysql_query("SELECT DISTINCT id_parametru, parametr FROM parametry WHERE id_kategorii = 38 ORDER BY parametr ASC;");
  96. $i = 1;
  97. while($wynik = mysql_fetch_array($query3)){
  98.        $podstawa = $wynik['parametr'];
  99.        $id = $wynik['id_parametru'];
  100.        
  101.        echo "\n\t\t\t<option value=$id onclick=\"return strona('o$i')\">$podstawa</option>";
  102.        $i++;
  103.        }
  104. ?>                
  105.        
  106.        </select></td>    
  107.    </tr>
  108.    
  109.    <tr><td width="200">Wejścia sygnałowe :</td>
  110.        <td><select name="wejscia" onchange="select(this.value)">
  111.            <option>wybierz</option>
  112. <?php
  113. $query4 = mysql_query("SELECT DISTINCT id_parametru, parametr FROM parametry WHERE id_kategorii = 18 ORDER BY parametr ASC;");
  114. $i = 1;
  115. while($wynik = mysql_fetch_array($query4)){
  116.        $wejscia = $wynik['parametr'];
  117.        $id = $wynik['id_parametru'];
  118.        
  119.        echo "\n\t\t\t<option value=$id onclick=\"return strona('n$i')\">$wejscia</option>";
  120.        $i++;
  121.        }
  122. ?>
  123.        
  124.        </select></td>    
  125.    </tr>
  126.    
  127.    <tr><td width="200">Kolor obudowy :</td>
  128.        <td><select name="kolor" onchange="select(this.value)">
  129.            <option>wybierz</option>
  130. <?php
  131. $query5 = mysql_query("SELECT DISTINCT id_parametru, parametr FROM parametry WHERE id_kategorii = 30 ORDER BY parametr ASC;");
  132. $i = 1;
  133. while($wynik = mysql_fetch_array($query5)){
  134.        $kolor = $wynik['parametr'];
  135.        $id = $wynik['id_parametru'];
  136.        
  137.        echo "\n\t\t\t<option value=$id onclick=\"return strona('m$i')\">$kolor</option>";
  138.        $i++;
  139.        }
  140. ?>        
  141.        </select></td>    
  142.    </tr>
  143.    
  144. </table>
  145. </form>    
  146. <p>
  147. <div id="txtHint"><b></b></div>
  148. </p>
  149. </body>
  150. </html>



select.js

  1. <?php
  2. var xmlHttp;
  3.  
  4. function select(str)
  5. {
  6.    
  7. xmlHttp=GetXmlHttpObject();
  8. if (xmlHttp==null)
  9. {
  10. alert ("Problem przegladarki");
  11. return;
  12. }
  13. var url="get.php";
  14. url=url+"?q="+str;
  15. url=url+"&sid="+Math.random();
  16. xmlHttp.onreadystatechange=stateChanged;
  17. xmlHttp.open("GET",url,true);
  18. xmlHttp.send(null);
  19. }
  20.  
  21.  
  22. function stateChanged()
  23. {
  24. if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  25. {
  26. document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
  27. }
  28. }
  29.  
  30. function GetXmlHttpObject()
  31. {
  32. var xmlHttp=null;
  33. try
  34. {
  35. // Firefox, Opera 8.0+, Safari
  36. xmlHttp=new XMLHttpRequest();
  37. }
  38. catch (e)
  39. {
  40. //Internet Explorer
  41. try
  42.  {
  43.  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  44.  }
  45. catch (e)
  46.  {
  47.  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  48.  }
  49. }
  50. return xmlHttp;
  51. }
  52. ?>



get.php
  1. <?php
  2. $q=$_GET["q"];
  3. //$q= 2;
  4. require_once('connect.php');
  5.  
  6. $query = mysql_query("SELECT nazwa FROM monitor, parametry, parametry_monitora WHERE monitor.id_monitora = parametry_monitora.id_monitora AND parametry_monitora.id_parametru = parametry.id_parametru AND parametry.id_parametru = '".$q."' ORDER BY nazwa ASC");
  7.  
  8. if(mysql_num_rows($query) != null){
  9. while($row = mysql_fetch_array($query))
  10. {
  11. echo $row['nazwa']."<br>";
  12. }
  13. }    else echo "Nie ma monitorow spelniajacych Twoje kryteria. Please try again ;-)";
  14. ?>



Ktoś pomoże ?
erix
Cytat
że z listy już wyświetlonej znikną modele, które mają inny typ matrycy niż ten wybrany a tymczasem kasuje mi się lista z monitorami 17" a na jej miejsce wskakują monitory z wybranym typem matrycy.

Można to zrobić na dwa sposoby:
  1. wyciągasz wszystko do tablicy i za pomocą JS filtrujesz potrzebne rekordy
  2. przy każdym onchange wysyłasz żądanie do serwera w celu pobrania nowych danych

Był kiedyś podobny temat o zależnych listach rozwijanych, i to nawet kilka. winksmiley.jpg
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.