Chciałem zrobić coś w stylu dwupoziomowych kategorii na stronie, uzyskałem coś takiego:
index.php
<select id="select1" name="gender">
<option value="-1">Wybierz kategorię</option>
<option value="k">Nieruchomości</option>
<option value="m">Motoryzacja</option>
<option value="e">Elektronika</option>
<option value="j">Praca</option>
<option value="s">Usługi i firmy</option>
<option value="w">Strony WWW</option>
<option value="p">Programowanie</option>
<option value="a">Rolnictwo</option>
<option value="n">Zwierzęta</option>
<option value="g">Grafika</option>
<option value="r">Rozrywka</option>
<option value="f">Moda</option>
<option value="c">Dla dzieci</option>
<option value="sz">Sport i Hobby</option>
<option value="-1">Inne ...</option>
</select>
<select id="select2" disabled name="personNames">
<option value="-1">---</option>
</select>
script.js
var $select1 = $('#select1');
var $select2 = $('#select2');
$select1.on({
'change' : function() {
var selectVal = $(this).find('option:selected').val(); //pobieramy wartość wybranego selekta
if (selectVal != -1) { //jeżeli jest inna niż -1 (czyli jeżeli został wybrany model)
$.ajax({
type: "POST",
url: "category.php",
dataType : 'json',
data: {
gender : selectVal
},
success : function(json) {
$select2.prop('disabled', 0); //aktywujemy 2 selekt
$select2.empty(); //czyścimy go
$.each(json, function(i, ob) {
$select2.append('<option value="'+ob.value+'">'+ob.name+'</option>');
});
//ustawiamy jako wybrany pierwszy option w selekcie 2
$select2.find('option').eq(0).prop('selected', 1);
},
error: function() {
console.warn('wystąpił błąd');
}
})
} else {
$select2.empty();
$select2.prop('disabled', 1);
}
}
});
$select1.val(-1);
$select2.prop('disabled', 1);
category.php
<?php
$gender = $_POST['gender'];
$names = Array();
$names['m'] = Array();
$names['m'][0] = Array('name'=>'Samochody osobowe', 'value'=>'1');
$names['m'][1] = Array('name'=>'Przyczepy, Pojazdy użytkowe', 'value'=>'2');
$names['m'][2] = Array('name'=>'Opony i Felgi', 'value'=>'3');
$names['m'][3] = Array('name'=>'Pojazdy rolnicze', 'value'=>'4');
$names['m'][4] = Array('name'=>'Motocykle i skutery', 'value'=>'5');
$names['m'][5] = Array('name'=>'Części i akcesoria', 'value'=>'6');
$names['m'][6] = Array('name'=>'Samochody ciężarowe', 'value'=>'7');
$names['m'][7] = Array('name'=>'Pozostałe ...', 'value'=>'8');
$names['k'] = Array();
$names['k'][0] = Array('name'=>'Mieszkania', 'value'=>'1');
$names['k'][1] = Array('name'=>'Biura i Lokale', 'value'=>'2');
$names['k'][2] = Array('name'=>'Stancje', 'value'=>'3');
$names['k'][3] = Array('name'=>'Domy', 'value'=>'4');
$names['k'][4] = Array('name'=>'Hale i Magazyny', 'value'=>'5');
$names['k'][5] = Array('name'=>'Działki', 'value'=>'6');
$names['k'][6] = Array('name'=>'Noclegi', 'value'=>'7');
$names['k'][7] = Array('name'=>'Pozostałe ...', 'value'=>'8');
$names['e'] = Array();
$names['e'][0] = Array('name'=>'Telefony komórkowe', 'value'=>'1');
$names['e'][1] = Array('name'=>'Tablety', 'value'=>'2');
$names['e'][2] = Array('name'=>'Fotografia', 'value'=>'3');
$names['e'][3] = Array('name'=>'Komputery', 'value'=>'4');
$names['e'][4] = Array('name'=>'Konsole', 'value'=>'5');
$names['e'][5] = Array('name'=>'Sprzęt audio', 'value'=>'6');
$names['e'][6] = Array('name'=>'Pozostałe ...', 'value'=>'7');
$names['j'] = Array();
$names['j'][0] = Array('name'=>'Zlecę pracę', 'value'=>'1');
$names['j'][1] = Array('name'=>'Przyjmę pracę', 'value'=>'2');
$names['j'][2] = Array('name'=>'Inne ...', 'value'=>'3');
$names['s'] = Array();
$names['s'][0] = Array('name'=>'Usługi', 'value'=>'1');
$names['s'][1] = Array('name'=>'Współpraca biznesowa', 'value'=>'2');
$names['s'][2] = Array('name'=>'Inne ...', 'value'=>'3');
$names['w'] = Array();
$names['w'][0] = Array('name'=>'Zlecę', 'value'=>'1');
$names['w'][1] = Array('name'=>'Wykonam', 'value'=>'2');
$names['w'][2] = Array('name'=>'Pozycjonowanie', 'value'=>'3');
$names['w'][3] = Array('name'=>'Hosting i domeny', 'value'=>'4');
$names['w'][4] = Array('name'=>'Inne ...', 'value'=>'5');
$names['p'] = Array();
$names['p'][0] = Array('name'=>'Programwanie webowe', 'value'=>'1');
$names['p'][1] = Array('name'=>'Progrmowanie obiektowe', 'value'=>'2');
$names['p'][2] = Array('name'=>'Programowanie sterowników', 'value'=>'3');
$names['p'][3] = Array('name'=>'Współpraca', 'value'=>'4');
$names['p'][4] = Array('name'=>'Inne ...', 'value'=>'5');
$names['a'] = Array();
$names['a'][0] = Array('name'=>'Ciągniki rolnicze', 'value'=>'1');
$names['a'][1] = Array('name'=>'Maszyny rolnicze', 'value'=>'2');
$names['a'][2] = Array('name'=>'Giełda rolnicza', 'value'=>'3');
$names['a'][3] = Array('name'=>'Opony rolnicze', 'value'=>'4');
$names['a'][4] = Array('name'=>'Ryneczek (produkty spożywcze)', 'value'=>'5');
$names['a'][5] = Array('name'=>'Przyczepy', 'value'=>'6');
$names['a'][6] = Array('name'=>'Produkty rolne', 'value'=>'7');
$names['a'][7] = Array('name'=>'Pozostałe ...', 'value'=>'8');
$names['n'] = Array();
$names['n'][0] = Array('name'=>'Psy', 'value'=>'1');
$names['n'][1] = Array('name'=>'Koty', 'value'=>'2');
$names['n'][2] = Array('name'=>'Gryzonie i króliki', 'value'=>'3');
$names['n'][3] = Array('name'=>'Ptaki', 'value'=>'4');
$names['n'][4] = Array('name'=>'Ryby i zwierzęta wodne', 'value'=>'5');
$names['n'][5] = Array('name'=>'Gady', 'value'=>'6');
$names['n'][6] = Array('name'=>'Zwierzęta egzotyczne', 'value'=>'7');
$names['n'][7] = Array('name'=>'Akcesoria', 'value'=>'8');
$names['n'][8] = Array('name'=>'Pozostałe ...', 'value'=>'9');
$names['g'] = Array();
$names['g'][0] = Array('name'=>'Grafika komputerowa', 'value'=>'1');
$names['g'][1] = Array('name'=>'Obrazy', 'value'=>'2');
$names['g'][2] = Array('name'=>'Sztuka', 'value'=>'3');
$names['g'][3] = Array('name'=>'Pozostałę ...', 'value'=>'4');
$names['r'] = Array();
$names['r'][0] = Array('name'=>'Gry komputerowe', 'value'=>'1');
$names['r'][1] = Array('name'=>'Gry na konsole', 'value'=>'2');
$names['r'][2] = Array('name'=>'Muzyka', 'value'=>'3');
$names['r'][3] = Array('name'=>'Filmy', 'value'=>'4');
$names['r'][4] = Array('name'=>'Koncerty', 'value'=>'5');
$names['r'][5] = Array('name'=>'Książki', 'value'=>'6');
$names['r'][6] = Array('name'=>'Pozostałe ...', 'value'=>'7');
$names['f'] = Array();
$names['f'][0] = Array('name'=>'Ubrania', 'value'=>'1');
$names['f'][1] = Array('name'=>'Buty', 'value'=>'2');
$names['f'][2] = Array('name'=>'Bielizna', 'value'=>'3');
$names['f'][3] = Array('name'=>'Biżuteria', 'value'=>'4');
$names['f'][4] = Array('name'=>'Dodatki', 'value'=>'5');
$names['f'][5] = Array('name'=>'Torebki', 'value'=>'6');
$names['f'][6] = Array('name'=>'Zegarki', 'value'=>'7');
$names['f'][7] = Array('name'=>'Kosmetyki i perfumy', 'value'=>'8');
$names['f'][8] = Array('name'=>'Pozostałe ...', 'value'=>'9');
$names['c'] = Array();
$names['c'][0] = Array('name'=>'Ubranka', 'value'=>'1');
$names['c'][1] = Array('name'=>'Zabawki', 'value'=>'2');
$names['c'][2] = Array('name'=>'Wózki', 'value'=>'3');
$names['c'][3] = Array('name'=>'Buciki', 'value'=>'4');
$names['c'][4] = Array('name'=>'Foteliki / Nosidełka', 'value'=>'5');
$names['c'][5] = Array('name'=>'Meble dla dzieci', 'value'=>'6');
$names['c'][6] = Array('name'=>'Opiekunki / Nianie', 'value'=>'7');
$names['c'][7] = Array('name'=>'Pozostałe ...', 'value'=>'8');
$names['sz'] = Array();
$names['sz'][0] = Array('name'=>'Fitnes', 'value'=>'1');
$names['sz'][1] = Array('name'=>'Turystyka', 'value'=>'2');
$names['sz'][2] = Array('name'=>'Odzież sportowa', 'value'=>'3');
$names['sz'][3] = Array('name'=>'Akcesoria', 'value'=>'4');
$names['sz'][4] = Array('name'=>'Sporty zimowe', 'value'=>'5');
$names['sz'][5] = Array('name'=>'Obuwie sportowe', 'value'=>'6');
$names['sz'][6] = Array('name'=>'Rowery', 'value'=>'7');
$names['sz'][7] = Array('name'=>'Wędkarstwo', 'value'=>'8');
$names['sz'][8] = Array('name'=>'Sporty wodne', 'value'=>'9');
$names['sz'][9] = Array('name'=>'Pozostałe ...', 'value'=>'10');
echo json_encode($names[$gender]); ?>
Nazwy kategorii pobrałem przykładowe z jakiejś strony więc są zupełnie przypadkowe, ale to nieważne.
Fajnie to działa, kategorie się zmieniają i są od siebie zależne. Problem pojawia się jednak przy próbie dodania ich do bazy, oczywiście wszystko się dodaje jednak w przypadku pierwszego selekta do bazy trafia wartość z value, np. "e" a z drugiego wartości typu "1","2" etc. Da się to jakoś poprawić żeby do bazy dodawały się całe nazwy czy cały skrypt jest do wywalenia i trzeba to zrobić zupełnie inaczej?
Dzięki :)