Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai un petit problème avec mon formulaire dans un module tout simple de gestion de news. Systématiquement, lorsque je veux éditer éditer ou supprimer une actualité, j'ai ce message d'erreur :
Notice: Use of undefined constant row - assumed 'row' in app\application\models\DbTable\News.php on line 18
Voici la classe en question, News.php
public function getNews($id)
{
$id = (int)$id;
$row = $this->fetchRow('test_id = '. $id);
LIGNE 18
if (!row)
{
throw new Exception("Impossible de trouver l'id $id");
}
return $row->toArray();
}
function updateNews($id, $champ1, $champ2, $champ3, $champ4)
{
$data = array(
'test_champ1' => $champ1,
'test_champ2' => $champ2,
'test_champ3' => $champ3,
'test_champ4' => $champ4
);
$this->update($data, 'test_id = '. (int)$id);
}
(...)
Formulaire d'ajout/d'édition
class Form_News_Add extends Zend_Form
{
public function __construct($options = null)
{
parent::__construct($options);
$this->setName('news');
$id = new Zend_Form_Element_Hidden('id');
$champ1 = new Zend_Form_Element_Text('champ1');
$champ1->setLabel('champ1')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
(champ2, champ3... etc.)
$submit = new Zend_Form_Element_Submit('submit');
$submit->setAttrib('id', 'submitbutton');
$this->addElements(array($id, $champ1, $champ2, $champ3, $champ4 $submit));
IndexController (avec EditAction)
public function editAction()
{
$this->view->title = "Editer";
$this->view->headTitle($this->view->title, 'PREPEND');
$form = new Form_News_Add();
$form->submit->setLabel('Save');
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
// On récupère l'id directement dans l'url
$id = $this->_request->getParam('id', null);
$champ1 = $form->getValue('champ1');
$champ2 = $form->getValue('champ2');
$champ3 = $form->getValue('champ3');
$champ4 = $form->getValue('champ4');
// Requête de mise à jour
$news = new Model_DbTable_News();
$news->updateNews($id, $champ1, $champ2, $champ3, $champ4);
$this->_redirect('/');
} else {
$form->populate($formData);
}
} else {
$id = $this->_request->getParam('id', 0);
if ($id > 0) {
$news = new Model_DbTable_News();
$form->populate($news->getNews($id));
}
}
}
J'aurais aussi aimé comment éditer ma news sans récupérer l'id par l'url. Car dans le cas présent je ne me sers pas de "$id = new Zend_Form_Element_Hidden('id');" puisque je récupère l'url avec "$id = $this->_request->getParam('id', null);"
A noter que l'édition marche correctement à part ça :p
Merci
Dernière modification par miboo (02-06-2009 10:24:10)
Hors ligne
if (!$row)
As-tu lu l'erreur générée ?
Hors ligne
miboo a écrit:
J'aurais aussi aimé comment éditer ma news sans récupérer l'id par l'url. Car dans le cas présent je ne me sers pas de "$id = new Zend_Form_Element_Hidden('id');" puisque je récupère l'url avec "$id = $this->_request->getParam('id', null);"
Pourquoi ne pas passer l'id en paramètre ? C'est pourtant le plus simple, non ?
Hors ligne
vg33 a écrit:
miboo a écrit:
J'aurais aussi aimé comment éditer ma news sans récupérer l'id par l'url. Car dans le cas présent je ne me sers pas de "$id = new Zend_Form_Element_Hidden('id');" puisque je récupère l'url avec "$id = $this->_request->getParam('id', null);"
Pourquoi ne pas passer l'id en paramètre ? C'est pourtant le plus simple, non ?
Hmm, en fait j'ai rien contre. Mais je me demandais si ce n'était pas recommandé de ne pas récupérer d'arguments via l'url si possible.
Pour le message d'erreur je l'ai bein lu , mais je t'avoue que ces morceaux de programmes sont inspirés d'un tutoriel qui est censé marcher...
Hors ligne
Pour les paramètres : il ne faut jamais faire confiance aux données utilisateur, que ce soit en GET, POST ou COOKIE. Il faut partir du principe que l'utilisateur peut tout modifier.
Conséquence : tu dois filtrer et valider toutes les données GPC. De cette façon, tu te fiches de la méthode employée, tu prends le plus simple pour toi.
Pour moi, la plupart de mes actions se font en cliquant sur des liens images (icônes). J'utilise donc du GET, que je valide strictement (transtypage + validation métier). Ce n'est pas plus dangereux que du POST ou de COOKIE.
Hors ligne
vg33 a écrit:
Pour les paramètres : il ne faut jamais faire confiance aux données utilisateur, que ce soit en GET, POST ou COOKIE. Il faut partir du principe que l'utilisateur peut tout modifier.
Conséquence : tu dois filtrer et valider toutes les données GPC. De cette façon, tu te fiches de la méthode employée, tu prends le plus simple pour toi.
Pour moi, la plupart de mes actions se font en cliquant sur des liens images (icônes). J'utilise donc du GET, que je valide strictement [b](transtypage + validation métier)[/b}. Ce n'est pas plus dangereux que du POST ou de COOKIE.
Je vais voir de ce côté là alors
Edit: j'ai rien dis, j'avais le nez devant ... le $ oublié
Dernière modification par miboo (02-06-2009 10:23:53)
Hors ligne
Pages: 1