Strata dat z form po odolani cez callback
- folvo
- Člen | 16
Zdravim nette komunitu.
chcel by som Vas poprosit o radu pri rieseni problemu so stratenymi datami
odoslanymi z formularu.
Formular je vytvarany nasledovne
public function createComponentOdpovedForm($name = 'Elearning')
{
$area = 19;
$form = new NAppForm($this, $name);
$vyplnfields = TimanModules::getslideformfield($this->slideid);
// manualne vytvorena textarea, ktora sa posle po submit form
$form->addGroup('')
->setOption('description', 'aaa');
$form->addTextarea($area, '')
->addRule(NForm::FILLED, 'Vyplňte text.')
->setEmptyValue('jano');
//nacita z databazy polia, ktore sa maju zobrazit
foreach($vyplnfields as $record)
{
// START pridanie textarea do formulara s vyplnenym alebo prazdnym textom podla toho ci existuje uz nejaka odpoved alebo nie
if ($record['slidetype'] == 'odpoved')
{
$form->addGroup('')
->setOption('aaa', $record['text']);
// hlada v DB ci existuje nejaka odpoved, ktora sa ma vlozit do text area
$countanswer = TimanModules::getcountslidefieldanswer($record['slidefieldID'], $this->userid);
if ($countanswer[0]['count_all']>0)
{
// ak sa odpoved najde, nacita ju z DB a vlozi do text area
$lastanswer = TimanModules::getlastslidefieldanswer($record['slidefieldID'], $this->userid);
$form->addTextarea($record['slidefieldID'], '') //$key['slidefieldID']
->addRule(NForm::FILLED, 'Vyplňte text.')
->setEmptyValue($lastanswer[0]['answer']); //$lastanswer[0]['answer']
}
else
// ak sa odpoved nenajde, textarea ostava prazdna
{
$form->addTextarea($record['slidefieldID'].'a', '')
->addRule(NForm::FILLED, 'Vyplňte text.');
}
}
}
$form->addImage('odeslat', 'images/p03.jpg', 'Odoslat');
$form->onSubmit[] = callback($this, 'homeFormSubmitted');
$form->addProtection('Prosím odošlite formulár znova (bezpečnostný token expiroval).');
return $form;
}
po submite sa data odoslu do
public function homeFormSubmitted($form)
{
$formValues = $form->getValues();
var_dump($form);
var_dump($formValues);
exit;
}
vo var_dumpe $formValues mam len obsah textarea, ktora je vytvorena v pred foreach.
Pri zobrazeni formulara cez web vidim spravne vytvoreny formular, to znamena, ze mam tam jednu textareu z casti pred foreach a jednu textareau z casti vytvorenej vo foreach.
Problem je, ze po submit form do homeFormSubmitted dostanem data len z tej prvej textarei, ta druha sa mi vo var_dumpe neobjavi.
Skusal som si dat aj var_dump($form), a tam tie data vidim, len k nim neviem pristupit cez $form->getValues();
Viete mi s tymto problemom nejako poradit alebo ma nasmerovat?
pouzivam nette 0.9.6
Vopred Vam vsetkym dakujem.
Editoval folvo (3. 6. 2011 21:15)
- Filip Procházka
- Moderator | 4668
Nette komunita tě taky zdraví a odmítá to luštit, vpravo dole
u příspěvku máš editovat. /--
uprav na /--php
a
bude to obarvovat. Takhle se to fakt nedá číst… (ano jsem línej kopírovat
si to do IDE)
- bojovyletoun
- Člen | 667
Copak nemáš spuštěný netbeans permanentě?
k problému. Proběhne cyklus? Přenáší se správně proměnné $this->***id, resp mají správnou hodnotu před odesláním i po ? Vzhledem k tomu, že odeslání je signál a přenáší se vše, tak by se neměly ztrácet…
- folvo
- Člen | 16
Zdravim,
nepouzivam netbeans. Na pristup k datam pouzivam var_dump. Popravde moznosti
netbeans ani nepoznam.
K cyklu. Cyklus zbehne, pretoze formularove prvky, ktore su vo foreach bloku sa
vykreslia podla ocakavani.
Ako som pisal, ani data z toho formu sa nestratia, ale nemam ich pristupne cez getValues(), teda aby som bol presny, cez getvalues sa dostanem len k prvkom, ktore su pred blokom foreach.
skusal som taky maly experiment, ked som data, ktore ziskam z databazy a procesuju sa v foreach manualne vlozim do pola $record a zakomentujem foreach (je to 1 iteracia)
// foreach($vyplnfields as $record)
{
$record['slidetype'] = 'odpoved';
$record['slidefieldID'] = 18;
.
.
.
formular sa mi zobrazi presne ako v pripade
foreach($vyplnfields as $record)
{
.
.
.
len s tym rozdielom ze cez getvalues sa dostanem aj k formularovym prvkom, ktore boli povodne uzavrete vo foreach. Akoby bol problem ze v tom foreach je DIBI objekt, ale po obsahovej stranke su data v $record rovnake.