Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]md5 i zapytanie wyszukujące
Forum PHP.pl > Forum > Przedszkole
Cromwell
Muszę stworzyć wyszukiwarkę, która będzie wyciągać z bazy danych określone rekordy.
Sama wyszukiwarka nie stanowi dla mnie problemu, zastanawiam się jedynie nad zapytaniem.
Chodzi o to, że pól, przy pomocy których można wyszukiwać jest 16, użytkownik może podać wartość w dowolnych polach.
I ważne, aby z bazy pobrać rekordy, które spełniają wszystkie warunki.

Zastanawiam się, jak to zrobić, nie tworząc wielkiego skryptu, najlepiej opierając się na jednym zapytaniu.
Wpadłem na pomysł, żeby najpierw przerobić dane, które użytkownik poda w wyszukiwarce, zamienić to w część zapytania (WHERE jeden="$jeden", dwa="$dwa" itd) i dopiero wtedy podstawić pod zapytanie.
Jednak zastanawiam się, czy nie ma prostszego rozwiązania.

Ma ktoś jakiś pomysł, albo spotkał się z tym już?


I przy okazji, tak się ostatnio zastanawiam czemu zazwyczaj nie stosuje się kodowania np. md5(md5($zmienna)), tylko różnych kombinacji. Co prawda obecnie nie stanowi problemu odczytanie prostych haseł w md5, jednak podwójne kodowanie powinno załatwić sprawę. Czyż nie?
nospor
ad1)
http://nospor.pl/wyszukiwarka-zapytanie-za...runkow-n31.html

ad2) Przeglądajcie od czasu do czasu przypięte tematy....
http://forum.php.pl/index.php?showtopic=44...t=0&start=0
thek
No spor... A może zmienić silnik bazy na myisam i pojechać z indexem full-text na wszystkie wymagane kolumny? Wiem, że baza trochę dostanie w plecy, ale kwestia czy wydajniejszy będzie taki index czy zwielokrotniony WHERE jest już dyskusyjna. Zwłaszcza jeśli w WHERE poleci LIKE...
nospor
@thek a co ty mnie tak przeciąłeś spacją ? winksmiley.jpg

to zalezy jak leży. Zależy od pól a konkretnie od ich typów. Przecież filtr może dotyczyć statusów (aktywny, nieaktywny), dat, inne. Zycze powodzenia z full-textem smile.gif
thek
A tak mi się wcięła spacja winksmiley.jpg Jakby co... Przepraszam. Co do wyszukiwania to odniosłem wrażenie, że tyczy to formularza gdzie wiele danych wyciągamy od usera jako input text. Stąd propozycja full-text searcha jako, IMHO, lepsze rozwiązanie ze względu na stopień trafności. Do checkboxów niby where może być, ale to zależy co się za nimi kryje, bo ja sam nieraz z nich "w tle" mam później serializowana tablicę, więc do bazy i tak idzie tekst, a nie flagi niskointowe. Dlatego wiem, że ostatecznie całość zależy od typów pól (co wspomniałeś) oraz ich ilości w formularzu. Ja już różne cuda wymyślałem w wyszukiwarkach. Jeden z moich bardziej porąbanych, to wyszukiwarka SEO-friendly, gdzie po wpisaniu w formularzu słów kluczowych byłeś przekierowywany na stronę wyników wyszukiwania z adresem seo... Znaczy wpisanie miasto, usluga przekierowywało Cię na plik search.php, który był już dynamicznym linkiem SEO postaci domena.php/miasto,id_miasta,typ,id_uslugi.html i dodatkowo też miał zmienne kryteria wyszukiwawcze powciskane w WHERE jak w Twoim przykładzie. Tak więc miał dynamiczną ilość zmiennych get co też musiało być przechwycone... I nawet to działało winksmiley.jpg Drugi raz takiego cudaka jednak nie zrobię tongue.gif
Cromwell
Baza musi być MySQL, gdyż tylko taka jest obsługiwana na serwerze, gdzie będzie skrypt, poza tym ma być wiele różnych danych, różnie zapisanych.

@nospor, wielkie dzięki za ten link. Zastanawiałem się nad warunkami, ale nie pomyślałem o tym, żeby zrobić tablicę smile.gif

A co do hashowania - przepraszam, że nie przejrzałem forum, tak tylko dodatkowo tutaj zapytałem.
nospor
Cytat
Baza musi być MySQL
Nie mowiono tu o zmianie bazy a o zmianie silnika na MyISAM winksmiley.jpg Byc moze nie musisz zmieniac silnika na MYIsam jesli juz go uzywasz zamiast np. InnoDB
Cromwell
Teraz rozumiem smile.gif

Skorzystałem z tego skryptu, który podał @nospor.
Poszczególne warunki wyglądają tak:
  1. if (!empty($_POST['id']))
  2. $wh[] = "lp = '$_POST[id]' ";


Muszę dodać możliwość korzystania z różnych operatorów. Chodzi o takie operatory, jak <, >, czy też <> (inny niż dany rekord).
Ogólnie potrafię sobie z tym poradzić, jednak problemem jest to, że pól po których można wyszukiwać jest ponad 40, a nie chcę tworzyć kodu, gdzie sprawdzałbym przy każdej wartości $_POST[], czy znajduje się jeden z określonych znaków.

Mógłby mnie ktoś naprowadzić na coś, co pozwoliłoby zautomatyzować taką funkcjonalność?
Że domyślnie jest po nazwie pola w bazie =, jednak jeśli poda się w wyszukiwanej frazie na początku <, wtedy = zamienia się na < i powstaje coś takiego:
  1. if (!empty($_POST['id']))
  2. $wh[] = "lp < '$_POST[id]' ";


Co ważne, zależy mi też na tym, aby w razie podania np. takiej frazy "17 ^ >19 ^ <>22", skrypt tworzył część warunku, wyglądającą tak: "id=17 OR id>19 AND id<>22" (czyli ma pokazać rekord 17, a także większe od 19, bez rekordu 22).
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.