![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Mam problem z napisaniem zaawansowanej wyszukiwarki. Formularz wygląda tak:
Mianowicie wszystko komplikuje się dla mnie, ponieważ użytkownik może wybrać pole "Wszystkie". I co wtedy zrobić? Sprawa byłaby prostsza bez tego czyli jedno zapytanie gdzie coś=coś i szukaj. Ale może wybrać np. miasto warszawa a dalej już "Wszystkie", "Wszystkie", "Wszystkie" etc. Jak to wyszukać? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 290 Pomógł: 48 Dołączył: 11.05.2008 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Wystarczą odpowiednie warunki - nic skomplikowanego
![]() Jeśli użytkownik wybrał opcję "Wszystkie" - nie dodajemy nic do zapytania. W przeciwnym wypadku dodajemy te "coś=coś" ![]() Przykładowo (wiadomo, musisz zadbać o odpowiednie filtrowanie danych itd.):
PS: Pamiętaj, żeby nadać atrybut "value" dla znaczników option. Ten post edytował Tajgeer 9.08.2013, 16:57:20 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Dodam jeszcze, że w przypadku ceny możesz użyć BETWEEN i w przypadku wszystkie dać zapytanie typu
SELECT ... BETWEEN 0 AND 1000000 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Czyli mniej więcej coś takiego (przykład)
? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 290 Pomógł: 48 Dołączył: 11.05.2008 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie możesz wstawić do zapytania warunku z pustym parametrem. Wiesz jak wyglądałoby zapytanie, gdyby ktoś wybrał wszystkie?
Gwarantuję, że to nie zadziała, a chyba chodzi o to, aby działało ![]() Ten post edytował Tajgeer 9.08.2013, 17:05:28 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Edytytowałeś post jak akurat pisałem i nie zauważyłem
![]() Więc dla każdego selecta muszę stworzyć warunek i przypisać mu odpowiednią wartość? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 290 Pomógł: 48 Dołączył: 11.05.2008 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
W skrócie? Tak.
Na więcej podpowiedzi już nie licz. ![]() Ten post edytował Tajgeer 9.08.2013, 17:11:21 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem
![]() Kolejne pytanko na inny temat. Mam <form action="index.php?page=szukaj" method="get"> Gdy klikam submit otrzymuję jednak inny adres. Mianowicie: BieżącaStrona.php?miasto=Wszystkie&typ_ofert=Wszystkie etc. Czemu nie jest index.php?page=szukaj&miasto=Wszystkie&typ_ofert=Wszystkie ? Korzystam z includowania:
Ten post edytował TursoN 9.08.2013, 17:15:46 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 290 Pomógł: 48 Dołączył: 11.05.2008 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj zmienić link w parametrze action
![]() Dodatkowo, możesz usunąć z tamtego miejsca "?page=szukaj" i skorzystać z ukrytego inputa, żeby przekazać ten parametr. Ten post edytował Tajgeer 9.08.2013, 17:22:04 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Action jest dobre, bo chcę by szukało na podstronie ?page=szukaj
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 290 Pomógł: 48 Dołączył: 11.05.2008 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Tak jak wspomniałem, action możesz ustawić na zwykłe "/index.php", czy po prostu na "/". Jeśli z użyciem ukrytego inputa przekażesz parametr "page" - wszystko będzie działać tak, jak należy.
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Możesz podać przykład kodu, bo jakoś nie za bardzo rozumiem?
Coś nie działa to wyszukiwanie :/
Raz działa raz nie, ale raczej nie. Wezmę typ oferty=sprzedaż => Brak wyników (choć istnieje) Wezmę typ oferty=wynajem => znajduje Wezmę Kraków, wynajem => You have an error in your SQL syntax (choć istnieje) Nie wiem jak zaradzić Ten post edytował TursoN 9.08.2013, 19:01:10 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Zauważ co dzieje się w warunkach.
Raz masz dobre zapytanie typu SELECT * FROM xx WHERE asd=asd a za chwilę możesz mieć SELECT * FROM xx WHERE asd=asd WHERE dsa=dsa WHERE sda=sda... Drugie już nie jest poprawne. Na szybko mógłbyś zliczać ile jest wybranych selectów różnych od "wszystkie", jeżeli więcej niż 1, to kolejne warunki dodajesz z AND czyli w tym przypadku miałbyś SELECT * FROM xx WHERE asd=asd AND dsa=dsa AND sda=sda Czaisz o co chodzi? Ten post edytował Szymciosek 9.08.2013, 21:27:11 |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Napisałem obliczanie GETów różnych od "wszystkie".
Nie wiem co dalej. Niby wystarczyłoby dopisać AND na początku albo końcu każdego $condition, ale nie wiadomo przecież, który z nich będzie w zapytaniu pierwszy albo ostatni... Ten post edytował TursoN 13.08.2013, 19:03:37 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze źle.
Nie będę podpowiadał za dużo, ale spróbuj najpierw zrobić na jednym polu, gdzie masz SELECT * FROM tableName WHERE columnName = selectValue to jest prostsza wersja. Teraz spróbuj do tego dodać żeby rozróżniał 2 warunki: Tutaj może być albo WHERE albo AND Wiesz na pewno, że przy wyborze pierwszego selecta, który jest różny od "wszystkie" dodajesz do warunki WHERE, w każdym kolejnym dodajesz już AND i AND itd... Przy dodawaniu AND musisz oczywiście sprawdzać czy poprzednie selecty są różne od "wszystkie", bo jeżeli masz wybrane "wszystkie", to wtedy do zapytania nie dodajesz nic i pobierasz wszystkie rekordy czyli: SELECT * FROM tableName Pisz, jeżeli jeszcze są jakieś niejasności, ja z ciekawości tego zadania sam zrobiłem taką wyszukiwarkę na podstawie danych: name, country, city, capital, employees Dodatkowo chcę do tego dodać możliwość dodawania kolejny pól, edycji istniejących oraz dodawanie nowych rekordów do bazy itd.... |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Rozkminiam nad tym bardzo długo i to chyba przekracza jak na razie moje logiczne myślenie.
Widzę wiele niejasności. $condition jest ciągiem, który zawiera dalszą część zapytania. W jaki sposób mam tam dodać AND |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Raz musisz dodać WHERE, a raz AND, musisz wymyślić tylko kiedy.
Z tego co wrzuciłeś, to jesteś już coraz bliżej poprawnego rozwiązania, ale popatrz na to spokojnie, zacznij od jednego selecta, później dodaj drugi. Warunek mniej więcej powinien wyglądać tak:
To jest zapytanie dla dwóch selectów. Na początku jest tworzone podstawowe zapytanie, które zwróci mi WSZYSTKIE DANE. W pierwszym warunku ($country) jest sprawdzane czy wartość selecta jest różna od ANY, jeżeli jest, to do $query dodaję, WHERE, analogicznie w drugą stronę, jest równe ANY - nie wchodzi do warunku i zapytanie zostaje w podstawowej formie. Drugi warunek sprawdza to samo dla $city, ale bierze pod uwagę jeszcze wartość z poprzedniego selecta. Jeżeli poprzedni był ANY, to znaczy, że nie zostało nic dodane i trzeba zacząć z WHERE, jeżeli był różny od ANY, to znaczy, że już jest coś wybrane i Ty musisz tylko dodać AND... |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Napisałem krótki przykład wg. Twojego kodu i dziwnie działa... Np. wybiorę łódź to nic nie ma a powinno, a jak wybiorę gdańsk to jest.
Przykładowo dla Łodzi jest zapytanie: SELECT * FROM ogloszenia WHERE miasto='łódź' No i czemu nie znajduje? ![]() To Łódź mimo krzaków... Jak zmienię w adresie $_GET["miasto"] łódź na Łódź to nagle znajduje, a dla krakowa nawet z małej litery
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 49 Dołączył: 12.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Pozdrawiam,
mlawnik Cytat(nospor) Jedzmy gówno.... miliony much nie może się przecież mylić |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Co do problemu z miastem Łódź to zaradziłem po prostu zmienijąc value w select tak, że zaczynają się z wielkiej litery.
Problem kolejny w zapytaniu: Kod SELECT * FROM ogloszenia WHERE typ_oferty='sprzedaż' Brak wyników. Powinno znaleźć 3 wyniki Ma to jakiś związek z ogonkami w bazie? Np. słowo "sprzedaż" w bazie wygląda tak: "SprzedaÅ" |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 12:13 |