Zmena SQL dotazu na zaklade zaskrtnutecho checkboxu
- stefic
- Člen | 5
Zdravim vsechny,
chtel bych Vas poprosit o pomoc.
Resim ted z meho pohledu celkem banalni vec.
Mam stranku, ktera zobrazuje SELECT z databaze. Tento select mam momentalne
napsany staticky ve funkci renderDefault().
Na stranku jsem si pridal CheckBox, ktery by mel slouzit jako filtr pro tento
SELECT. Tzn neustale se mi zobrazuje puvodni select a ve chvili, kdy zaskrtnu
CheckBox tak by se zmenil SQL dotaz na DB ktery by vice specifikoval
muj dotaz.
Premyslel jsem tak, ze si v ramci tridy vytvorim globalni promenou
filterString, kterou v konstruktoru naplnim. Kdyz bych klikl na checkbox, tak
bych hodnotu v promenne filterString zmenil a stranka by me zacala zobrazovat
novy SELECT.
Toto mi samozrejme nefungovalo, protoze promene se tu nechovaji tak, ze by se
v ni drzela hodnota, kterou jsem do ni nejakym handlem ulozil.
Zacal jsem patrat a zjistil jsem, ze pro tyto ucely nette pouziva Sessions a Sections. Vytvoril jsem si proto v config.neon promenou
session:
myFilterString: ‚SELECT * FROM [table] WHERE [filter]=false‘
podle navodu ktery jsem nasel zde na strankach jsem se to snazil nalamat do meho kodu.
do konstruktoru tridy jsem tedy napsal
<?php
/**
* @persistent
*/
public $filterString;
public function __construct(\Dibi\Connection $connection,Nette\Http\Session $session)
{
$this->db = $connection;
$this->session = $session;
$this->section = $this->session->getSection('myFilterString');
$section['myFilterString'] = 'SELECT * FROM [table] WHERE [filter]=false';
$this->filterString = $section['myFilterString'];
}
?>
takto napsane se to tedy chova jako pred tim, s tim ze dotaz jiz nemam
napsany staticky, ale v promenne. Preklesleni prestava fungovat pokud do kodu
neodkomentuju prvni radek funkce a pise mi to UNDEFINED VARIABLE: SECTION.
Myslel jsem, ze kdyz uz to mam jednou defaultne napsane v Config.neon a pak to
jeste zapisu v konstruktoru tridy, tak by tam mela byt ulozena alespon
defaultni hodnota.
<?php
public function renderDefault()
{
//$section['myFilterString'] = 'SELECT * FROM [table] WHERE [filter]=false';
$this->filterString = $section['myFilterString'];
$this->data_db_DiB = $this->db->query($this->filterString);
}
?>
Pak bych rad funkci handleChangeFilterString zmenil podobu nastaveneho selectu a zobrazoval jina data. Coz me takto jak to mam take nefunguje. Ani pokud hodnotu ulozim do section, ani kdyz ji ulozim primo do promenne filterString.
<?php
public function handleChangeFilterString($internal)
{
//$this->filterString = 'SELECT * FROM [table] WHERE [filter]=true';
$section['myFilterString'] = 'SELECT * FROM [table] WHERE [filter]=false';
}
?>
Mohl bych vas poprosit ukazat co na takto jednoduchem priklade delam spatne? A jak se pracuje s promenyma, u kterych chci aby zustali ulozene po dobu co chci.
Diky moc za odpovedi