Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka PHP MySQL prezentująca wyniki w postaci tabeli na www
Forum PHP.pl > Forum > Przedszkole
Adolf
Witam wszystkich dobrej woli.
Potrzebuję następującego rozwiązania: Mam tabelę w bazie danych o kolumnach:
Id - float
opis - varchar
ilość - float
jednostka - char
wymiar wewnętrzny - decimal
wymiar zewnętrzny - decimal
szerokość - decimal
Waga - tekst

Na stronie www chciałbym wyszukiwarkę według kolumn:
opis - kilka wyrazów i oznaczeń (do 120 znaków)
wymiar wewnętrzny - liczba maksymalnie 3 cyfrowa z 2 miejscami po przecinku ale zdarzają się w tejkolumnie zera.
wymiar zewnętrzny - tak jak wyżej
szerokość - tak jak wyżej

Użytkownik wpisuje coś do pola "opis" LUB/i "wymiar wewnętrzny" LUB/i "wymiar zewnętrzny" LUB/ i "szerokość".
Jest opcja do zaznaczenia, która po jej wybraniu wyświetli tylko rekordy, które mają "ilość" większą od zera.
Na wyjściu, poniżej pól do wyszukiwania, wyświetli się komunikat że znaleziono N wyników i tabelka o kolumnach:

LP I OPIS I ILOŚĆ I Wymiar wew. I Wymiar zew. I Szerokość I Waga I

Lp - to nie Id - Lp to ponumerowane od 1 do N - znalezione rekordy z tabeli.

Mam nadzieję, że wszystko opisałem jasno. Napotkał ktoś podobnego gotowca? Zdaję sobie sprawę, że dla osoby siedzącej w temacie nie jest szczególnym problemem napisać coś takiego. Jeśli jest ktoś tak uprzejmy, że pomoże to będę wdzięczny, lub umówimy się na jakąś kasę i też będę wdzięczny.

W pisaniu postów nie jestem jakoś wprawny, więc proszę o wyrozumiałość w przypadku jakiś gaf.
aniolekx
może Datatables?
Adolf
Dzięki, ale to nie to.

Na podstawie znalezionych w necie przykładów wymodziłem coś takiego:



Tutaj mam działające połączenie z bazą danych.



  1. $wh = array(); //inicjalizujemy tablicę z warunkami
  2.  
  3. if (!empty($_POST['opis'])) //jeśli podano opis
  4. $wh[] = "opis = '".$_POST["opis"]."' ";
  5.  
  6. if (!empty($_POST['ww'])) //jeśli podano ww
  7. $wh[] = "ww = '".$_POST["ww"]."' ";
  8.  
  9. if (!empty($_POST['wz'])) //jeśli podano wz
  10. $wh[] = "wz = '".$_POST["wz"]."' ";
  11.  
  12. if (!empty($_POST['B'])) //jeśli podano B
  13. $wh[] = "B = '".$_POST["B"]."' ";
  14. else
  15.  
  16.  
  17. $where = "where opis like '%".$_POST["opis"]."%' AND ww like '%".$_POST["ww"]."%' AND wz like '%".$_POST["wz"]."%' AND B like '%".$_POST["B"]."%'";
  18. $where = '';
  19.  
  20. //a teraz tworzymy nasze glowne zapytanie i łączymy je z naszymi warunkami
  21. //print_r($where);
  22. $sql = 'select * from zasoby '.$where;
  23. //print_r($sql);
  24.  
  25. $wynik = mysql_query($sql);


...dalej mam wyrzucenie wyników na www.


Problem jest taki że zapytanie zwraca mi cała tabele, cokolwiek bym nie wpisał do formularza.

Może ktoś pomoże poprawić zapytanie?

kolumny w tabeli to:
ID
opis
ilosc
jednostka
ww
wz
B
Waga

Pola formularza:
opis
ww
wz
B
Pyton_000
Wywal ten długi warunek $where i zapytanie takie:

  1. $sql = 'select * from zasoby';
  2.  
  3. if(!empty($wh))
  4. {
  5. $sql .= ' WHERE '. implode(' AND ', $wh);
  6. }
  7.  
  8. var_dump($sql);
Adolf
Prawie działa!!! Dzięki za krok do przodu!.
Mój kod wygląda teraz tak:

  1. $wh = array(); //inicjalizujemy tablicę z warunkami
  2.  
  3. if (!empty($_POST['opis'])) //jeśli podano opis
  4. $wh[] = "opis = '".$_POST["opis"]."' ";
  5.  
  6. if (!empty($_POST['ww'])) //jeśli podano ww
  7. $wh[] = "ww = '".$_POST["ww"]."' ";
  8.  
  9. if (!empty($_POST['wz'])) //jeśli wz
  10. $wh[] = "wz = '".$_POST["wz"]."' ";
  11.  
  12. if (!empty($_POST['B'])) //jeśli podano B
  13. $wh[] = "B = '".$_POST["B"]."' ";
  14. else
  15. $sql = 'select * from zasoby';
  16. if(!empty($wh))
  17. {
  18. $sql .= ' WHERE '. implode(' AND ', $wh);
  19. }
  20. var_dump(sql);
  21.  
  22. $wynik = mysql_query($sql);
  23.  
  24. echo "<table cellpadding=\"4\" border=2>";
  25. echo "Wyniki wyszukiwania:<br><br/>";
  26. echo "<tr>";
  27. echo "<td> ID </td>";
  28. echo "<td> Opis </td>";
  29. echo "<td> Ilość </td>";
  30. echo "<td> Jednostka </td>";
  31. echo "<td> Wymiar wewn. d </td>";
  32. echo "<td> Wymiar zewn. D </td>";
  33. echo "<td> Szerokość B </td>";
  34. echo "<td> Waga [KG] </td>";
  35. echo "<tr>";
  36. while ($row = mysql_fetch_array ($wynik) )
  37. {
  38. echo "<tr>";
  39. echo "<td>{$row['id']}</td>";
  40. echo "<td>{$row['opis']}</td>";
  41. echo "<td>{$row['ilosc']}</td>";
  42. echo "<td>{$row['jednostka']}</td>";
  43. echo "<td>{$row['ww']}</td>";
  44. echo "<td>{$row['wz']}</td>";
  45. echo "<td>{$row['B']}</td>";
  46. echo "<td>{$row['waga']}</td>";
  47. echo "<tr>";
  48. }
  49. echo "</table>";
  50.  
  51.  
  52. ?>


Świetnie działa wyszukiwanie według ww i wz, zarówno niezależnie jak i wspólnie.

Nie działa natomiast wyszukiwanie po opis i B.
sad.gif

Nie działa wyszukiwanie po "opis" i "B" prawdopodobnie dlatego, że są to kolumny varchar i w warunku wyszukiwania jest potrzebna definicja z LIKE%%. Jak to umieścić w kodzie?

Chyba, że się mylę...
Proszę o pomoc.
Pyton_000
o tu:
Kod
$wh[] = "opis = '".$_POST["opis"]."' ";
Adolf
Cytat(Pyton_000 @ 17.12.2014, 12:39:31 ) *
o tu:
Kod
$wh[] = "opis = '".$_POST["opis"]."' ";



Ok, ale jak poprawić te linijkę kodu, żeby działało?
Liczę na pomoc. Jak zapewne zauważyłeś programistą nie jestem i raczej nie będę. Problemy tego typu pojawiają mi się raz na kilka lat, więc nauka na dłuższa metę nic mi nie daje, bo i tak wszystko się zmienia szybciej. Poszukuje rozwiązania, żeby zadziałało.
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.