Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: własna wyszukiwarka
Forum PHP.pl > Forum > PHP
reebel
Wyszukiwarka ma 3 pola: branża [przydzielona numerycznie], miejscowosc oraz nazwa. Jeśli wszystkie pola zostaną puste jako rezultat wyszukiwania wyświetlone zostaną wszystkie wpisy. Jeśli tylko jedno pole dostanie wpisana np. miejscowosc to nazwa i branza dostają wartość 0 reszta działa wg tego schematu. Kod jest wstępnie gotowy jednak nie jest do konca poprawny poniewaz wyświetla poprawny rezultat tylko wówczas gdy wszystkie pola są wypełnione w innym przepadku zwraca wszystkie wpisy z bazy.
Bardzo prosze o korekte



$b - branża
$m - miejscowosc
$n - nazwa

poniżej zamieszczam fragment mojego skryptu odpowiedzialny za ustalanie odpowiednich warunków wyszukkiwania

  1. <?php
  2. <php
  3. if ($tryb == 'szukaj' && $b && $m && $n) {
  4.  
  5.  
  6.  
  7. if ($b == '0' && $m == '0') {
  8. $warunek1 = '';
  9. $warunek2 = '';
  10.  
  11. if ($n == '0') { $warunek3 = ''; } else {
  12. $warunek3 = 'WHERE baza_nazwa LIKE '%$n%' ';}
  13.  
  14. } 
  15.  
  16.  
  17.  
  18.  
  19. if ($b == '0' && $m !== '0') {
  20. $warunek1 = '';
  21. $warunek2 = 'WHERE baza_miejscowosc='$m' ';
  22.  
  23. if ($n == '0') {$warunek3 = '';} else {
  24. $warunek3 = 'AND baza_nazwa LIKE '%$n%' ';}
  25.  
  26.  
  27. } 
  28.  
  29.  
  30.  
  31. if ($b !== '0' && $m !== '0') { 
  32.  
  33. $warunek1 = 'WHERE baza_branza='$b' ';
  34. $warunek2 = 'AND baza_miejscowosc='$m' ';
  35.  
  36. if ($n == '0') {$warunek3 = '';} else {
  37. $warunek3 = 'AND baza_nazwa LIKE '%$n%' ';}
  38.  
  39. }
  40.  
  41.  if ($b !== '0' && $m == '0') { 
  42.  
  43. $warunek1 = 'WHERE baza_branza='$b' ';
  44. $warunek2 = '';
  45.  
  46. if ($n == '0') {$warunek3 = '';} else {
  47. $warunek3 = 'AND baza_nazwa LIKE '%$n%' ';}
  48.  
  49. }
  50. }
  51. ?>


  1. $result = dbquery(
  2. "SELECT tb.*, baza_branza_id, baza_branza_nazwa FROM fusion_baza_fii tb
  3. LEFT JOIN fusion_baza_branze tbn ON tb.baza_branza=tbn.baza_branza_id
  4. $warunek1 $warunek2 $warunek3 ORDER BY baza_datestamp DESC LIMIT 0, 10"
  5. );
^bmb
pobieznie popatrzylem i wg mnie troche chyba za duzy ten kod

Mniej więcej zrobiłbym tak

if ($tryb == 'szukaj')
{

$war="";

if($b!=0) $war.=" baza_branza='$b' AND";
if($m!=0)$war.=" baza_miejscowosc='$m' AND";
if($n!=0)$war.=" baza_nazwa LIKE '%$n%' AND";

$war=substr(0,strlen($war)-3); //usunac ostatnie AND

}


$result = dbquery(
"SELECT tb.*, baza_branza_id, baza_branza_nazwa FROM fusion_baza_fii tb
LEFT JOIN fusion_baza_branze tbn ON tb.baza_branza=tbn.baza_branza_id

WHERE $war <-- to jesli $war!=""

ORDER BY baza_datestamp DESC LIMIT 0, 10"
);
masel
Jeżeli chodzi o twój kod to wydaje mi się że nie powinieneś porównywać z 0
Jeżeli się nie mylę to w pola wpisywany jest tekst więc porównaj z pustym stringiem
  1. <?php
  2. &== '' ;
  3. ?>


Poza tym ^bmb ma rację trochę pokręcony ten twój kod
reebel
próbowałem wykorzystać twoją metode ale jakoś się nie sprawdza...(nie działa tongue.gif)

ponizej przedstawiam jak ma działać ta wyszukiwarka [pomijając formularz] są tu zapytania wprost z paska adresu:


przy takim adresie wyświetla wszystkie wpisy w bazie,
wówczas $warunek1,2,3 = "";


a przy takim ustawieniu wyszukuje wpisy z miasta Rzeszów [$m] i które mają w nazwie słowo Galeria [$n] ale nie bierze pod uwage branży [w adresie '&b=0'] --> [$b == 0] --> [$warunek1 = "";]


co na to poradzisz? smile.gif
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.