BLACK FRIDAY - Největší IT akce roku. Získej až 80 % kreditů navíc nebo využij slevy až 80 % na e-learning. Ale pozor, akce platí pouze do 30. 11. 2025.
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:
Avatar
Michal Kuba
Tvůrce
Avatar
Michal Kuba:8.8.2015 11:54

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
Tvůrce
Avatar
Odpovídá na Michal Kuba
Michal Kuba:8.8.2015 11:59

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.