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

AJAX, PHP dynamiczne selekty, kategorie

VPS Starter Arubacloud
0 głosów
157 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ź 233 wizyt
pytanie zadane 29 stycznia 2018 w C i C++ przez Nokata Początkujący (300 p.)
0 głosów
2 odpowiedzi 1,660 wizyt
0 głosów
0 odpowiedzi 93 wizyt

92,452 zapytań

141,262 odpowiedzi

319,080 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...