Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie my sql z wieloma warunami z formularza
Forum PHP.pl > Forum > Przedszkole
Matio
Witam!

Mam bazę danych, i użytkownik ma odpytywać ją wypełniając formularz do którego można wpisać 9 różnych wartości, które w skrypcie php przechowują zmienne. Moje pytanie dotyczy tego w jaki inteligentny sposób napisać ten skrypt, żeby sam dodawał warunek do zapytania sql jeśli zmienna przechowuje wartość (tzn. jeśli użytkownik wypełnił dane pole w formularzu - bo oczywiście nie musi wypełniac wszystkich)?

Poniższy fragment kodu dotyczy sytuacji (oczywiście "na sztywno"), kiedy wypełnione sa wszystkie pola w formularzu.

  1. <?php
  2. $query="SELECT GRU_NAZWA, ALB_TYTUL, ALB_ROK, WYT_NAZWA
  3.  FROM TBL_ARTYSTA, TBL_ARTYSTA_W_GRUPIE, TBL_GRUPA, TBL_STYL_GRUPY, TBL_STYL, TB
    L_ALBUM, TBL_POCHODZENIE, TBL_WYTWORNIA, TBL_ALBUM_WYTWORNIA
  4.  WHERE TBL_ARTYSTA.ART_ID = TBL_ARTYSTA_W_GRUPIE.TBL_ARTYSTA_ART_ID
  5.  AND TBL_ARTYSTA_W_GRUPIE.TBL_GRUPA_GRU_ID = TBL_GRUPA.GRU_ID
  6.  AND TBL_GRUPA.GRU_ID = TBL_STYL_GRUPY.TBL_GRUPA_GRU_ID
  7.  AND TBL_STYL_GRUPY.TBL_STYL_STY_ID = TBL_STYL.STY_ID
  8.  AND TBL_GRUPA.GRU_ID = TBL_ALBUM.TBL_GRUPA_GRU_ID
  9.  AND TBL_GRUPA.TBL_POCHODZENIE_POC_ID = TBL_POCHODZENIE.POC_ID
  10.  AND TBL_ALBUM.ALB_ID = TBL_ALBUM_WYTWORNIA.TBL_ALBUM_ALB_ID
  11.  AND TBL_ALBUM_WYTWORNIA.TBL_WYTWORNIA_WYT_ID = TBL_WYTWORNIA.WYT_ID 
  12.  AND GRU_NAZWA='" . $SESSION['grupa'] . "' 
  13.  AND ART_IMIE='" . $SESSION['imie'] . "'
  14.  AND ART_NAZWISKO='" . $SESSION['nazwisko'] . "'
  15.  AND ART_PSEUDONIM='" . $SESSION['pseudo'] . "'
  16.  AND ALB_TYTUL='" . $SESSION['tytul'] . "'
  17.  AND ALB_ROK='" . $SESSION['rok'] . "'  
  18.  AND WYT_NAZWA='" . $SESSION['wytwornia'] . "'
  19.  AND STY_NAZWA='" . $SESSION['styl'] . "'
  20.  AND POC_KRAJ='" . $SESSION['pochodzenie'] . "'
  21. ";
  22. $result=mysql_query($query);
  23. while ($row = mysql_fetch_array($result))
  24. {
  25. extract($row);
  26. {
  27. echo $GRU_NAZWA;
  28. echo " - ";
  29. echo $ALB_TYTUL;
  30. echo " - ";
  31. echo $ALB_ROK;
  32. echo " - ";
  33. echo $WYT_NAZWA;
  34. echo "<br>";
  35. }
  36.  
  37. }
  38. ?>


Oczywiście nie prosze o napisanie całego kodu, a jedynie pokazanie metody, przykładu...

bardzo prosze o pomoc...

pozdrawiam...
1010
nie wiem czy dobrze zrozumiałem

  1. <?php
  2. if(!empty($SESSION['nazwisko']))
  3. {
  4.  $where .= "AND ART_NAZWISKO='" . $SESSION['nazwisko'] . "'";
  5. }
  6. ?>


i potem w zapytaniu tylko
Kod
... WHERE ".$where." ...

i po kłopocie...

ps: nie powinno być przypadkiem $_SESSION zamiast $SESSION
matio
ale jak wtedy budować główne zapytanie dokładnie?questionmark.gif

Jeżeli chodzi o $SESSION/$_SESSION, to działa mi tak jak podałem, ale być może nie powinno się tak pisać (jestem początkujący w php)
matio
W jaki sposób doklejać do podstawowego zapytania kolejne warunki (chodzi mi dokładnie o składnie), bo próbowałem już czegoś podobnego, ale pojawiał się błąd, więc uznałem, że nie można...

Czyli coś na zasadzie:

$result=mysql_query($query. $where);

questionmark.gif
matio
Oczywiście zakładając, że to podstawowe zapytanie będzie pozbawione tych warunków już:

  1. <?php
  2. $query="SELECT GRU_NAZWA, ALB_TYTUL, ALB_ROK, WYT_NAZWA
  3.  FROM TBL_ARTYSTA, TBL_ARTYSTA_W_GRUPIE, TBL_GRUPA, TBL_STYL_GRUPY, TBL_STYL, TB
    L_ALBUM, TBL_POCHODZENIE, TBL_WYTWORNIA, TBL_ALBUM_WYTWORNIA
  4.  WHERE TBL_ARTYSTA.ART_ID = TBL_ARTYSTA_W_GRUPIE.TBL_ARTYSTA_ART_ID
  5.  AND TBL_ARTYSTA_W_GRUPIE.TBL_GRUPA_GRU_ID = TBL_GRUPA.GRU_ID
  6.  AND TBL_GRUPA.GRU_ID = TBL_STYL_GRUPY.TBL_GRUPA_GRU_ID
  7.  AND TBL_STYL_GRUPY.TBL_STYL_STY_ID = TBL_STYL.STY_ID
  8.  AND TBL_GRUPA.GRU_ID = TBL_ALBUM.TBL_GRUPA_GRU_ID
  9.  AND TBL_GRUPA.TBL_POCHODZENIE_POC_ID = TBL_POCHODZENIE.POC_ID
  10.  AND TBL_ALBUM.ALB_ID = TBL_ALBUM_WYTWORNIA.TBL_ALBUM_ALB_ID
  11.  AND TBL_ALBUM_WYTWORNIA.TBL_WYTWORNIA_WYT_ID = TBL_WYTWORNIA.WYT_ID" ;
  12. ?>
1010
robisz sobie te warunki co ci napisalem...


i zawsze dajesz $where .= "";

to dokleja do zmiennej kolejne warunki
webdice
Cytat(1010 @ 4.01.2008, 16:22:07 ) *
nie wiem czy dobrze zrozumiałem

  1. <?php
  2. if(!empty($SESSION['nazwisko']))
  3. {
  4.  $where .= "AND ART_NAZWISKO='" . $SESSION['nazwisko'] . "'";
  5. }
  6. ?>


i potem w zapytaniu tylko
Kod
... WHERE ".$where." ...

i po kłopocie...

ps: nie powinno być przypadkiem $_SESSION zamiast $SESSION


Wyjdzie:

  1. WHERE AND...
matio
Wielkie dzięki, zrozumiałem, działa, pozdrawiam i życzę wszystkiego dobrego w Nowym Roku
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.