[ Nikola Milosevic @ 09.08.2010. 14:48 ] @
Basic PHP programer sam i potrebno je da uradim pretragu prema nekoliko kriterijuma.Naime mislio sam da unos kriterijuma resim pomocu checkbox-ova,ali javlja mi se problem kod pojedinacnih kriterijuma kada je potrebno da se izabere jedna od tri opcije(znaci ne moze vise istovremeno).Znam da postoji opcija radiobutton-a i kombinacije sa switchom,ali me zanima da li postoji neko resenje koje mi resava sledeci problem.Imam pretragu po tipu i po vrsti(oba imaju tri opcije).Kako bih mogao da obe odvojim da moze da se bira maksimalno jedna od tri.Nisam nikad nesto radio sa switchom i php-om,pa ne znam bas da li je izvodljivo tako ili nekako drugacije.Ima li neko neku ideju laganu za predlog?
[ Goran Rakić @ 09.08.2010. 14:51 ] @
Nauči da razlikuješ šta je HTML, a šta PHP. Validaciju je poželjno da odradiš na obe strane.
[ Nikola Milosevic @ 09.08.2010. 15:11 ] @
Pa zavisno od HTML resenja prikaza same aplikacije,zavisi mi i validacija u PHP-u,barem koliko ja mislim.Moje najjednostavnije resenje je da uradim if if if za svaku od zadatih value-a,ali pitanm je da li ima neko jednostavnije resenje za to.
[ kelja @ 09.08.2010. 17:16 ] @
Pa, ne znam da li sam dobro razumeo, ali, ako hoces da korisnik izabere samo jednu opciju, onda koristi drop down liste, ili radio dugmice.

U skripti treba da imas dve varijable : $tip (izabrana vrednost iz prve drop down liste) i $vrsta (izabrana vrednost iz druge drop down liste).

A mysql query je samo jedan: "SELECT * FROM tabela WHERE tip ='$tip' AND vrsta='$vrsta'";
[ Nikola Milosevic @ 09.08.2010. 20:24 ] @
to je to,hvala.
potpuno sam smetnuo sa uma da stavim dve razlicite promenljive.
[ Nikola Milosevic @ 10.08.2010. 00:47 ] @
upravo sam shvatio da ovo nije kraj mojih problema.Ja imam 5 kriterijuma pretrage.2 od tih pet su u formi tipa i vrste koji su navedeni u bazi podataka.Ostalih 3 se unosi u vidu vrednosti,bilo tekstualnih,bilo brojcanih.Ja treba da vrsim pretragu na osnovu tih pet kriterijuma.ZNam kako bih to izveo,tako sto se samo jedan kriterijum uzima u obzir(if,else if uslov i to je to),ali potrebna mi je pretraga na osnovu jednog ili vise kriterijuma.Problem je sto ne poznajem dovoljno php,i prckao sam nesto malo po netu i nisam bas razumeo kako ovo izvesti.Moja jedina ideja je sa else if ovima kojih bi bilo jedno 2^5ti koliko ima kombinacija,posto bih bukvalno morao da ispitam svaku kombinaciju za polje da li je unet ili ne i onda da odradim search baze prema tome koji je kriterijum unet. Kako ovo da resim najbezbolnije.Hvala na svakom savetu.
[ Valerij Zajcev @ 10.08.2010. 08:38 ] @
Mozda bi mogao da resis problem prosledjivanjem niza parametara. Mozes li da das par scenaria kakav ti unos treba?
[ Nikola Milosevic @ 10.08.2010. 11:18 ] @
znaci imam 5 kriterijuma pretrage,a to su unosi u bazi.Npr. biram zenu za udaju.Pretraga se vrsi po boji ociju(3 opcije),boji kose(3 opcije),tezini (u granicama od-do),i godistu (u granicama od do),zemlji iz koje je. U bazi se nalazi jos podataka o toj osobi.Ja hocu da ako unesem samo jedan kriterijum,izbaci sve podatke na osnovu njega,ali da i ako unesem samo dva,izbaci sve podatke o osobi koja zadovoljava oba kriterijuma.Znaci,ja bih morao da ispitam,da li je unet,samo 1,1 i 2,ili samo 2 kriterijum,da bih na osnovu toga printovao vrednosti.S obzirom da imam 5 kriterijuma,hocu da search radi i ako je unet jedan i ako je uneto svih 5,pa ovo postaje kilometarski kod sa if else,a pe zanima da li postoji neka funckcija koja poredi unose a ne puca ako neki od njih nije unet,a radi. Kazem tek sam poceo da radim php,pa nisam bas upucen kako ovo izvesti.

Sad gledam neku varijantu sa switchevima,mozda je to najbolje resenje...
[ dakipro @ 10.08.2010. 11:29 ] @
a sto ne bi imao par ifova samo koji bi gradili sql upit?
Recimo

Code:

$sqlWherePart = array();

if (isset($_GET['vrednost_1']) && $_GET['vrednost_1']!=''){
  $sqlWherePart[] = ' vrednost_u_bazi = "' . $_GET['vrednost_1'] . '"';  //mozes i LIKE umesto =, zavisi sta ti treba
}


I posle imas niz koji samo joinujes sa "AND" ili pak OR sta ti treba.
Nemoras ni niz cak, mozes obican string da krenes da gradis i samo ga dodas na glavni sql upit, tako prakticno imas samo 5 ifova i potpunu kontrolu nad pretragom i uslovima.

P.S. Naravno, injection provere i to, ne ovako direktno, samo primer dajem

Ako nisi razumeo neki deo, pitaj pa da pojasnim detaljnije
[ Nikola Milosevic @ 10.08.2010. 15:03 ] @
Probacu,pa ti javim ako ne uspem.
[ Nikola Milosevic @ 10.08.2010. 18:19 ] @
Da li ovo radi posao?
Code:

if ($_SESSION['user_id'])
    {
        mysql_connect("localhost","root","") or die(mysql_error());
        mysql_select_db("nekretnine");
        $datum=date( 'Y\-n\-j');
        if(array_key_exists('trazi',$_POST))
        {
        $query = "SELECT * FROM oglasi WHERE datum_isteka >='".$datum."";

            if ($_POST['tip'] > 0) {
               $query .= ' AND tip_oglasa = '.$_POST['tip'];
            }

            if ($_POST['grad'] != '') {
               $query .= ' AND grad LIKE "'.$_POST['lokacija'].'"';
            }

            if ($_POST['vrsta'] > 0) {
               $query .= ' AND vrsta_nekretnine = '.$_POST['vrsta'];
            }
            if (!empty($_POST['povrs_gornjagr']) AND !empty($_POST['povrs_donjagr']))
            {
                $query .= ' AND povrsina>= "'.$_POST['povrs_donjagr'] " ' AND korisnik_id=korisnik.id AND povrsina<='".$_POST['povrs_donjagr']."'";
            }
            if (!empty($_POST['godina_donjagr']) AND !empty($_POST['godina_gornjagr']))
            {
                $query=' AND god_izgradnje>= "'.$_POST['godina_donjagr']."' AND korisnik_id=korisnik.id AND god_izgradnje<='".$_POST['godina_gornjagr']."'";
                $result=mysql_query($upit);
            } 
            
        $result = mysql_query($query);
        while($niz=mysql_fetch_array($result))
            {
            
                echo "<tr><td>".$niz['tip_oglasa']."</td><td>".$niz['zemlja']."</td><td>".$niz['grad']."</td><td>".$niz['vrsta_nekretnine']."</td><td>".$niz['povrsina']."</td>
                <td>".$niz['spratnost']."</td><td>".$niz['broj_soba']."</td><td>".$niz['god_izgradnje']."</td><td>".$niz['cena']."</td><td>".$niz['napomena']."</td><td>".$niz['kontakt_tel']."</td></tr>";
         
            }
            echo "</table>";
        }
        if (array_key_exists('arhiva',$_POST))
        {
            $upit="SELECT * FROM oglas, korisnik WHERE datum_isteka<'".$datum."' AND korisnik_id=korisnik.id";
            $result=mysql_query($upit) or die(mysql_error());
            echo "<head> <link rel='stylesheet' type='text/css'  href='format.css' /> </head><br><br>";
            echo "<table border='1'><tr class='boja'><td>tip oglasa</td><td>zemlja</td><td>grad</td><td>vrsta nekretnine</td>
            <td>povrsina</td><td>spratnost</td><td>broj soba</td><td>god izgradnje</td><td>cena</td><td>napomena</td><td>kontakt tel</td></tr>";
            while($niz=mysql_fetch_array($result))
            {
            
                echo "<tr><td>".$niz['tip_oglasa']."</td><td>".$niz['zemlja']."</td><td>".$niz['grad']."</td><td>".$niz['vrsta_nekretnine']."</td><td>".$niz['povrsina']."</td>
                <td>".$niz['spratnost']."</td><td>".$niz['broj_soba']."</td><td>".$niz['god_izgradnje']."</td><td>".$niz['cena']."</td><td>".$niz['napomena']."</td><td>".$niz['kontakt_tel']."</td></tr>";
         
            }
            echo "</table>";
        }
        if (array_key_exists('svi_ogl',$_POST))
        {
            $upit="SELECT * FROM oglas, korisnik WHERE korisnik_id=korisnik.id";
            $result=mysql_query($upit) or die(mysql_error());
            echo "<head> <link rel='stylesheet' type='text/css'  href='format.css' /> </head><br><br>";
            echo "<table border='1'><tr class='boja'><td>tip oglasa</td><td>zemlja</td><td>grad</td><td>vrsta nekretnine</td>
            <td>povrsina</td><td>spratnost</td><td>broj soba</td><td>god izgradnje</td><td>cena</td><td>napomena</td><td>kontakt tel</td></tr>";
            while($niz=mysql_fetch_array($result))
            {
            
                echo "<tr><td>".$niz['tip_oglasa']."</td><td>".$niz['zemlja']."</td><td>".$niz['grad']."</td><td>".$niz['vrsta_nekretnine']."</td><td>".$niz['povrsina']."</td>
                <td>".$niz['spratnost']."</td><td>".$niz['broj_soba']."</td><td>".$niz['god_izgradnje']."</td><td>".$niz['cena']."</td><td>".$niz['napomena']."</td><td>".$niz['kontakt_tel']."</td></tr>";
         
            }
            echo "</table>";
        }