Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Paramaetry wyszukiwania, jak przesłać?
Forum PHP.pl > Forum > PHP
neosatan
Witam,

Piszę obecnie system z ogłoszeniami (tak to nazwijmy), są ogłoszenia i jest potrzeba przeglądania stron z ogłoszeniami + filtrowania wyników na podstawie kilku parametrów. Zastanawiam się jak połączyć obie rzeczy całość, tak by było wszystko ładnie i pięknie.

Filtrowanie na razie działa na zasadzie kilku parametrów w formularzy i przesyłane jest za pomocą POST do serwera gdzie kod się wykonuje i wypluwa odpowiednie wyniki. Stronicowanie, wiadomo operacje z LIMIT przy kolejce zapytań i działa. Natomiast mam tutaj problem przy przechodzeniu na następne strony. Nie mam dobrego pomysłu jak załączyć parametry filtracji do następnych stron.

Z początku pomyślałem o tym by przenieść formularz z parametrami na metodę GET, lecz jak dobrze pamiętam jest problem z polskimi literkami przy przesyłaniu takiego formularza. To jest problem, który nie wiem jak dokładnie rozwiązać.

Drugi pomysł jest by przyciski kolejnych stron formularz submitowały z dodatkowym parametrem w postaci strony.

Nie wiem które podejście jest lepsze? Jakieś porady? Może jest inne lepsze wyjście?
erix
Cytat
Z początku pomyślałem o tym by przenieść formularz z parametrami na metodę GET, lecz jak dobrze pamiętam jest problem z polskimi literkami przy przesyłaniu takiego formularza. To jest problem, który nie wiem jak dokładnie rozwiązać.

Uhm, jaki problem?

Jedyny problem przy GET, to limit 1024 znaków na długość zapytania.
Crozin
Cytat
Jedyny problem przy GET, to limit 1024 znaków na długość zapytania.
O ile się nie mylę, nie ma żadnego formalnego limitu, co najwyżej oprogramowanie (czy to po stronie serwera czy klienta) może nakładać jakieś własne, ale te z reguły są znacznie, znacznie wyższe. Chyba jedynie stare wersje IE miały ograniczenie rzędu 2048 znaków dla całego URL-a.
lukesh
Nie wydaje mi się, żeby był jakiś problem z polskimi znakami, wszystko powinno działać dobrze.

Nie ma żadnych limitów związanych przesyłaniem danych metodą GET. Administratorzy mogą oczywiście ustawić limit na serwerze, ale wątpię, żeby jakikolwiek duży, średni a nawet mały dostawca się o to pokusił. Gdyby tak było, to by się nam nagle internet obrócił o 180 stopni. Są w sieci miliony serwisów, które przesyłają duże ilości danych za pomocą GET, ponieważ tylko tak można przesyłać asynchronicznie dane pomiędzy różnymi domenami.

Na Twoim miejscu skorzystałbym własnie z GET. Ludzie czasami przesyłają sobie linkami ogłoszenia albo wyniki wyszukiwania i tylko GET wygeneruje Ci taki link, który można skopiować i komuś wysłać.

Jeśli Ci nie zależy na linkach - skorzystaj z sesji. To też dobre rozwiązanie. Dane będą przechowywane na serwerze i łatwo dostępne przez skrypt.
erix
Cytat
Jeśli Ci nie zależy na linkach - skorzystaj z sesji. To też dobre rozwiązanie. Dane będą przechowywane na serwerze i łatwo dostępne przez skrypt.

Zrób kilka osobnych wyszukiwań w tym samym czasie.

No chyba że jakiś SearchID.

Cytat
Chyba jedynie stare wersje IE miały ograniczenie rzędu 2048 znaków dla całego URL-a.

Racja. Nie wiem, czemu mi się 1024 zakodowało; chyba właśnie ze względu na typowe konfiguracje webserwerów. W wiki piszą, że 2083 dla IE, ale to jakiegoś starego. [;
k_@_m_i_l
Jeśli się tak bardzo boisz tych polskich znaków, to zawsze możesz po wysłaniu formularza zapisać kryteria wyszukiwania do bazy, a w paginacji przekazywać id rekordu z zapisanymi kryteriami.
Zobacz sobie przykładowo na peb.pl.
neosatan
Zapisywanie do bazy danych parametrów wyszukiwania? Jakoś średnio mi się to widzi. Już poprawiałem kilka serwisów co to zbyt intensywnie korzystały z bazy danych, wiec wolę unikać takich rozwiązań. Jedynym odstępstwem jest sesja do bazy danych.

Z tym GET i polskimi literkami to jest tak, że korzystając z hostingu na ovh natknąłem się na ciekawy efekt. Otóż polskie literki nie były dobrze przekazywane. Przepraszam jednak za brak odpowiedniego przypadku, ponieważ już nie mam dostępu do serwerów OVH, a nie pamiętam na czym błąd polegał.

Chyba skorzystam z zapisywaniu w linku całości, ponieważ te linki całkiem kuszące są. Co prawda klient nie upomina się o taką możliwość, ale całkiem fajna funkcjonalność. Nawet po późniejszym podpieciu fb to może się przydać (choć wątpię w to lekko).

Jak to w końcu jest z tymi limitami w GET? Bo nawet pisząc strony, które przekazują sobie dane asynchronicznie to nigdy nie wykryłem, by był jakiś limit, a pamiętam, że przez GET nawet szła cała skrzynka odbiorcza użytkownika, wiec 1024, czy 2047 znaków na pewno przekraczało.

PS. okrągła liczba postów: 64 smile.gif
lukesh
Cytat(neosatan @ 20.04.2012, 20:57:13 ) *
Jak to w końcu jest z tymi limitami w GET? Bo nawet pisząc strony, które przekazują sobie dane asynchronicznie to nigdy nie wykryłem, by był jakiś limit, a pamiętam, że przez GET nawet szła cała skrzynka odbiorcza użytkownika, wiec 1024, czy 2047 znaków na pewno przekraczało.


Nie ma limitów.

Specyfikacja HTTP:
The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html

Jednak w przypadku IE, limit wynosi 2083 znaki:
http://support.microsoft.com/kb/q208427/

Inne przeglądarki bez problemu radzą sobie z nieograniczoną liczbą znaków:
http://www.boutell.com/newfaq/misc/urllength.html
neosatan
To ciekawe. Choć IE 9 niby już jest pozbawiony tego limitu. Muszę to przetestować, ponieważ przy IE raczej mało testów wykonuje z względu na raczej niską popularność tej przeglądarki.

Pięknie. IIS obsługuje 16 384 znaków, natomiast IE obsługuje 2 083 znaków. Muszę powiedzieć, że po prostu cudownie to zaprojektowali. Z drugiej strony jestem ciekaw powodów takich limitów. Na zdrowy rozsądek kwestia zmiany typu jednej zmiennej, a w rzeczywistości to pewnie od groma zmian w kodzie.
Crozin
2000 to na prawdę sporo znaków, ciężko byłoby Ci przekroczyć nawet ten limit długości URL-a.
neosatan
Oczywiście. Tu tego nie neguje. Bo ile mogę znaków mieć na całe parametry wyszukiwania? 200? 300? 500 może się zbierze, to nie jest jakiś super wielkie wyszukiwanie.
lukesh
Pamiętaj tylko, że jeśli wybierzesz jakąś metodę, która wspomagana jest przez pliki cookie, to musisz pytać użytkowników Twojej strony (strony Twojego klienta) o to, czy wyrażają zgodę na przechowywanie plików cookie na swoim dysku. W przeciwnym razie Ty (lub Twój klient), zgodnie z nowymi przepisami UE, narazicie się na karę do 500 tys. euro.
neosatan
Żartujsz. Tego nie wiedziałem, zazwyczaj sprawa regulaminów mi odpada, ale niezwłocznie poinformuje o tym klientów.
lukesh
Cytat(neosatan @ 21.04.2012, 16:43:12 ) *
Żartujsz. Tego nie wiedziałem, zazwyczaj sprawa regulaminów mi odpada, ale niezwłocznie poinformuje o tym klientów.


Nie chciałbym robić niepotrzebnego zamieszania, ale... W zeszłym roku w maju została uchwalona w UE dyrektywa, która mówi:

Artykuł 2 ust. 5 pkt. 3.
Państwa członkowskie zapewniają, aby przechowywanie informacji lub uzyskanie dostępu do informacji już przechowywanych w urządzeniu końcowym abonenta lub użytkownika było dozwolone wyłącznie pod warunkiem, że dany abonent lub użytkownik wyraził zgodę zgodnie z dyrektywą 95/46/WE po otrzymaniu jasnych i wyczerpujących informacji, między innymi o celach przetwarzania.


Nie wiem do końca, w jaki sposób wygląda sytuacja w Polsce. Ja sam prowadzę firmę w UK i ostatnio zrobiło się o tym głośno, bo dyrektywa ma obowiązywać już od 26 maja. W artykułach było napisane, że w całej UE, jednak nie wiem do końca, jak to jest z tym i czy w Polsce też od 26 maja, czy później - po prostu nie wiem. Ale prędzej czy później to prawo musi zacząć obowiązywać we wszystkich krajach wspólnoty.

Na stronach brytyjskich już pojawiają się okienka pytające o zgodę na przechowywanie plików cookie (patrz np. http://www.bt.com/ - w prawym dolnym rogu jest takie okienko). Information Commissioner's Office, czyli odpowiednik polskiego GIODO, opublikowało raport, z którego wynika, że po wprowadzeniu na ich stronie pytania o pliki cookie, ruch zmalał o 90%.

Nie wiem, jak sytuacja będzie wyglądać dokładnie w Polsce, ale myślę, że warto mieć to na uwadze i przynajmniej starać się nie korzystać z plików cookie tam, gdzie są one zbędne.
neosatan
Ok. Jednak chciałbym wyjaśnić sprawy techniczne. Pliki cookie są przechowywane za każdym razem jak bezpośrednio takowe żądania wyślemy, oraz gdy ustawimy session_start() w php. czyż nie? Jeżeli tak to podejrzewam, że spora część serwisów internetowych będzie musiała takie informacje umieścić na swoich stronach, co będzie powodowało lekką degradację, oraz wiązanie rąk programistom.
lukesh
Cytat(neosatan @ 21.04.2012, 21:34:20 ) *
Pliki cookie są przechowywane za każdym razem jak bezpośrednio takowe żądania wyślemy, oraz gdy ustawimy session_start() w php. czyż nie?


Dokładnie.

BTW. Z tego co widzę z newsów, to w Polsce NA RAZIE to jeszcze nie będzie obowiązywać. Jedynie Dania, Estonia i UK zdążyły dostosować swoje prawodawstwo na czas. Mimo wszystko - inne kraje też muszę dostosować swoje prawo do tej dyrektywy UE (dyrektywa 2002/58/EC), dlatego, myślę, warto wiedzieć o tym wcześniej.
neosatan
Tak się zastanawiam... odnośnie tego nowego zapisu. Jak można wykonać system logowania? Obecnie znaczna większość portali przy których pracuje odpala session_start choćby po to, by sprawdzić czy jest user zalogowany za pomocą zmiennych sesyjnych.
Pilsener
Problemem nie jest limit długości znaków w GET, lecz ich praktyczne wykorzystanie. Po to przecież coś wstawiamy do GET, żeby można było do cioci Basi napisać "patrz Ciociu, znalazłem fajne przepisy na ciasto malinowe: http://fajne_ciasta.xyz/szukaj?id=1234". Oczywiście można do tego dodać jakiś krótki seo-string i wyświetlać nawet gotowe linki z wynikami wyszukiwania, promując naszą wyszukiwarkę - jest dodatkowy content. I tak najczęściej prowadzimy jakieś statystyki jakich infomacji user szuka więc co nam zależy? Obciążenie bazy będzie żadne, bo jeden insert przy szukaniu i prosty select wtedy, jeśli ktoś kliknie w taki link - bo dla szukającego przechowamy info w jego sesji lub ciachu.
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.