Ukládá se nula místo hodnoty z values
- Malakimek
- Člen | 9
Ahoj,
do formuláře načítám data z DB a ty chci následně uložit do jiné
tabulky. Vše proběhne, ale místo dat z value se mi uloží do tabulky nula.
Jsem z toho „jelen“. Předem díky za rady :-)
V šabloně mám:
<?php
{block #content}
{form pageEditForm}
{foreach $tasks as $task}
{input id_menu,value=>$task->id_menu}{$task->heading}
{input submit1}
{/foreach}
{/form}
{/block}
?>
v prezenteru
<?php
public function createComponentPageEditForm(){
$form = new AppForm;
$form->getElementPrototype()->class('ajax');
$form->addHidden("id_menu");
$form->addSubmit("submit1", "Uložit");
$form->onSuccess[] = callback($this, 'pageEditFormSubmitted');
return $form;
}
public function pageEditFormSubmitted(AppForm $form){
$values = (array) $form->values;
$this->textik = TextModel::addPridat($form->values->id_menu);
$this->flashMessage('Obsah stránky uložen ('.date('y-m-d H:i:s').')');
if(!$this->isAjax()) $this->redirect('this');
}
public function renderDefault()
{
//dáváš do šablony proměnnou
return $this->template->tasks = $this->textik= TextModel::getText();
}
?>
a v modulu
<?php
public static function getText(){
return $tasks = dibi::fetchAll("
SELECT *
FROM clanky
ORDER BY heading");
}
public static function addPridat($id_menu){
return $data = array(
'lang' => 'cs',
'menu'=>'1',
'clanek' =>$id_menu);
dibi::query('INSERT INTO `pages`', $data);
}
?>
- petr.pavel
- Člen | 535
Nějak ten tvůj kód nechápu. V modelu máš v addPridat
hned
na začátku return, takže dibi::query()
s INSERTem se vůbec
nevykoná, ne? Tak kde se ti co vkládá?
Jestli tohle je jen nějaký překlep a ve skutečnosti se volá, tak kde
jsou teda ty nuly? clanek
má hodnotu 0 místo nějaké jiné
hodnoty? Jak tu hodnotu plníš? V definici formuláře je to
hidden
a ty v šabloně ten jeden hidden prvek vypíšeš pro
každý task. Co to má za smysl? Nakonec stejně odešleš jen jeden (ten
poslední, o to se postará prohlížeč) a Nette si pohlídá, aby jeho
hodnota byla ta výchozí – kterou ty ale nikde nenastavuješ.
Nějak mi uniká smysl celého tvého konání.
Editoval petr.pavel (3. 12. 2012 17:16)
- mildabre
- Člen | 62
Už jsem Ti chtěl napsat, cože je to za třídu ten AppForm, ale koukám že ve verzi Nette 2.0.4 tato třída nahrazuje klasický Form, což je pro mne novinka. Form() či AppForm() na tom ale nezáleží. Nechápeš jak vlastně formuláře na úrovni HTML fungují.
Tím cyklem si vytvoříš sadu input-ů hidden plus nějaký text vedle vše odesílá jedno tlačítko. Ten formulář je zcela špatně konstruován.
Místo input hidden-ů použij třeba select, kde vypíšeš do klíčů $task->id_menu a pro popisku to $task->heading. Vše odešli jedním submit buttonem a je to.
Ten model je fakt špatně jak psali již kolegové.