Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:

Zdravím.
Snažím se zprovoznit filtr (=vyhledávač), který ve výpisu nezobrazí vše, ale jen dané inzeráty, které obsahují bud zadané slovo nebo město. Pokud zadávám jedno nebo druhé samostatně, je to ok. Ve chvíli, kdy zadám obojí, to už nefunguje.

Kontroler:

if($_POST){

                  $_SESSION['filtr']= $filtr = array(
                  'castTextu' => $_POST["castTextu"],
                  'castMesto' => $_POST["castMesto"]);

               if(isset($_SESSION['filtr']['castTextu'])&&empty($_SESSION['filtr']['castMesto'])){
                 $inzeraty=$spravceInzeratu->vratInzeratCastTextu($_SESSION['filtr']['castTextu']);}
               else if (isset($_SESSION['filtr']['castMesto'])&&empty($_SESSION['filtr']['castTextu'])){
               $inzeraty=$spravceInzeratu->vratInzeratCastMesto($_SESSION['filtr']['castMesto']);}
               else if (isset($_SESSION['filtr']['castMesto'])&&isset($_SESSION['filtr']['castTextu'])){
                $inzeraty=$spravceInzeratu->vratInzeratMix($_SESSION['filtr']);
                print_r($inzeraty);
               }

               if(!empty($_SESSION['filtr'])){
              $this->data['inzeraty'] = $inzeraty;
               }
           }

a model:

public function vratInzeratCastTextu($parametry)
        {
                $ress= Db::dotazVsechny('
                        SELECT *
                        FROM `inzeraty`
                        WHERE text LIKE ?
                        ORDER BY `datum_vlozeni` DESC
    ',array("%{$parametry}%"));
                return $ress;
        }
        public function vratInzeratCastMesto($parametry)
        {
                $ress= Db::dotazVsechny('
                        SELECT *
                        FROM `inzeraty`
                        WHERE mesto LIKE ?
                        ORDER BY `datum_vlozeni` DESC
    ',array("%{$parametry}%"));
                return $ress;
        }

        public function vratInzeratMix($parametry,$parametry2)
        {
                $ress= Db::dotazVsechny('
                        SELECT *
                        FROM `inzeraty`
                        WHERE text LIKE ?  AND mesto LIKE ?
                        ORDER BY `datum_vlozeni` DESC
    ',array("%{$parametry}%,%{$parametry2}%"));
                return $ress;

        }

Jak jsem řekl, když zadám obojí, vyskočí mi jen bílá stránka. Nejspíš někde špatně předávám data ze SESSION, dost možná špatně zadávám parametry místo otazníků přímo v dotazu.

Vidí v tom někdo rovnou nějakou chybu, překlep?

 
Odpovědět 8.8.2015 11:54
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Kuba
Michal Kuba:

Tak už dobrý!
Upravil jsem model, konkrétně dosazování pole za otazníky na:

array("%{$parametry}%","%{$parametry2}%"));

A v kontroleru jsem předával jednotlivě obě části SESSION, nikoliv celou:

$inzeraty=$spravceInzeratu->vratInzeratMix($_SESSION['filtr']['castTextu'],$_SESSION['filtr']['castMesto']);

Díky všem, kdo už třeba začali nad tím špekulovat :-)

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět 8.8.2015 11:59
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.