Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP][MySQL]Filtrowanie wartości pobranych z bazy danych
artkow00
post 28.11.2013, 13:35:25
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

Ostrzeżenie: (0%)
-----


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ź
Go to the top of the page
+Quote Post
SmokAnalog
post 28.11.2013, 13:43:21
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
artkow00
post 28.11.2013, 14:14:05
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SmokAnalog
post 28.11.2013, 16:20:32
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ę?
Go to the top of the page
+Quote Post
artkow00
post 28.11.2013, 16:29:45
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
SmokAnalog
post 28.11.2013, 16:47:29
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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


Ten post edytował SmokAnalog 28.11.2013, 16:48:01
Go to the top of the page
+Quote Post
artkow00
post 28.11.2013, 17:06:33
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
SmokAnalog
post 28.11.2013, 17:11:10
Post #8





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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

Ten post edytował SmokAnalog 28.11.2013, 17:11:38
Go to the top of the page
+Quote Post
artkow00
post 28.11.2013, 17:59:15
Post #9





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

Ostrzeżenie: (0%)
-----


No nie ukrywam, że mi pomogłeś smile.gif
Dzięki, miłego wieczoru
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: 25.05.2025 - 07:04