Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP][MySQL]Filtrowanie wartości pobranych z bazy danych
Forum PHP.pl > Forum > Przedszkole
artkow00
Witam.

Szukam jakiegoś tutariala lub podpowiedzi.

Chcę pobrać z bazy danych wszystkie dane dotyczące usera tj np:

imie
nazwisko
wojewodztwo
miasto
zainteresowania

Jak już je pobiorę to w pętli while {} wyświetlę dane wszystkich userów jeden pod drugim w <div></div>

Szukam odpowiedzi jak filtrować te wyniki za pomocą checkboxów. Tzn mam po lewej stronie checkboxy np:

[ ] sport
[ ] muzyka
[ ] hodowla jeży
... itd

Po zaznaczeniu checkboxa przy sport wyświtli tylko tych, przy których napisane jest "sport" (wywołane z bazy).
Wiem jak to zrobić za pomocą
  1. if (isset($_POST['zainteresowanie_sport'])) { ... }

Ale takich warunków byłoby milion (oczywiście w przybliżeniu... tongue.gif)

Z pomocą na pewno przyjdzie JavaScript, być może JQuery, ale nie wiem gdzie szukać tutorialu jakiegoś przystępnego..
Dzieki za odpowiedź
SmokAnalog
Najzgrabniej byłoby to zrobić Ajaxem. Przyjemnie byłoby, gdyby lista odświeżała się bez przeładowywania całej strony.

Nie wiem jak wygląda Twoja wiedza z PHP/jQuery/Ajax, ale taka wyszukiwarka to nie jest aż tak banalna sprawa, choć ultratrudna też nie.

Działałoby to tak:
  1. Musiałbyś przy każdym kliknięciu w checkbox wysyłać Ajaxem zaznaczone checkboksy.
  2. Ajax wywoływałby skrypt PHP, który na podstawie danych o checkboksach wyciągnął z bazy odpowiednich użytkowników i wypluł np. w formacie JSON.
  3. JavaScript odebrałby te dane z powrotem i na ich podstawie wygenerował listę użytkowników.


Jednak sądząc po Twoim poście, nie masz wystarczających umiejętności, żeby to zrobić.
artkow00
Cytat(SmokAnalog @ 28.11.2013, 13:43:21 ) *
Jednak sądząc po Twoim poście, nie masz wystarczających umiejętności, żeby to zrobić.


Umiejętności mam wystarczające, żeby przefiltrować wyniki w php tylko to generuje ogromną ilość zapytań i zależności. Z ajaxem sobię poradzę, ale nie zależy mi specjalnie na tym, żeby mi się strona nie odświeżała...
Nie zadałem pytania "jak to zrobić, żeby się nie odświeżała strona" tylko jak to zrobić, żeby uprościć kod. Ajax prowdzi do tego, że i tam muszę te wszystkie zapytania napisać w zależności od wciśniętego checkboxa, także niestety Twoja podpowiedź nic nowego nie wniosła do tematu, który być może po prostu źle sformułowałem.

A może wiesz zatem (lub wiecie) jak filtrować po wyświetlonych słowach? Java na 100% może zrobić coś takiego, że po kliknięciu checkboxa dać display:none; dla wszystkich divów, które zawierają dane słowo (value przesłane z checkboxa)questionmark.gif

Szukam czegoś, co pomoże mi zbudować taki skrypt.
SmokAnalog
Chcesz to zrobić bez udziału serwera? Taki interfejs użytkownika działałby wspaniale, ale pod jednym warunkiem: że tych użytkowników nie będzie zbyt wielu. Przy kilkuset wynikach słabsze komputery mogą już się krztusić.

Jakie liczby użytkowników wchodzą u Ciebie w grę?
artkow00
Tego nie wiem, powiedz co jeśli będzie ich 10, co jeśli 100, a co jeśli 1000?
Zachłystnie się tylko podczas pobierania danych, a później to już poleci na JQuery - tak myślę. Z drugiej strony dane to po prosu pojedyncze słowa, mam podstrony, na których wywołuję na raz kilkaset wyników z bazy za pomocą while i wszystko dzieje się w ułamku sekundy (nie mam AlienWare tylko starego HP'ka Presario sprzed kilku lat tongue.gif).
Powiedzmy, że będzie 1000 użytkowników i ok. 15 danych do wyświetlenia dla każdego z paginacją po 20 na stronie. Jak Twoim zdaniem się to będzie przedstawiać?
SmokAnalog
Zachłyśnięcie niestety dotyczyć będzie nie samego wczytywania danych, ale właśnie operacji na drzewie. 1000 elementów to jest moim zdaniem nieco za dużo, żeby trzymać wszystkich lokalnie. Paginacja paginacją, ale zauważ, że filtrowanie musi odbywać się na wszystkich wynikach, również tych niewidocznych. Dla spokojniejszej głowy zrobiłbym to Ajaxem, a w drzewie na stronie trzymał tylko to, co pasuje do kryteriów wyszukiwania. Tym sposobem będziesz też spokojny, że system będzie nadal działał jak użytkowników będzie przybywać.

Czyli podsumowując potrzebowałbyś:
  1. Skryptu JavaScript (na jQuery), który przesyłałby zaznaczone checkboksy (plus numer podstrony) Ajaxem
  2. Skryptu PHP, który na podstawie tych danych pobrałby z bazy odpowiednich użytkowników, sformatował wynik w tablicy i wypluł go z json_encode
  3. Funkcji zwrotnej w JavaScript (jQuery), która otrzymałaby obiekt od skryptu PHP, "przeleciała go" (biggrin.gif) i wiersz po wierszu wygenerowałaby zgrabną tabelkę czy co tam sobie wymarzysz
artkow00
No ok, coś pomyślę. Mimo wszystko przeraża mnie fakt, że jak będę miał np. 5 checkboxsów to powstanie ponad 20 potencjalnych kombinacji i dla każdej trzeba dać inne zapytanie... Teraz pomnóż sobie razy np 4 - 5 fieldsetów po 5 checkboxów = ponad 100 zapytań w najlepszym wypadku!!! (o ile mi nie przyjdzie do głowy rozbudować forma...) facepalmxd.gif
SmokAnalog
To nie jest aż tak skomplikowane jak się wydaje, kolego. W składni MySQL jest takie fajne słówko kluczowe jak IN, na przykład:
  1. SELECT *
  2. FROM `uzytkownicy`
  3. WHERE `zainteresowania` IN ('hodowla jeży', 'jazda na jednorożcu', 'żucie hubby bubby')
  4. AND `wojewodztwo` IN ('wielkopolskie', 'małopolskie');


To oczywiście uproszczony przykład, bo takie rzeczy jak zainteresowania czy województwa będziesz pewnie trzymał w osobnej tabeli, ale to żaden problem. smile.gif

Mam nadzieję, że dodałem Ci trochę otuchy biggrin.gif
artkow00
No nie ukrywam, że mi pomogłeś smile.gif
Dzięki, miłego wieczoru
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.