Форма Zend Edit — не могу обновить существующие данные

Я пытаюсь построить функцию редактирования для этой формы:

class Application_Form_ContactMethodSelected extends Zend_Form{

public function init()
{

$this->CompanyName = new Zend_Form_Element_Text('CompanyName', array('label' => 'Firma', 'required' => true));

$this->submit = new Zend_Form_Element_Submit('submit');
$this->submit->setLabel('Fertig');

$this->addElements(array($this->CompanyName,$this->submit));

}
}

Это мой контроллер:

class UploadController extends Zend_Controller_Action{
protected $clientTable;
protected $model;
protected $id;

public function init(){
$request = $this->getRequest();
if ($request->isGet())
{
$this->id = (int)$request->getParam('id');
}
$this->clientTable = new Application_Model_DbTable_ClientTable();
$this->model = new Application_Model_DbTable_ClientTable();
$this->formClient = new Application_Form_ContactMethodSelected();

}

public function editAction()
{
if($this->id){
$results = $this->model->find($this->id);
$data = array();

//put results into our data array as name => value

foreach($results as $r)
{
$data['CompanyName'] = $r['CompanyName'];

}

//populate  form

$this->formClient->populate($data);

}

if ($this->_request->isPost()) {
$request = $this->getRequest();
if ($request->isGet())
{
$this->id = (int)$request->getParam('id');
}

$client =  $this->clientTable->fetchRow(array('ID' =>$this->id));
if($this->id){$formClientData = $this->_request->getPost();}

// write to DB

$client->CompanyName = $request->getPost('CompanyName');//if($results){
// $where = $this->clientTable->getAdapter()->quoteInto('id = ?',$this->id);
//$client->update($client,$where);
//$this->clientTable->update($client, $where);//$this->clientTable->update($data, $where);
$client->save();

$this->_redirect('client/index');
exit;
}

$this->view->formClient = $this->formClient;

}
}

Я могу обновить свою первую запись в БД id=0,
Но тогда я прошу /uploadcontroller/edit?id=2 Я все еще обновляю id=1,

Благодарю.

0

Решение

Вот ошибка в вашем коде.

Вы сначала проверяете запрос isPost() затем снова проверка запроса isGet() который терпит неудачу (так как оба не могут быть правдой одновременно) и ваш $this->id переменная не инициализируется. (поэтому неверная запись обновляется)

if ($this->_request->isPost()) {
$request = $this->getRequest();
if ($request->isGet())
{
$this->id = (int)$request->getParam('id');
}
.....

просто избавиться от запроса isGet() состояние и использование id параметр сразу.

Образец кода:

if ($this->_request->isPost()) {
$this->id = (int)$this->_request->getParam('id');
$client =  $this->clientTable->fetchRow(array('ID' =>$this->id));
.....
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]