getValues() nevracia prazdne (NULL) hodnoty
 
- fliper333
- Člen | 36
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
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
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]);