Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z wyszukiwaniem zaawansowanycm, Proszę o pomoc
Zaleś
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 22.10.2006

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
My4tic
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


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.

Ten post edytował My4tic 22.10.2006, 16:38:15
Go to the top of the page
+Quote Post
Zaleś
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 22.10.2006

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


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
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 - 13:26