Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]md5 i zapytanie wyszukujące
Cromwell
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


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?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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...
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@thek a co ty mnie tak przeciąłeś spacją ? (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A tak mi się wcięła spacja (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg) Drugi raz takiego cudaka jednak nie zrobię (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Cromwell
post
Post #6





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


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ę (IMG:style_emoticons/default/smile.gif)

A co do hashowania - przepraszam, że nie przejrzałem forum, tak tylko dodatkowo tutaj zapytałem.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Baza musi być MySQL
Nie mowiono tu o zmianie bazy a o zmianie silnika na MyISAM (IMG:style_emoticons/default/winksmiley.jpg) Byc moze nie musisz zmieniac silnika na MYIsam jesli juz go uzywasz zamiast np. InnoDB
Go to the top of the page
+Quote Post
Cromwell
post
Post #8





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


Teraz rozumiem (IMG:style_emoticons/default/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).

Ten post edytował Cromwell 27.11.2009, 13:48:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.09.2025 - 21:34