• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

AJAX, PHP dynamiczne selekty, kategorie

Object Storage Arubacloud
0 głosów
163 wizyt
pytanie zadane 21 listopada 2017 w JavaScript przez mi-20 Stary wyjadacz (13,190 p.)

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 :)

1 odpowiedź

+1 głos
odpowiedź 21 listopada 2017 przez Fenix Nałogowiec (26,750 p.)
wybrane 21 listopada 2017 przez mi-20
 
Najlepsza
Musisz zamienić wartość value w option, na taką jaką odpowiada nazwie.

Co złego jest w tym że dodaje samo id? Jak masz skonstruowaną bazę danych?

Podobne pytania

0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 29 stycznia 2018 w C i C++ przez Nokata Początkujący (300 p.)
0 głosów
2 odpowiedzi 1,686 wizyt
0 głosów
0 odpowiedzi 97 wizyt

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...