Multiple input search v Nette
- Andurit
- Člen | 131
Ahojte,
snažím sa napísať nejaký multiple input search. Inak povedané užívateľ
ma k dispozícii niekoľko inputov napr : country, name, currency, gender.
Užívateľ môže vyplniť 1 alebo kľudne aj všetky inputy, výsledny select by mal vyzerať nejako takto:
SELECT * FROM table WHERE country ='.$country.' AND name = '.$name.' AND gender = '.$gender.'
Neviem ale úplne ako to mám zariadiť ak užívateľ vyplní trebars len 1 input. Môže mi niekto poradiť ako upravovať model v prípade, že užívateľ vyplní len niečo?
Vďaka
- Myiyk
- Člen | 321
Nepíšeš jaký nástroj používáš, proto odpovídám v takovéto univerzální formě.
Upozornění: Tento kód není bezpečný na SQL injection. Musíš
si ošetřit $country
, $name
a $gender
$sql = "SELECT * FROM table ";
$where = array();
if($country) {
$where[] = "country ='.$country.'";
}
if($name) {
$where[] = "name = '.$name.'";
}
if($gender) {
$where[] = "gender = '.$gender.'";
}
if(count($where)) {
$sql .= "WHERE " . implode(" AND ", $where);
}
Editoval Myiyk (26. 7. 2015 13:46)
- Andurit
- Člen | 131
Ak správne rozumiem tak ako si to napisal by teda mal vyzerať model, dajme
tomu ho pomenujeme findMatch:
Zatiaľ čo v presentri by som mal mať zrejme odescepovať premenné a
následne si len volať model niecim ako:
function renderSearch($country, $name, $gender)
{
// escape premennych
$this->template->search = $this->searches->findMatch($country, $name, $gender);
}
Editoval Andurit (26. 7. 2015 14:04)
- ondrej256
- Člen | 187
V případě Nette Database
public function findMatch($country = NULL, $name= NULL, $gender = NULL)
{
$selection = $this->database->table('table');
if ($country) {
$selection = $selection->where('country', $country);
}
if ($name) {
$selection = $selection->where('name', $name);
}
if ($gender) {
$selection = $selection->where('gender', $gender);
}
return $selection;
}
- Andurit
- Člen | 131
používam
Nette\Database\Context
Ohľadom Myiykovej odpovede, opravte ma ak sa mýlim toto zabezpeci vždy jedno hľadanie. Tj skontroluje ktore pole užívateľ vyplnil a podla toho hľadá Čo ale ak užívateľ vyplní 2 polia, alebo 3 polia? Ja práve hľadám spôsob ako byť v tomto dynamický