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