Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Instrukcja if...
Forum PHP.pl > Forum > Przedszkole
kramot
Mój problem jest następujący:
Pobieram z formularza dane: $tytul, $id_rodzaj, $id_nosnik.
W/w dane mają posłużyć mi za wytyczne do wyszukiwania w bazie odpowiednich wierszy. Napisałem instrukcje warunkową która w zależności od podanych przez uzytkownika danych uruchamia zapytanie do bazy.
Gdy uzytkownik wpisuje wszystkie dane czyli: tytul, rodzaj i nosnik akcja konczy sie powodzeniem. Jesli natomiast podaje jedynie tytul to niestety niedziala to prawidlowo.

  1. <?php
  2. if (isset($_POST['tytul']) && isset($_POST['rodzaj']) && isset($_POST['nosnik']))
  3. {
  4.  $q = &#092;"SELECT * FROM pozycje WHERE tytul LIKE '%$tytul%' and id_rodzaj = '$id_rodzaj'-1 and id_nosnik = '$id_nosnik'-1 \"; //$id_rodzaj - 1 bo pobrana wartosc z formularza jest zwiekszona o 1 w stosunku do wartosci w 
  5. azie danych(raczej nie tu tkwi problem - raczej)
  6.  }
  7.  elseif (isset($_POST['tytul']) and $id_rodzaj == 1 and $id_nosnik == 1) //przyrownuje $id_rodzaj i $id_nosnik do 1 bo takie maja wartosci gdy uzytkownik n
  8. ewybierze inaczej.
  9.  {
  10.  $q = &#092;"SELECT * FROM pozycje WHERE tytul LIKE '%$tytul%'\";
  11.  }
  12.  else 
  13.  {
  14.  exit;
  15.  }
  16. ?>

Kombinowałem już ze skladnia i funkcjami na kilka sposobow. Szukałem równierz w manualu mozliwosci zwiazanych z instukcja switch ale z tego co wyczytalem nienadaje sie do czegos takiego (Tablice lub obiekty nie mogą być użyte, o ile nie zostaną przekształcone w jakiś typ prosty.)
Jesli w ktoryms momecie niewyrazilem sie jasno prosze o zwrocenie uwagi.
Z gory dziekuje i pozdrawiam.
Ar2r
Dlaczego raz używasz zmiennych
  1. <?php
  2. $_POST['rodzaj'], $_POST['nosnik']
  3. ?>
, a potem w klauzuli elseif -
  1. <?php
  2. $id_rodzaj. $id_nosnik
  3. ?>
(skad je bierzesz?)?
kszychu
Njlepiej zrób to tak:
  1. <?php
  2.  
  3. if(isset($_POST['tytul'])) {
  4.  $q = &#092;"SELECT * FROM pozycje WHERE tytul LIKE '%\".mysql_escape_string($_POST['tytul']).\"%'\";
  5.  if(isset($_POST['rodzaj'])) $q .= &#092;" AND id_rodzaj = '\".(int)$_POST['id_rodzaj']).\"'\";
  6.  if(isset($_POST['rodzaj'])) $q .= &#092;" AND id_nosnik = '\".(int)$_POST['id_nosnik']).\"'\";
  7. }
  8. else {
  9.  exit();
  10. }
  11.  
  12.  
  13. ?>
kramot
Ar2r:Juz tlumacze:
  1. <?php
  2.  
  3. $rodzaj = $_POST['rodzaj'];
  4. $nosnik = $_POST['nosnik'];
  5. ?>


Kszychu: Pomysł jest znakomity (poprzez swoja prostote ) tylko niestety wyskakuje mi :
Parse error: parse error in c:\apache\htdocs\include\lista.php on line ...... (w twoim przykladzie idzie o linie 6).

Cytat
if(isset($_POST['rodzaj'])) $q .= " AND id_rodzaj = '".(int)$_POST['id_rodzaj'])."'";


Na początku myslalem ze chodzi o znak " . " po $q, ale w manualu znalazlem podobne zeczy (choc wciaż niedokonca jestem pewien co ona tam robi :roll2: ).
Może ktos wie co może byc przyczyną tego bledu?
Pozdrawiam.
kszychu
Już zauważyłem co jest źle . W linii 6 i 7 są niepotrzebne nawiasy zamykające, pogrubię:

if(isset($_POST['rodzaj'])) $q .= " AND id_rodzaj = '".(int)$_POST['id_rodzaj'])."'";

Usuń ten pogrubiony nawias i będzie OK.
kramot
Udało się! Nie obeszło się bez rwania wlosow i wielu wielu rezygnacji.
Poniżej przedstawiam ostateczny kod z kilkoma zmianami (głównie zmiany zaszły ze względu na resztę kodu który jest wyżej i niżej winksmiley.jpg )
Jedna zmiana jednak zajsc musiała - inaczej niestety niedziałało. Mowa o nawiasach w linijce 13 i 14 .
Kszychu:
Dzięki.

  1. <?php
  2. $tytul = $_POST[&#092;"tytul\"];
  3. $tytul = trim($tytul);
  4. $tytul = strtoupper($tytul);
  5. $tytul = addslashes($tytul);
  6.  
  7.  global $id_rodzaj, $id_nosnik;
  8. $id_rodzaj = $_POST[&#092;"rodzaj\"];
  9. $id_nosnik = $_POST[&#092;"nosnik\"];
  10.  
  11.  $q = &#092;" SELECT * FROM pozycje WHERE id_pozycje != 0 \";
  12.  if(isset($_POST['tytul'])) {$q .= (&#092;" AND tytul LIKE '%$tytul%'\");
  13.  if($id_rodzaj > 1) $q .= (&#092;" AND id_rodzaj = '$id_rodzaj'-1 \");
  14.  if($id_nosnik > 1) $q .= (&#092;" AND id_nosnik = '$id_nosnik'-1 \");
  15.  $q .= (&#092;" ORDER BY tytul LIMIT 10\");
  16. }
  17. else {
  18.  return 0;
  19. }
  20. ?>


Zmiany w konstrukcji samego zapytania spowodowane były tym, że chciałem otrzymać możliwość wyciągnięcia z bazy np. samych komedii (id_rodzaj = ... ), bez podawania tytułu. Dodatkowo oczywiście ORDER i LIMIT ale to juz inna bajka.
Pozdrawiam.
kszychu
Drobna uwaga, która rzuciła mi się w oczy. W linii 2 sprawdzasz zmienną $_POST['tytul']. Po co to samo robisz w linii 12? Przecież cały ten kod będzie wykonany tylko wtedy, gdy ta zmienna będzie ustawiona, więc w linii 12 zawsze będzie true.
kramot
Ja to rozumiem tak:
W 2 lini pobieram wartosc wczesniej wyslana z formularza co by przekształcić ją w odpowiedni sposób (linijki 3, 4, 5).

W lini 12 funkcja isset - wg. mnie sprawdza czy wczesniej wartosc 'tytul' została wyslana z formularza. Jak słusznie zauważyłeś zawsze będzie true, ale....
......gdybym wstawil np:
  1. <?php
  2. if ($tytul) {
  3. ?>


to wyszukiwarka dzialac bedzie tylko z podanym tytulem.
Co jesli ktos sam nie wie jaki tytul chcialby questionmark.gif? Tylko np chce komedie i juz?questionmark.gif

Myśle, że niedokońca widzę problem o którym mowa. A już napewno niewidze innego prawidlowo dzialajacego rozwiązania.
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.