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