Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]wyszukiwarka, problem z zapytaniem
Forum PHP.pl > Forum > Przedszkole
ewela_n
mam problem z wyszukiwarką jeśli szukam po kilku opcjach;
jeśli zaznaczam jedną opcję w formularzu:
  1. samochód<input type="checkbox" name="s1" value="1">osobowy<br>
  2. <input type="checkbox" name="s2" value="1">ciężarowy<br>
  3. <input type="checkbox" name="s3" value="1">dostawczy<br>

jest wszystko w porządku. Ale jeśli zaznaczę 2 czy 3 to nie pokazuje nic.

A to kawałek skryptu wyszukujący dane:
  1. <?php
  2. if ($s1 == "1") {
  3. $zap1 = "AND typ='"._OSOBOWY."'";
  4.  
  5. }
  6. if ($s2 == "1") {
  7. $zap2 = "AND typ='"._CIEZAROWY."'";
  8.  
  9. }
  10. if ($s3 == "1") {
  11. $zap3 = "AND typ='"._DOSTAWCZY."'";
  12.  
  13. }
  14.  
  15. $zapytanie = $db->sql_query("select * from baza WHERE $zap1 $zap2 $zap3 ORDER BY $sort limit $na_strone");
  16. ?>


co robię źle?
Puzi
A ja bym zrobił tak:
  1. <?php
  2. if ($s1 == "1") {
  3. $zap = "typ='"._OSOBOWY."'";
  4.  
  5. }
  6. if ($s2 == "1") {
  7. $zap = "typ='"._CIEZAROWY."'";
  8.  
  9. }
  10. if ($s3 == "1") {
  11. $zap = "typ='"._DOSTAWCZY."'";
  12.  
  13. }
  14.  
  15. $zapytanie = $db->sql_query("select * from baza WHERE $zap ORDER BY $sort limit $na_strone");
  16. ?>
ewela_n
też tak próbowałam, ale wtedy pokazuje ostatni zaznaczony
Spanner
ja bym zrobił jak już to tak:

  1. <?php
  2. $zap = '';
  3. if ($s1 == "1") {
  4. $zap .= "typ='"._OSOBOWY."'";
  5.  
  6. }
  7. if ($s2 == "1") {
  8. $zap .= "OR typ='"._CIEZAROWY."'";
  9.  
  10. }
  11. if ($s3 == "1") {
  12. $zap .= "OR typ='"._DOSTAWCZY."'";
  13.  
  14. }
  15.  
  16. $zapytanie = $db->sql_query("select * from baza WHERE $zap ORDER BY $sort limit $na_strone");
  17. ?>
Puzi
A co powiesz na takie rozwiązanie:

  1. samochod
  2. <select name="rodzaj">
  3. <option value="1">osobowy</option>
  4. <option value="2">ciężarowy</option>
  5. <option value="3">dostawczy</option>


Oraz ten krótki kodzik PHP:
  1. <?php
  2. $samochod = $_POST['rodzaj'];
  3.  
  4. if($samochod == 1)
  5. {
  6. $zap = "typ='"._OSOBOWY."'";
  7. } 
  8. else if($samochod == 2)
  9. {
  10. $zap = "typ='"._CIEZAROWY."'";
  11. }
  12. else
  13. {
  14. $zap = "typ='"._DOSTAWCZY."'";
  15. }
  16.  
  17. $zapytanie = $db->sql_query("select * from baza WHERE $zap ORDER BY $sort limit $na_strone");
  18. ?>


A tam gdzie masz tym to nie powinno być tak:
  1. <?php
  2. $samochod = $_POST['rodzaj'];
  3.  
  4.  if($samochod == 1)
  5.  {
  6.  $zap = "typ='_OSOBOWY' ";
  7.  } 
  8.  else if($samochod == 2)
  9.  {
  10.  $zap = "typ='_CIEZAROWY' ";
  11.  }
  12.  else
  13.  {
  14.  $zap = "typ='_DOSTAWCZY' ";
  15.  }
  16.  
  17.  $zapytanie = $db->sql_query("select * from baza WHERE $zap ORDER BY $sort limit $na_strone");
  18. ?>

questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
ewela_n
muszę mieć możliwość wyboru np. 2 typów
a to co zrobiłam działa tylko na pojedyncze zaznaczenie sad.gif
może jednak ktoś ma jakiś pomysł ?
Puzi
a co bys powiedzała na to, żeby w kazym z warunków dopisać zapytanie do bazy??
Tylko że najpierw by Ci sie wyświetlała jedna grupa samochodów a później następna.
tomm
W select mozna równieeż wybrac kilka opcji, musisz dac opcje multiple
http://www.kurshtml.boo.pl/html/lista_rozw...formularze.html
a jeśli chodzi o checkboxy to daj wszystkim tą samą nazwę np. rodz_pojazdu[], wówczas wszystkie zanaczone opcje bedziesz miala w tablicy, później możesz przetworzyc:
foreach($_POST['rodz_pojazdu'] as $rodzaj)
$rodzaje .= $rodzaj.' OR ';

$rodzaje = substr($rodzaje,0, -3); // obcięcie ostatniego OR
ewela_n
akurat z tymi tablicami to nie da rady, ponieważ chceckboxy umieszczam w js, bo te opcje pokazują się w zależności od wybranej grupy
proszę o pomoc
tomm
CODE

$rodzaje = '';
if($_POST['s1'] == 1)
$rodzaje .= ' AND typ = "_OSOBOWY" ';
if($_POST['s2'] == 1)
$rodzaje .= ' AND typ = "_CIEZAROWY" ';
if($_POST['s3'] == 1)
$rodzaje .= ' AND typ = "_DOSTAWCZY" ';
// zakładając ze wszystkie opcje byly zaznaczone string bedzie wygladal: ' AND typ = "_OSOBOWY" AND typ = "_CIEZAROWY" AND typ = "_DOSTAWCZY"

teraz trzeba wyciąć 4 pierwsze znaki za pomoca substr i bedzie przygotowany warunek aby go wstawic do zapytania
pisalem bez próbowania
szopen
nie AND tylko OR. Bo jak pole może być jednocześnie równe "_OSOBOWY" i "_CIEZAROWY". Można też
  1. WHERE `pole` IN ('_OSOBOWY','_CIEZAROWY');
ewela_n
nie działa sad.gif
pokazuje tylko pojedynczo zaznaczone checkboxy
szopen
pokaż zapytanie, które Ci nie działa (to jest zamiast sql_query daj echo)... plus strukturę bazy (show create table) i choć kawałek danych (select * from xxx limit 10;)
ewela_n
Cytat(szopen @ 29.08.2008, 21:26:09 ) *
nie AND tylko OR. Bo jak pole może być jednocześnie równe "_OSOBOWY" i "_CIEZAROWY". Można też
  1. WHERE `pole` IN ('_OSOBOWY','_CIEZAROWY');


tak, ale to zapytanie nie chodzi jeśli się wybierze warunek 2 i 3
wtedy będzie OR i OR
tomm
CODE
$wybrane = '';
if($_POST['poj1'] == 1) $wybrane .= ' typ = "_OSOBOWY" OR';
if($_POST['poj2'] == 1) $wybrane .= ' typ = "_DOSTAWCZY" OR';
if($_POST['poj3'] == 1) $wybrane .= ' typ = "_CIEZAROWY" OR';

$wybrane = substr($wybrane, 0, -2);


"select * from baza WHERE $wybrane ORDER BY $sort limit $na_strone"
ewela_n
teraz nie działa nawet bez zaznaczania checkboxów sad.gif
szopen
moja rada: napisz napierw normalne zapytanie SQL które Ci działa (z linii poleceń, bezpośrednio w kliencie SQLowym), a później wstawiaj do kodu PHP.
Spanner
przerób sobie delikatnie mój kod, bo on działa napewno
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.