Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JS/php] Prośba o pomoc, dwa selecty
kropla
post 29.09.2006, 12:35:09
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 16.12.2005

Ostrzeżenie: (10%)
X----


Witam

Próbuje zrobić dwa pola select, w którym zawartość drugiego zmienia się w zależności od pierwszego. Skorzystałem z pomocy tego forum i przerobiłem skrypcik na moje potrzeby który działa. Chciałbym dokonać w nim jednak pewnej (pewnie niewielkiej zmiany) ale nie wiem jak. Otóż
Zawartość dla każdego pola select pobierana jest z dwóch różnych tabel (zrzut dwóch tabel poniżej). W jednej tabeli jest kategoria główna, w drugiej podkategoria dla danych kategori. Czasami jednak kategoria główna nie ma żadnej podkategorii i tu potrzebuję pomocy bo chciałbym zrobić tak żeby w takim przypadku drugi select poprostu zniknął, a jeśłi będzie jakaś podkategoria to żeby się pojawił (tylko że pojawienie spowinno byc razem z tabelką w html) bo docelowo będę chciał zrobić żeby wstawiał mi się wiersz. w tabeli. Jeśli pomoglibyście mi różnież przy optymalizacji kodu to też byłbym wdzięczny bo raczej chyba nie jest on za bardzo wydajny.
Dziękuję za jakiekolwiek próby pomocy.
Pozdrawiam

zrzut tabel

  1. CREATE TABLE `kategoria_programow` (
  2. `id` int(4) NOT NULL AUTO_INCREMENT,
  3. `Nazwa` varchar(50) NOT NULL DEFAULT '',
  4. PRIMARY KEY (`id`)
  5. ) TYPE=MyISAM AUTO_INCREMENT=18 ;
  6.  
  7. --
  8. -- Zrzut danych tabeli `kategoria_programow`
  9. --
  10.  
  11. INSERT INTO `kategoria_programow` VALUES (9, 'Internet');
  12. INSERT INTO `kategoria_programow` VALUES (8, 'Dodatki');
  13. INSERT INTO `kategoria_programow` VALUES (7, 'Bezpieczeństwo');
  14. INSERT INTO `kategoria_programow` VALUES (6, 'Antywirusy');
  15. INSERT INTO `kategoria_programow` VALUES (10, 'Kompresory plików');
  16. INSERT INTO `kategoria_programow` VALUES (11, 'Menedżery plików');
  17. INSERT INTO `kategoria_programow` VALUES (12, 'Multimedia');
  18. INSERT INTO `kategoria_programow` VALUES (13, 'Programy biurowe');
  19. INSERT INTO `kategoria_programow` VALUES (14, 'Programy CD&DVD');
  20. INSERT INTO `kategoria_programow` VALUES (15, 'Sterowniki');
  21. INSERT INTO `kategoria_programow` VALUES (16, 'System');
  22. INSERT INTO `kategoria_programow` VALUES (17, 'Webmaster');
  23.  
  24. -- --------------------------------------------------------
  25.  
  26. --
  27. -- Struktura tabeli dla `kategoria_programowii`
  28. --
  29.  
  30. CREATE TABLE `kategoria_programowii` (
  31. `id` int(4) NOT NULL AUTO_INCREMENT,
  32. `Nazwa_glowna` varchar(70) NOT NULL DEFAULT '',
  33. `Podkategoria` varchar(70) NOT NULL DEFAULT 'BRAK',
  34. PRIMARY KEY (`id`)
  35. ) TYPE=MyISAM AUTO_INCREMENT=102 ;
  36.  
  37. --
  38. -- Zrzut danych tabeli `kategoria_programowii`
  39. --
  40.  
  41. INSERT INTO `kategoria_programowii` VALUES (1, 'Bezpieczeństwo', 'Anty-spam');
  42. INSERT INTO `kategoria_programowii` VALUES (2, 'Bezpieczeństwo', 'Any-spyware');
  43. INSERT INTO `kategoria_programowii` VALUES (3, 'Bezpieczeństwo', 'Firewalle');
  44. INSERT INTO `kategoria_programowii` VALUES (4, 'Bezpieczeństwo', 'Generatory haseł');
  45. INSERT INTO `kategoria_programowii` VALUES (5, 'Bezpieczeństwo', 'Inne programy związane z bezpieczeństwem');
  46. INSERT INTO `kategoria_programowii` VALUES (6, 'Bezpieczeństwo', 'Odzyskiwanie haseł');
  47. INSERT INTO `kategoria_programowii` VALUES (7, 'Bezpieczeństwo', 'Szyfrowanie danych');
  48. INSERT INTO `kategoria_programowii` VALUES (8, 'Bezpieczeństwo', 'Zarządzanie hasłami');
  49. INSERT INTO `kategoria_programowii` VALUES (9, 'Dodatki', 'SimLock');
  50. INSERT INTO `kategoria_programowii` VALUES (10, 'Dodatki', 'Spolszczenia');
  51. INSERT INTO `kategoria_programowii` VALUES (21, 'Internet', 'Komunikatory głosowe');
  52. INSERT INTO `kategoria_programowii` VALUES (22, 'Internet', 'Komunikatory internetowe');
  53. INSERT INTO `kategoria_programowii` VALUES (26, 'Internet', 'Obsługa kamer internetowych');
  54. INSERT INTO `kategoria_programowii` VALUES (27, 'Internet', 'Odtwarzacze stacji radiowych i TV');
  55. INSERT INTO `kategoria_programowii` VALUES (33, 'Internet', 'Serwery FTP');
  56. INSERT INTO `kategoria_programowii` VALUES (34, 'Internet', 'Serwery poczty elektronicznej');
  57. INSERT INTO `kategoria_programowii` VALUES (35, 'Internet', 'Serwery WWW');
  58. INSERT INTO `kategoria_programowii` VALUES (36, 'Internet', 'Telefonia internetowa');
  59. INSERT INTO `kategoria_programowii` VALUES (37, 'Internet', 'Zdalny dostęp');
  60. INSERT INTO `kategoria_programowii` VALUES (42, 'Multimedia', 'Konwertery');
  61. INSERT INTO `kategoria_programowii` VALUES (43, 'Multimedia', 'Narzędzia DVD');
  62. INSERT INTO `kategoria_programowii` VALUES (44, 'Multimedia', 'Narzędzie do nagrywania dĽwięku');
  63. INSERT INTO `kategoria_programowii` VALUES (45, 'Multimedia', 'Obróbka audio');
  64. INSERT INTO `kategoria_programowii` VALUES (46, 'Multimedia', 'Obróbka grafiki');
  65. INSERT INTO `kategoria_programowii` VALUES (47, 'Multimedia', 'Obróbka video');
  66. INSERT INTO `kategoria_programowii` VALUES (48, 'Multimedia', 'Odtwarzacze plików audio i video');
  67. INSERT INTO `kategoria_programowii` VALUES (49, 'Multimedia', 'Odtwarzacze plików muzycznych');
  68. INSERT INTO `kategoria_programowii` VALUES (50, 'Multimedia', 'Odtwarzacze płyt DVD');
  69. INSERT INTO `kategoria_programowii` VALUES (51, 'Multimedia', 'Pokazy slajdów');
  70. INSERT INTO `kategoria_programowii` VALUES (52, 'Multimedia', 'Przeglądarki graficzne');
  71. INSERT INTO `kategoria_programowii` VALUES (53, 'Multimedia', 'Rippery');
  72. INSERT INTO `kategoria_programowii` VALUES (54, 'Multimedia', 'Rozszerzenia multimedialne');
  73. INSERT INTO `kategoria_programowii` VALUES (55, 'Multimedia', 'Zrzutery ekranów');
  74. INSERT INTO `kategoria_programowii` VALUES (56, 'Programy biurowe', 'Arkusze kalkulacyjne');
  75. INSERT INTO `kategoria_programowii` VALUES (57, 'Programy biurowe', 'Edytory tekstów');
  76. INSERT INTO `kategoria_programowii` VALUES (58, 'Programy biurowe', 'Finsanse');
  77. INSERT INTO `kategoria_programowii` VALUES (59, 'Programy biurowe', 'Inne programy biurowe');
  78. INSERT INTO `kategoria_programowii` VALUES (60, 'Programy biurowe', 'Pakiety biurowe');
  79. INSERT INTO `kategoria_programowii` VALUES (61, 'Programy biurowe', 'PDF');
  80. INSERT INTO `kategoria_programowii` VALUES (62, 'Programy CD&DVD', 'Inne programy CD&DVD');
  81. INSERT INTO `kategoria_programowii` VALUES (63, 'Programy CD&DVD', 'Narzęzia do wypalania płyt CD oraz DVD');
  82. INSERT INTO `kategoria_programowii` VALUES (64, 'Programy CD&DVD', 'Wirtualne napędy');
  83. INSERT INTO `kategoria_programowii` VALUES (65, 'Programy CD&DVD', 'Zarządanie obrazami płyt');
  84. INSERT INTO `kategoria_programowii` VALUES (66, 'Sterowniki', 'Karty graficzne');
  85. INSERT INTO `kategoria_programowii` VALUES (67, 'Sterowniki', 'Karty muzyczne');
  86. INSERT INTO `kategoria_programowii` VALUES (68, 'Sterowniki', 'Karty sieciowe');
  87. INSERT INTO `kategoria_programowii` VALUES (69, 'Sterowniki', 'Płyty główne');
  88. INSERT INTO `kategoria_programowii` VALUES (70, 'System', 'Archiwizacja (backup) danych');
  89. INSERT INTO `kategoria_programowii` VALUES (71, 'System', 'Czyszczenie rejestru');
  90. INSERT INTO `kategoria_programowii` VALUES (72, 'System', 'Diagnostyka');
  91. INSERT INTO `kategoria_programowii` VALUES (73, 'System', 'Edytory tekstu');
  92. INSERT INTO `kategoria_programowii` VALUES (74, 'System', 'Inne programy systemowe');
  93. INSERT INTO `kategoria_programowii` VALUES (75, 'System', 'Kalendarze');


mój skrypt

[php]
$url = 'localhost';
$login = '';
$pass = '';
$baza ='';
$polaczenie=mysql_connect($url,$login,$pass);
$wybor=mysql_select_db($baza);
$table_name2='kategoria_programowii';
$table_name='kategoria_programow';
?>

<form name="doublecombo">
<p><select name="example" size="1" onChange="redirect(this.options.selectedIndex)">
<?php
$sql_I = "SELECT * FROM $table_name";
$result = @mysql_query($sql_I);
echo "<option selected value=''>wybierz</option>";
while ($row3 = mysql_fetch_array($result)) {
$wartosc_1=$row3['Nazwa'];
echo "<option value='$wartosc_1'>$wartosc_1</option>";
}

?>
</select><br><br>
<select name="stage2" size="1">

</select><br>

<script>
<!--

var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group[i]=new Array()
group[0][0]=new Option("","BRAK")
<?php

$sql_I = "SELECT * FROM $table_name";
$result = mysql_query($sql_I);
$licznik1=1;

while ($row3 = mysql_fetch_array($result)) {
$wartosc_1=$row3['Nazwa'];
$licznik2=0;

$sql_III = "SELECT * FROM $table_name2 where Nazwa_glowna like '$wartosc_1'";
$result4 = mysql_query($sql_III);
$sql_IIV = "SELECT count(*)ilosc FROM $table_name2 where Nazwa_glowna like '$wartosc_1'";
$resultIIV = mysql_query($sql_IIV);
$row41=mysql_fetch_array($resultIIV);
if ($row41['ilosc'])
{
while ($row41 = mysql_fetch_array($result4))
{
if ($licznik2==0)
{
?>
group[<?php echo $licznik1;?>][<?php echo $licznik2;?>]=new Option("Wybierz")
<?php
$licznik2++;
}
else
{
$wartosci3=$row41['Podkategoria'];
?>
group[<?php echo $licznik1;?>][<?php echo $licznik2;?>]=new Option(" <?php echo $wartosci3;?>")
<?php
$licznik2++;
}
}
}
else
{
$wartosci3="Brak Podkategorii";
?>
group[<?php echo $licznik1;?>][<?php echo $licznik2;?>]=new Option(" <?php echo $wartosci3;?>")
<?php
$licznik2++;
}
$licznik1++;
}
?>
var temp=document.doublecombo.stage2

function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options[i]=new Option(group[x][i].text,group[x][i].value)
}
temp.options[0].selected=true
}

function go(){
location=temp.options[temp.selectedIndex].value
}
//-->
</script>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
artur81
post 29.09.2006, 12:43:24
Post #2





Grupa: Zarejestrowani
Postów: 252
Pomógł: 2
Dołączył: 4.12.2004
Skąd: Skierniewice

Ostrzeżenie: (10%)
X----


Cytat(kropla @ 29.09.2006, 11:35:09 ) *
Czasami jednak kategoria główna nie ma żadnej podkategorii i tu potrzebuję pomocy bo chciałbym zrobić tak żeby w takim przypadku drugi select poprostu zniknął

W pliku php do którego wysyłasz żądanie, sprawdź ile rekordów masz zwrócnych po zapytaniu w którym pobierasz podkategorie, jeśli jest zero to wyczyść pole w które wstawiasz dane wynikowe za pomocą innerHTMl.


--------------------
Go to the top of the page
+Quote Post
kropla
post 29.09.2006, 12:47:02
Post #3





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 16.12.2005

Ostrzeżenie: (10%)
X----


ale szczerze powiedziawszy ja się nie znam na JS a zmiana podkategorii w select odbywa się bez przładowania strony za pomocą JS
Go to the top of the page
+Quote Post
artur81
post 29.09.2006, 13:09:34
Post #4





Grupa: Zarejestrowani
Postów: 252
Pomógł: 2
Dołączył: 4.12.2004
Skąd: Skierniewice

Ostrzeżenie: (10%)
X----


No i to właśnie tak będzie działać. Masz dwie tabele w bazie danych, jedno co mi się rzuciło w oczy to nie podobaja mi się sposób w jaki wrzucasz tam dane. Wg mnie lepiej by było

--table_kategorie--

id_kategorii
nazwa

-- table_podkategorie --
id_podkategorii
id_kategorii (czyli kategorii nadrzędnej)
nazwa

teraz tak, do jednego selecta wrzucasz wynik zapytania
  1. SELECT * FROM kategorie;

Na tej podstawie robisz kod
  1. <select name="lista1" onchange="zmien(this.value);">
  2. tutaj w pętli php generujesz listę nazw kategorii

teraz należy napisać funkcję java script
  1. function zmien(id)
  2. {
  3. var adres = "pobierz2.php?id="+id;
  4. advAJAX.get({
  5. url: adres,
  6. onLoading:function(obj) {document.getElementById("lista2").innerHTML='<img src="loading.gif" />'; },
  7. onSuccess:function(obj) { document.getElementById("lista2").innerHTML=obj.responseText; },
  8. onError:function(obj) {alert(obj.responseText); }
  9. });
  10. }

Jej zadaniem jest wysłanie do pliku pobierz2.php numeru kategorii którą wybierzerz z listy.
Jest to fragment kody który prezentowałem w tym wątku , przejrzyj sobie może ci się nieco rozjaśni.
W pliku pobierz2 php pobierasz id które przesłałeś za pomocą funkcji JS np. tak
  1. <?php
  2. $odebrane_id= $_GET['id'];
  3. ?>

i Dajesz kolejne zapytanie:
  1. SELECT * FROM podkategorie WHERE id_kategorii='$odebrane_id';

W ten sposób otzrymujesz kolejną porcję danych, wrzucasz do drugiego selecta i to wszystko.
W wątku który podałem wyżej opisałem dokładnie co i jak. chociaż na nieco innym przyładzie.


--------------------
Go to the top of the page
+Quote Post
kropla
post 29.09.2006, 13:43:01
Post #5





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 16.12.2005

Ostrzeżenie: (10%)
X----


czyli co? z tego co rozumiem zawartość drugiego selecta generowana jest przez zewnętrzny plik pobierz2.php który dołączony zpstaje w głównej stronie ?
Go to the top of the page
+Quote Post
artur81
post 29.09.2006, 13:53:27
Post #6





Grupa: Zarejestrowani
Postów: 252
Pomógł: 2
Dołączył: 4.12.2004
Skąd: Skierniewice

Ostrzeżenie: (10%)
X----


nie do końca, pliku nie dołączasz tylko wysyłasz do niego jakby żadanie o pewne dane, w tym przypadku są to podkategorie kategorii którą wybierzesz z listy. Wynik jak i całe żądanie działa na ajaxie i dlatego nie ma przeładowania strony. W samym JS nie dobierzesz się do bazy danych bo ona działa na serwerze a js w przeglądarce.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:15