getValues() nevracia prazdne (NULL) hodnoty

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

Ahojte,

Mam mensi problem s Nette Forms. Funkcia getValues mi vracia iba nenulove hodnoty. Problem je v tom, ze ak nieco editujem, zmazem tomu vo forme hodnotu a vlozim hodnoty getValues rovno do databazy, tak mi logicky polozky ktore boli vo forme zmazane z databazy nezmaze. Forma prazdne hodnoty odosle (kontroloval som cez Live HTPP Headers co sa odosiela).

$values = $form->getValues();
dibi::query('UPDATE [project] SET ', $values, 'WHERE id = %i', $values['id']);

Obsah HTPP Headers:
project_name=test&comment=&customer=test&id_customer=37&ecep=&id_other=123device_volume=300&date_deadline=06%2F29%2F2011&date_revised_deadline=06%2F30%2F2011&send=Save&_form_=add_edit&id=523&action=edit

Obsah $values:
NArrayHash Object
(
[project_name] ⇒ test
[id_customer] ⇒ 37
[id_other] ⇒ 123
[device_volume] ⇒ 300
[date_deadline] ⇒ 2011–06–29
[date_revised_deadline] ⇒ 2011–06–30
[id] ⇒ 523
[date_start] ⇒ 2011–06–15
)

Diky

Bazylek
Člen | 22
+
0
-

Ahoj, nevím jak zpracováváš data před odesláním do Modelu. Já to řeším tímto způsobem a funguje to.

V presenteru data zpracovávám než je odešlu do Modelu

  //metoda pro zpracování formulaře po kliknutí na odeslat
   public function editFormSubmitted(\Nette\Forms\SubmitButton $btn) {
       $model = new \ProjektModel();  // vytvoříme novou instanci třídy ClankyModel
       $form = $btn->getForm();
       $id = $this->getParam('idprojektu');

       $values = $form->getValues();

       $values['idproj'] = $id;
       $values['projvlozil'] = $user->getId();	//id přihlášeného vkladatele - uvšech nastav třeba prázdné parametry a uvidíš co ti to udělá
       $values['projvlozen'] = new \DateTime(); // aktuální čas
       $values['projstav'] = 'ano';  // nastaví na hodnotu NE do doby než bude článek schválen


      if ( $model->save($id, $values) ) {

         $this->flashMessage('Uloženo', self::FLASH_GREEN);
         $this->redirect('default');
      } else {
         $form->addError('Nepodařilo se uložit záznam');
      }
   }

V modelu používám tento kod

 const PROJEKT_TABLE = 'projekt';

 public function add($data) {
      \dibi::query('INSERT INTO [' . self::PROJEKT_TABLE . '] ', $data);
      return \dibi::insertId();
   }

 // Pokud zaznav databazi existuje, uloží jej jinak zavolá metodu add a uloží nový záznam
   public function save($id, array $data) {

      if ($id === NULL)
          $id = $this->add($data);

      try {
         \dibi::query('UPDATE [' . self::Projekt_TABLE . '] SET', $data, 'WHERE idcl=%i', $id);
      } catch (DibiDriverException $e) {
         return FALSE;
      }

      return TRUE;
   }

Jsem začátečník a asi ti líp neporadím. Možná že ti chybí před dibi lomítko.

fliper333
Člen | 36
+
0
-

Diky za radu, chyba bola medzi klavesnicou a stolickou :)

Ja som si totizto tie hodnoty pomazal sam inde v kode (pri vkladani noveho projektu sa mi to hodilo). No a samozrejme som zabudol ze som tam take nieco dal :)

foreach ($values as $key => & $val) if ($val === '') unset($values[$key]);
fliper333
Člen | 36
+
0
-

Trosku som kod upravil a teraz sa to sprava presne tak ako potrebujem. Mozno sa bude niekomu hodit.

foreach ($values as $key => & $val) if ($val === '') $values[$key] = NULL;
Bazylek
Člen | 22
+
0
-

Nemáš zač, já se taky učím a je ještě hodně věcí, které z vlaken vůbec nechápu. Není nad to, programovat nad ránem. Měj se