Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka samochodów - mysql
Forum PHP.pl > Forum > PHP
Papuga
Witam,

mam kłopot. Mój mało kreatywny mózg nie może znaleźć sposobu na pewien problem.

Otóż. Mam formularz składający się z 6 pól.
1. marka samochodu
2. model
3. wersja
4. nadwozie
5. liczba drzwi
6. silnik

wysyłam je metodą post.
W PHP łączę się z bazą i mam zapytanie, które wyświetla mi wyniki.

Nie wiem co wpisać w zapytaniu SQL zaraz po WHERE. Użytkownik może wypełnić każde pole, a może i żadne.
Jak rozwiązać ten problem, że gdy użytkownik wpisze tylko model to mu będzie sortowało przez model, etc.

Proszę o pilną pomoc.

Z góry dziękuję za wszystkie odpowiedzi.

Pozdrawiam,
Paweł.
cycofiasz
Zależnie od tego jakie pola wypełni, doklejasz kolejne warunki w zapytaniu. Warunki łączysz poprzez AND i to tyle.

Np. SELECT * FROM tabela WHERE nadwozie = $nadwozie AND silnik = 1600
Papuga
To nie takie łatwe.
Tak już robiłem, ale wyskakuje błąd zapytania... sad.gif
cycofiasz
No to widocznie robisz to źle bo sam sposób jest poprawny.
Kedan
Tak z pamięci:
  1. $query = 'SELECT ... FROM ....';
  2. if(!empty($_POST['model'])) {
  3. $query .= ' WHERE `model`='.$_POST['model'];
  4. }
  5. $query .= ' AND ';
  6. // etc...


albo w pętli:
  1. $first = TRUE;
  2. if(!empty($_POST)) {
  3. foreach($_POST as $name=>$value) {
  4. if(!$first) $query .= ' AND ';
  5. $query .= ' WHERE '.$name.'='.$value;
  6. $first = FALSE;
  7. }
  8. }
Papuga
Możesz rzucić okiem na ten fragment kodu?

Kod
$marka = $_POST['marka']";
$model = $_POST['model']";
$wersja = $_POST['wersja'];
$nadwozie = $_POST['nadwozie'];
$drzwi = $_POST['drzwi'];
$silnik = $_POST['silnik'];

$zapytanie = @mysql_query("SELECT * FROM cars WHERE marka='$marka' AND model='$model' ") or die ("Błąd w zapytaniu.");


Jeżeli marka jest tylko uzupełniona a model nie wyskakuje błąd...
Kedan
Musisz sprawdzać czy dane pole $_POST jest w ogóle zdefiniowane. Jak nie jest to w zapytaniu wyjdzie przecież WHERE model=NULL
  1. if(!empty($_POST)) {
  2. $zapytanie = 'SELECT * FROM cars';
  3. if(!empty($_POST['marka'])) {
  4. $zapytanie .= ' WHERE marka='.$_POST['marka'];
  5. }
  6. if(!empty($_POST['model'])) {
  7. $zapytanie .= ' AND WHERE model='.$_POST['model'];
  8. }
  9. // ....i tak dalej z pozostałymi polami _POST
  10. $result = @mysql_query($zapytanie) or die('Error');
  11. }

Pokombinuj. Zwracaj uwagę na spacje w zapytaniu.
Papuga
Już jestem bliżej. Trochę mi oświeciłeś drogę, ale co jeśli nie będzie podana marka?
Zapytanie będzie wyglądało: SELECT * FROM cars AND WHERE ...

Jak to obejść?
melkorm
  1. if(!empty($_POST)) {
  2. $where = array();
  3. if(isset($_POST['marka']) && !empty($_POST['marka'])) {
  4. $where[] = ' marka = '.$_POST['marka'];
  5. }
  6. if(isset($_POST['mdoel']) && !empty($_POST['model'])) {
  7. $where[] = ' model = '.$_POST['mdoel'];
  8. }
  9. // ....i tak dalej z pozostałymi polami _POST
  10. if(!empty($where) {
  11. $zapytanie = 'SELECT * FROM cars WHERE '.implode(' AND ',$where);
  12. }
  13. else
  14. {
  15. $zapytanie = 'SELECT * FROM cars';
  16. }
  17. $result = mysql_query($zapytanie) or die('Error'); // wystrzegamy się małpek w ZOO
  18. }


P.S. Filtrację danych zostawiam Tobie.
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.