Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]wyszukiwarka, problem z zapytaniem
ewela_n
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 29.03.2005

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
Puzi
post
Post #2





Grupa: Zarejestrowani
Postów: 231
Pomógł: 17
Dołączył: 26.08.2007

Ostrzeżenie: (10%)
X----


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. ?>


Ten post edytował Puzi 29.08.2008, 10:35:00
Go to the top of the page
+Quote Post
ewela_n
post
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 29.03.2005

Ostrzeżenie: (10%)
X----


też tak próbowałam, ale wtedy pokazuje ostatni zaznaczony
Go to the top of the page
+Quote Post
Spanner
post
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.12.2004
Skąd: KrK

Ostrzeżenie: (10%)
X----


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. ?>
Go to the top of the page
+Quote Post
Puzi
post
Post #5





Grupa: Zarejestrowani
Postów: 231
Pomógł: 17
Dołączył: 26.08.2007

Ostrzeżenie: (10%)
X----


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. ?>

(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
ewela_n
post
Post #6





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 29.03.2005

Ostrzeżenie: (10%)
X----


muszę mieć możliwość wyboru np. 2 typów
a to co zrobiłam działa tylko na pojedyncze zaznaczenie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
może jednak ktoś ma jakiś pomysł ?
Go to the top of the page
+Quote Post
Puzi
post
Post #7





Grupa: Zarejestrowani
Postów: 231
Pomógł: 17
Dołączył: 26.08.2007

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
tomm
post
Post #8





Grupa: Zarejestrowani
Postów: 142
Pomógł: 28
Dołączył: 7.04.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował tomm 29.08.2008, 16:50:12
Go to the top of the page
+Quote Post
ewela_n
post
Post #9





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 29.03.2005

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
tomm
post
Post #10





Grupa: Zarejestrowani
Postów: 142
Pomógł: 28
Dołączył: 7.04.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
szopen
post
Post #11





Grupa: Zarejestrowani
Postów: 60
Pomógł: 5
Dołączył: 28.08.2008

Ostrzeżenie: (0%)
-----


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');
Go to the top of the page
+Quote Post
ewela_n
post
Post #12





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 29.03.2005

Ostrzeżenie: (10%)
X----


nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
pokazuje tylko pojedynczo zaznaczone checkboxy
Go to the top of the page
+Quote Post
szopen
post
Post #13





Grupa: Zarejestrowani
Postów: 60
Pomógł: 5
Dołączył: 28.08.2008

Ostrzeżenie: (0%)
-----


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;)
Go to the top of the page
+Quote Post
ewela_n
post
Post #14





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 29.03.2005

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
tomm
post
Post #15





Grupa: Zarejestrowani
Postów: 142
Pomógł: 28
Dołączył: 7.04.2008

Ostrzeżenie: (0%)
-----


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"
Go to the top of the page
+Quote Post
ewela_n
post
Post #16





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 29.03.2005

Ostrzeżenie: (10%)
X----


teraz nie działa nawet bez zaznaczania checkboxów (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
szopen
post
Post #17





Grupa: Zarejestrowani
Postów: 60
Pomógł: 5
Dołączył: 28.08.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Spanner
post
Post #18





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.12.2004
Skąd: KrK

Ostrzeżenie: (10%)
X----


przerób sobie delikatnie mój kod, bo on działa napewno
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:31