NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Dvojitý dotaz

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
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.