Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je voudrais effectuer une mise à jour sur une entrée via un formulaire.
Le code que j'utilise pour ce faire:
$id = $params['id']; $this->_yearTable- = new TYear(); $year = $this->_yearTable->find($id)->current(); $form = new Zfdev_Form_Year(); $form->setAction($this->view->url(array('module'=>'admin', 'controller'=>'year', 'action'=>'update', 'id'=>$id), 'default', true)); $form->setDefaults($year->toArray()); if($this->getRequest()->isPost() && $form->isValid($_POST)) { $values = $form->getValues(); $year->setFromArray(array_intersect_key($values, $year->toArray())); $year->save(); }
Mais lorsque je veux mettre à jour, j'obtiens l'erreur suivante: "Cannot update entries " (à noter que je peux effectuer un 'insert' sans problème...).
Pouvez-vous m'aider ?
Merci,
auré
Hors ligne
Hello,
1. L'array_intersect_key n'est plus nécessaire depuis un moment (à moins d'être sur une ancienne version ZF)
2. Ce message n'est pas un message ZF (ou alors tu ne l'as pas reproduit exactement). Ce n'est pas un message de ton SGBD ?
A+
Hors ligne
Bonjour,
merci mikaelkael.
Voici plus d'info sur l'erreur que je rencontre.
Exception information: Message: Cannot update entries Stack trace: #0 C:\wamp\www\library\Zend\Db\Table\Row\Abstract.php(546): TYear->update(Array, Array) #1 C:\wamp\www\library\Zend\Db\Table\Row\Abstract.php(420): Zend_Db_Table_Row_Abstract->_doUpdate() #2 C:\wamp\www\website\application\admin\controllers\YearController.php(72): Zend_Db_Table_Row_Abstract->save() #3 C:\wamp\www\library\Zend\Controller\Action.php(503): Admin_YearController->updateAction() #4 C:\wamp\www\library\Zend\Controller\Dispatcher\Standard.php(285): Zend_Controller_Action->dispatch('updateAction') #5 C:\wamp\www\library\Zend\Controller\Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #6 C:\wamp\www\website\index.php(54): Zend_Controller_Front->dispatch() #7 {main} Request Parameters: array(6) { ["module"]=> string(5) "admin" ["controller"]=> string(4) "year" ["action"]=> string(6) "update" ["id"]=> string(1) "1" ["yea_value"]=> string(4) "2002" ["submit"]=> string(2) "OK" }
Merci pour votre aide,
auré
Hors ligne
Hello,
Au hasard un "yea" au lieu de "year" dans ton form.
A+
Hors ligne
Salut,
non, le 'yea' est normal, je préfixe chaque champs de ma table par les 3 premières lettres de celle-ci.
Y a-t-il la possibilité de voir la requête 'update' qui sera utilisée ?
Merci.
auré
Hors ligne
Bonjour,
si je remplace le code effectuant la mise à jour par le code suivant, ça fonctionne:
if($this->getRequest()->isPost() && $form->isValid($_POST)) { $db = Zend_Db_Table::getDefaultAdapter(); $data = array('yea_value'=>$params['yea_value']); $n = $db->update('year', $data, "yea_id=$id"); }
Mais mon but étant de tester et faire fonctionner la mise à jour en utilisant des objets Zend_DB_Table_Abstract, ça ne répond pas à ma question...
Je suppose que ça doit être possible avec un code ressemblant à mon premier post...
Merci,
auré
Hors ligne
Pages: 1