Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SELECT z wielu argumentów z POST'a
Forum PHP.pl > Forum > Bazy danych > MySQL
Wazowski
Cześć,
Mam następujący problem.
Piszę wyszukiwarkę na stronie, która szuka po polach podanych w formularzu. Problem tkwi w tym, że jeśli ktoś nie wypełni danego pola w formularzu, wówczas zapytanie nie zwraca z bazy żadnych wyników. Dla przykładu:
Zapytanie:
  1. SELECT * FROM nieruchomosci WHERE typ = '$typ' AND rodzaj_oferty LIKE '%$rodzaj%' AND powierzchnia >= '$powierzchnia_min' AND powierzchnia <='$powierzchnia_max'

W takim wypadku, jeśli ktoś nie poda np. powierzchni maksymalnej, select nie wyciągnie rekordów.
Jak mogę obejść, to, że jeśli ktoś nie poda powierzchni, select wciąż wyszuka rekordy na pozostałych polach ?

Dzięki
Prometheus
Witaj, ja bym zrobił tak:

SELECT * FROM nieruchomosci WHERE typ = '$typ' AND rodzaj_oferty LIKE '%$rodzaj%' AND (powierzchnia >= '$powierzchnia_min' OR powierzchnia >= 0) AND (powierzchnia <='$powierzchnia_max' OR powierzchnia >= 0)

Lub lepiej:

  1.  
  2. $or = $_POST['powierzchnia_min];
  3. $or2 = $_POST['powierzchnia_max];
  4.  
  5. if($or >0 && $or2 > 0){
  6. $ox = ' AND powierzchnia >= '$powierzchnia_min' AND powierzchnia <= '$powierzchnia_max' ';
  7. }
  8. if($or > 0 && empty($or2) ){
  9. $ox = AND powierzchnia >= '$powierzchnia_min';
  10. }
  11. if(empty($or) && $or2 > 0){
  12. $ox = ' AND powierzchnia <= '$powierzchnia_max' ';
  13. }
  14. else{
  15. $ox = '';
  16. }
  17.  
  18. SELECT * FROM nieruchomosci WHERE typ = '$typ' AND rodzaj_oferty LIKE '%$rodzaj%' '".$ox."' '


Pozdrawiam
Wazowski
Cześć, dzięki za odpowiedź.
Z tego co widzę to działa to tylko w jedną stronę. W przypadku, gdy nie wypełnie powierzchnia_max, rekordy, dalej nie są wyciągane.
Prometheus
Zrobiłem edycję sprawdź ten drugi sposób wink.gif
Wazowski
Okej, czyli chcesz modyfikować SELECT w zależności, czy ktoś wypełnij pole wink.gif
Faktycznie, jest to sposób.
Dzięki smile.gif
Prometheus
Zrobiłem jeszcze małą edycję, poprawną tym razem - myślę że jest to najlepszy sposób.

Pozdrawiam
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-2024 Invision Power Services, Inc.