Hromadné přihlášení osob na akci

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

Zdravím na fóru,
snažím se vytvořit formulář, který má sloužit k nahlášení účasti konkrétních osob na konkrétní akci. Funkční řešení mám takové, že mám ve formuláři rozbalovací seznam s jednotlivými akcemi, které se plní z databáze a druhý rozbalovací seznam se jmény osob, který se také plní z databáze. Moc se mi tento způsob nelíbí, protože takto musím na konkrétní akci přidávat osoby jednu po druhé, rád bych to prováděl nějak hromadně. Zkoušel jsem pro výběr osob použít checkboxlist, ale nedařilo se mi formulář uložit do databáze. Je pro tuto situaci vhodné použít checkboxlist, nebo multiselect? Tabulka v databázi, do které formulář ukládám má tři sloupce (id, akce, osoba). Díky za nasměrování.

Editoval Username (31. 12. 2016 6:33)

CZechBoY
Člen | 3608
+
0
-

Asi bych si udelal detail akce (abys nemusel furt zaklikavat tu akci) a k tomu multiselectbox pomoci naseptavani. Pokud je malo uzivatelu tak muzes pouzit i ten checkboxlist/multiselect bez naseptavani.

Editoval CZechBoY (30. 12. 2016 21:40)

Username
Člen | 36
+
0
-

Akcí je asi 10 do roka a osob kolem 30/akce. Když použiju checkboxlist nebo multiselect mám problém s uložením formuláře do databáze. Data z formuláře se chtějí uložit do jednoho řádku takto VALUES (akce1, osoba1, osoba2, osoba3, …), ale já bych potřeboval je uložit do tří řádku VALUES (akce1, osoba1), (akce1, osoba2), (akce1, osoba3), …). Nevím si s tím moc rady. Díky za pomoc.

Zkusil jsem hodnoty z checkboxlistu zpracovat přes funkci serialize(), ale mám obavu, abych si do budoucna nepřidělal zbytečné problémy.

Editoval Username (31. 12. 2016 9:11)

Mysteria
Člen | 797
+
0
-

Takže nevíš jak získaná data z formuláře správně uložit do databáze? V tom případě by se hodilo sem dát kód, kterým se to pokoušíš udělat.

Username
Člen | 36
+
0
-
protected function createComponentPrihlaskaForm()
{
$form = new Form;

$form->addSelect('akce', 'Akce:', $seznam_akci)
->setRequired();

$form->addCheckboxList('osoba', 'Osoba:', $seznam_osob)
->setRequired();

$form->addSubmit('send', 'Odeslat');

$form->onSuccess[] = [$this, 'prihlaskaFormSucceeded'];
return $form;
}

public function prihlaskaFormSucceeded($form, $values)
{
$post = $this->database->table('prihlaska')->insert($values);
}
$this->redirect('default');
}
Mysteria
Člen | 797
+
0
-

Tak takhle jednoduše to asi nepůjde, nevím v jakém formátu vrací data CheckBoxList, ale jestli je to jako MultiSelectu ve formě pole vybraných údajů, tak bych zkusil něco jako:

foreach ($values->osoba as $osoba) {
	$this->database->table('prihlaska')->insert(['akce' => $values->akce, 'osoba' => $osoba]);
}
Username
Člen | 36
+
0
-

Funguje, mockrát díky za pomoc!

Mysteria napsal(a):

Tak takhle jednoduše to asi nepůjde, nevím v jakém formátu vrací data CheckBoxList, ale jestli je to jako MultiSelectu ve formě pole vybraných údajů, tak bych zkusil něco jako:

foreach ($values->osoba as $osoba) {
	$this->database->table('prihlaska')->insert(['akce' => $values->akce, 'osoba' => $osoba]);
}