Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyszukiwaniem zaawansowanycm
Forum PHP.pl > Forum > PHP
Zaleś
Witam,
muszę zrobić zaawansowaną wyszukiwarkę na pewną stronę.
Mianowicie zbudowałem formularz, który wysyła dane metoą GET do pliku: search.php

Plik search php wygląda następująco:
Kod
<?php

$firma=$_GET['firma'];
$nazwa_odzywki=$_GET['nazwa'];
$w_opisie=$_GET['w_opisie'];
$cena_od=$_GET['cena_od'];
$cena_do=$_GET['cena_do'];
$sortowanie=$_GET['sortowanie'];
$kategoria=$_GET['kategoria'];

$poloczenie=mysql_connect("baza","nazwa","hasło");
mysql_select_db("nazwabazy");

                   if($firma == "" AND $nazwa_odzywki == "" AND $w_opisie == "" AND $cena_od == "" AND $cena_do == "")
                   {
                       header("Location: strona główna");
                        exit;
                   }

                         else
                   {
                        
                   }

    
?>


Jeśli nic nie wpiszemy do pól to ma przejsć do pełej listy produktów, czyli do strony głónej.

Natomiast jeśli wpiszemy jakieś wartości w poszczególne pola ma tworzyć odpowiednie zapytania do MYSQL, które mają być przekazane do index.php za pomocą parametru i ma wyświetlić odpowiednią okrojoną listę produktów pasującą do kryteriów.

NIe wiem jak rozwiązać, ponieważ jak bm chciał przejść wszystkie możliwośći (firma wpisana reszta nie, firma i nazwa wspiana reszta nie itd)
To strasznie dużo ifów musiałbym napisać.

Czy jest jakiś szybki i jasny sposób jak można by to zrobić i jak przekazać parametr do indexu aby wyswietlal odpowiednie wartosci.

Z gory dziekuje za pomoc.
POzdrawiam
STrefamocy
My4tic
Przecież nie musisz sprawdzać wszystkich kombinacji. Po prostu zób tak, że jeśli jakaś zmienna nie jest pusta to dodajesz ją do warunku przy wyszukiwaniu. Np.

  1. <?php
  2. $array=array();
  3.  
  4.  if ( !empty($_POST['firma'])) array_push($array, "firma = '$_POST[firma]'");
  5.  if ( !empty($_POST['nazwa'])) array_push($array, "nazwa = '$_POST[nazwa]'"); 
  6. .
  7. .
  8. .
  9.  $sWarunki = implode(" AND ", $array);
  10.  
  11.  $sSQL = 'SELECT * FROM tabela';
  12.  if ( !empty($sWarunki)) $sSQL .= ' WHERE '.$sWarunki;
  13. ?>


Jeśli masz tych zmiennych naprawde duzo i nie kierujesz innych parametrów do skryptu przez POST to możesz zrobić to w pętli używając aliasu na zmienną. Wtedy nie bedzie ifów ...i pamiętaj o filtrowaniu zmiennych.
Zaleś
Dizekuje super zadziałało, ale mam następny problem.Wyszukiwarka działa poprawnie ale trochę namieszałem z kategoriami.

Otóż w formularzu generuję automatycznie z bazy kategorię następującym kodem:
Kod
Kategoria: <br/>
               <?
               $i=1;            
                  while($a=mysql_fetch_array($wynik_zapytania))
        {
                     $id=$a["ID_Kategorii"];
                     $kategorie=$a["Nazwa_Kategorii"];
              ?>
            <input type='checkbox' name='kategoria<?echo $i++;?>' value='<?echo $id;?>' checked='checked'/><?echo $kategorie; echo "<br/> ";
                 }
?>


I przechwytuje te dane w pliku gdzie pokazuje rezultat szukania w następujący sposób:
Kod
$i=1;
        if(isset($_GET["kategoria1"])) $tabpom[$i]=1; else $tabpom[$i]=0;$i++;
        if(isset($_GET["kategoria2"])) $tabpom[$i]=1; else $tabpom[$i]=0;$i++;
        if(isset($_GET["kategoria3"])) $tabpom[$i]=1; else $tabpom[$i]=0;$i++;
        if(isset($_GET["kategoria4"])) $tabpom[$i]=1; else $tabpom[$i]=0;$i++;
        if(isset($_GET["kategoria5"])) $tabpom[$i]=1; else $tabpom[$i]=0;$i++;

        //pobranie z bazy ilości kategorii
        unset($_GET["kategoria1"]);
        unset($_GET["kategoria2"]);
        unset($_GET["kategoria3"]);
        unset($_GET["kategoria4"]);
        unset($_GET["kategoria5"]);

        $pytpom="SELECT COUNT(ID_Kategorii) as ILE FROM `Kategorie`";
        $wynikpom=mysql_query($pytpom);
        while($ttmp=mysql_fetch_array($wynikpom)) $ile=$ttmp["ILE"];
        
        //licznik kategorii
        $ilekat=0; for($i=1;$i<=$ile;$i++) {if($tabpom[$i]==1) $ilekat++;}

        //przypadek kiedy wybrano jedna kategorie
        if($ilekat==1) { $i=1; while($tabpom[$i]==0 && $i<=$ile) $i++;
            $temp=$i;$DODATKOWO.=" AND `kategoria`=$temp";}
            
        
        //przypadek 2 i wiecejj kategorii
        else {$i=1; while($tabpom[$i]==0 && $i<=$ile) $i++;
            //echo $i;
            $temp=$i;$DODATKOWO.=" AND (`kategoria`=$temp"; $i++;
            while($i<=$ile) {if($tabpom[$i]==1) {$temp=$i; $DODATKOWO.=" OR `kategoria`=$temp";} $i++;}
            $DODATKOWO.=')';}


Jak zauważyliście jeśli dodam do bazy kategorię to muszę dopisać dwie linijki kodu.
Musze to tak przerobić aby również automatycznie się to robiło ale nie wiem jak się za to zabrać.
Prosze o pomoc.
Pozdrawiam
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.