Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyszukiwarka
Forum PHP.pl > Forum > Przedszkole
Xart
Witam nie wiem jak wykonać jedną z części mojego skryptu a mianowicie.
Mam tabele w bazie eventy i tam miasto i wojewodztwo i pare innych rzeczy ale mniejsza oto bo chodzi mi tylko o sam sposób.
Zakładamy, że mam pola do wyszukiwarki i przekazuje dane metodą GET i jest do wyboru miasto i wojewodztwo i po wciśnięciu szukaj na dole ma wyświetlić liste znalezionych wyników. I teraz chodzi mi czy da radę zrobić to na jednym zapytaniu tzn.

SELECT FROM ... WHERE miasto=$_GET['miasto'] AND wojewodztwo=$_GET['wojewodztwo'] i chodzi mi oto, że np ktoś poda tylko jeden parametr czyli np samo miasto to żeby skrypt szukał poprawnie. bo mógłbym zrobić to if'em i kilka zapytań że jeżeli dał samo miasto to szuka miasto, wojewodztwo szuka wojewodztwa a jak oba to 3 zapytanie.
Da się to zrobić na jednym ? Bo jak nie poda mi wojewodztwa to to zapytanie będzie wyglądało tak ..... AND wojewodztwo = '' a w bazie takiego wyniku nie znajdzie. Można dodać jakoś isstet czy coś ?
Pyton_000
nie, ifem dodajesz tylko warunek do zapytania, a nie całe zapytania
Xart
Mógłbyś podać przykład bo nigdy nie dawałem warunku w zapytaniu poza WHERE LIKE i tyle ;d
A może lepiej użyć LIKE ?

NP dam województwo i będzie to pole wyboru (select) i jak nie wybierze to będzie value="%" wieloznacznik i potem będę sprawdzał LIKE % będzie zawsze TRUE czyli tak jakby nie sprawdzało. Można tak ?
Turson
Cytat(Xart @ 1.05.2014, 22:29:30 ) *
NP dam województwo i będzie to pole wyboru (select) i jak nie wybierze to będzie value="%" wieloznacznik i potem będę sprawdzał LIKE % będzie zawsze TRUE czyli tak jakby nie sprawdzało. Można tak ?

Można
Xart
No i w związku z tym kolejny problem biggrin.gif
Jak mam date w formacie DD-MM-RRRR
to jak sprawdzać date od do ? tzn ktos podaje od 01-05... do 03-05 ?
Turson
Zmień na date czyli RRRR-MM-DD i "SELECT... WHERE CURDATE() BETWEEN data_od AND data_do"
Xart
No i kolejny problemik biggrin.gif
Żeby użytkownicy nie wpisywali daty dodałem datepicker i działa on na tym polu, na którym jest id="datepicker"

wywołuje wcześniej funkcję js

  1. <script type="text/javascript">
  2. $(function(){
  3.  
  4. // Datepicker
  5. $('#datepicker').datepicker({
  6. inline: true
  7. });
  8.  
  9. //hover states on the static widgets
  10. $('#dialog_link, ul#icons li').hover(
  11. function() { $(this).addClass('ui-state-hover'); },
  12. function() { $(this).removeClass('ui-state-hover'); }
  13. );
  14.  
  15. });
  16. </script>


da się to jakoś zrobić, żeby dodać nowe ID albo żeby działało na 2 pola ?
bo mam szukaj od i szukaj do a nie mogą mieć tego samego id dwa inputy ;/
Turson
To nadaj im klasę i zmień $('#datepicker') na $('.datepicker') ohmy.gif
Xart
Napisałem sobie na tescik skrypt do wyszukiwania i wszystko działa oprócz daty:

  1. public function szukaj() {
  2. if(isset($_POST['wyslano'])) {
  3. $sport = $this->mysqli->real_escape_string($_POST['sport']);
  4. $wojewodztwo = $this->mysqli->real_escape_string($_POST['wojewodztwo']);
  5. $miasto = $this->mysqli->real_escape_string($_POST['miasto']);
  6. $kategoria = $this->mysqli->real_escape_string($_POST['kategoria']);
  7. $data_od = $this->mysqli->real_escape_string($_POST['data1']);
  8. $data_do = $this->mysqli->real_escape_string($_POST['data2']);
  9. switch($miasto){
  10. case '': $miasto = "%"; break;
  11. }
  12. switch($kategoria){
  13. case '': $kategoria = "%"; break;
  14. }
  15. switch($data_od){
  16. case '': $data_od = "0001-01-01"; break;
  17. }
  18. switch($data_do){
  19. case '': $data_do = "9999-12-31"; break;
  20. }
  21. $wyszukiwanie = $this->mysqli->query("SELECT * FROM `wydarzenia` WHERE `status` = 1 AND `sport` LIKE '$sport' AND `wojewodztwo` LIKE '$wojewodztwo' AND `miasto` LIKE '$miasto' AND `kategoria` LIKE '$kategoria' AND CURDATE() BETWEEN '$data_od' AND '$data_do'");
  22. $sql = $wyszukiwanie->num_rows;
  23. echo $sql;
  24. }
  25. }


jeżeli podam jakiś przedział daty nawet 1 dzien od np 30 do 31 niezależnie od tego zwraca że znaleziono wszystkie wyniki a jak podam od 1 do 1 albo od 2 do 2 to zwraca 0
Mimo np że między 30 a 31 nie mam w bazie nic to itak zwróci wszystkie zaptania jakie są tak samo np 17-18
ber32
tu jest błąd

  1. switch($data_od){
  2. case '?': $data_od = "0001-01-01"; break;
  3. }
  4. switch($data_do){
  5. case '?': $data_do = "9999-12-31"; break;
  6. }
Xart
@UP
Nie błąd był w zapytaniu smile.gif już sobie poradziłem ;p
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.