tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

dibi v nette a zaškrtávací políčka (podmínka if) – jak to děláte VY?

před 7 lety

czhyenacz
Člen | 12

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

před 7 lety

Vojtěch Dobeš
Člen | 1317

Nemělo by to být spíš takto?

public static function fetchVysledekztag2($tag,$doutniky,$sport)
{
    return dibi::fetchAll('
        SELECT *
        FROM [darky]
        WHERE
            (%or)
            %if AND kategorie = "Doutníky" %end
            %if AND kategorie = "Sport" %end
        ', array(
            array('tag1 = %s', $tag),
            array('tag2 = %s', $tag),
            array('tag3 = %s', $tag),
        ),
        $doutniky == "TRUE",
        $sport == "TRUE"
    );
}

před 7 lety

cosmo
Člen | 6

Nedalo by sa to vyriešiť cez dibi fluent ? Naozaj iba maly nastrel, presiel som to iba velmi zbezne:

<?php
$result = dibi::select('*')->from('darky');

// nette forms ??

// checkbox 'Doutniky'
if(isset($checkbox1)){
$result->where("kategorie = 'Doutniky'");
}

// checkbox 'Sport'
if(isset($checkbox2)){
$result->where("kategorie = 'Sport'");
}

$vysledok = $result->fetchAll();

?>

Editoval cosmo (16. 7. 2012 17:37)

před 7 lety

czhyenacz
Člen | 12

diky za pomoc – ta verze od vojtech.dobes je opravdu dobrá. Mám raději SQL.