Jak řešíte vyhodnocení zaškrtávacích polí v dibi?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
czhyenacz
Člen | 12
+
0
-

Ahoj, snažím se vyrobit něco jako třídění katalogu. V presenteru mám nastavený formulář, který vrací tag, který se porovnává u třech tagů u produktu v databázi a navíc je tam několik zaškrtávací polí , kterýma se budou ještě třídit podle kategorie a vrací standartně TRUE.
Podlše dokumentace jsem udělat přes arry třídění tagů.

public static function fetchVysledekztag2($tag,$doutniky,$sport) {
       return dibi::fetchAll('
            SELECT *
            FROM [darky] WHERE  (%or)   '
                    ,  array(
    array('tag1 = %s', $tag),
    array('tag2 = %s', $tag),
   array('tag3 = %s', $tag),
    )
  );}

 \--

i přidání jedné podmínky, která vyhodnocuje zaškrtnutí pole nějak funguje - vypíše jen doutníky, když je zaškrtlé TRUE (když dám false tak to hodí nějaký error, ale na to je času dost ))
public static function fetchVysledekztag2($tag,$doutniky,$sport) {
       return dibi::fetchAll('
            SELECT *
            FROM [darky] WHERE  (%or)   and %if  '
                      ,  array(
    array('tag1 = %s', $tag),
    array('tag2 = %s', $tag),
   array('tag3 = %s', $tag),
    )
                ,$doutniky=="TRUE",'kategorie="Doutníky"'
               /* nebo ,$doutniky="TRUE",'kategorie="Doutníky"'  ?? - nehází to error(check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2), ale když změní na false, tak se nic nestane */
  );
             }

ale kdybych chtěl přidat ostatní podmínky na třídění

public static function fetchVysledekztag2($tag,$doutniky,$sport) {
       return dibi::fetchAll('
            SELECT *
            FROM [darky] WHERE  (%or)   and %if  and %if'


        ,  array(
    array('tag1 = %s', $tag),
    array('tag2 = %s', $tag),
   array('tag3 = %s', $tag),
    )

               ,$doutniky=="TRUE",'kategorie="Doutníky"'
               ,$sport=="TRUE",'kategorie="Sport"'

  );
             }

tak mi ladička hází pro mě skoro nepochopitelný error.

"  You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and 1 kategorie='Sport'' at line 2 "

podle mě musí jít o nějaká pravidla pro přidávání více podmínek if . Víte o nějakých? vůbec nic nemůžu najít. A jak řešíte zaškrtávací pole přes dibi VY? Díky za případnou pomoc. Myslim, že by to pomohlo nejen mě. Metal

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Chyba není tak nepochopitelná, znamená pouze, že výsledný SQL dotaz není platný :). Každopádně tohle patří spíš na dibi fórum.

czhyenacz
Člen | 12
+
0
-

.. no to my moc nepomohlo ( ; já bych očekával něco ve stylu

if('%b=1',$doutniky) {'kategorie="Doutníky"'}

(viz. těch pár řádků dokumentace, co je).
vůbec to ale nejde. fakt žádná idea? Podle mě nette zápis v dibi dost ovlivňuje, proto myslím, že to patří sem. Jinak myslím, že podmínky jsou jedna ze základních věcí.. tak by to snad neměl být problém, Děkuji

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Uvedený kód skutečně s Nette nijak nesouvisí, především tak chyba ne. Ač od stejného autora, jsou to odlišné knihovny. Odpověděl jsem podrobněji na dibi fóru.