Ukládá se nula místo hodnoty z values

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

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);

	}
?>
Jan Endel
Člen | 1016
+
0
-

Datový typ sloupců?

Malakimek
Člen | 9
+
0
-

Kromě langu (ten je varchar), jsou všechny int.

Editoval Malakimek (3. 12. 2012 14:56)

petr.pavel
Člen | 535
+
0
-

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
+
0
-

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é.