php - 实体 CRUD 操作 - 编辑(更新)问题

标签 php mysql zend-framework crud

我正在努力学习有关 Zend Framework 的一些知识,但我被困在如此简单的操作上,例如“编辑”数据库条目。

我在 MySQL 数据库中有联系人列表,我的目的是用一行中的信息填写表格,编辑它并将其保存回数据库(更新语句)。我尝试了几乎所有想到的东西,查看了谷歌和有关 ZF 的书籍,但始终存在一些问题。此时,当我想要更新时,zf 和 mysql 将创建新的数据库条目,并填充新的 id 和编辑的信息,但这显然不是我想要做的,因为我得到的不是数据库中的一个更新条目两个 - 旧的和具有更新信息的新的。

这是我的代码的重要部分...请看一下,我不知道我在这里遗漏了什么。

部分索引 Controller :

public function createcontactAction()
{
    $createContactForm = $this->_helper->_formLoader('addContact');
    $this->view->addContactForm = $createContactForm;
}

public function editcontactAction()
{
    $id = $this->getRequest()->getParam('id');

    $contactModel = new Application_Model_Contacts();
    $contactRow = $contactModel->find($id)->current();

    $addContactForm = $this->_helper->formLoader('addContact');

    if ($this->getRequest()->isPost() && $this->getRequest()->getPost('send', false) !== false) {
        if ($addContactForm->isValid($this->getRequest()->getPost())) {

            $contactRow->setFromArray($addContactForm->getValues());

            $contactRow->save();

            $this->_redirect('/index/editcontact/id/' . $contactRow->id);
        }
    } else {
        $addContactForm->populate($contactRow->toArray());
    }

    $this->view->addContactForm = $addContactForm;
}

public function savecontactAction()
{
    $form = $this->_helper->formLoader('addContact');

    if ($this->getRequest()->isPost() && $this->getRequest()->getPost('send', false) !== false) {
        if ($form->isValid($this->getRequest()->getPost())) {
            $contactModel = new Application_Model_Contacts();
            $contactRow = $contactModel->createRow($form->getValues());
            $contactRow->save();

            $this->_redirect('/index/editcontact/id/' . $contactRow->id);
        }
    }
    $this->view->form = $form;
}

表单 - 重要的部分:

类 Application_Form_AddContact 扩展 Zend_Form {

public function init()
{


    $this->setAction('/index/savecontact');
    $this->setMethod(Zend_Form::METHOD_POST);
    $this->setAttrib('id', 'index_savecontact');

    $contactFirstName = new Zend_Form_Element_Text('first_name', array('size'=>32, 'maxlength'=>64, 'label'=>'Křestní', 'required'=>false));
    $contactLastName = new Zend_Form_Element_Text('last_name', array('size'=>32, 'maxlength'=>64, 'label'=>'Přímění', 'required'=>true));

.
.
.

    $contactNotes = new Zend_Form_Element_Textarea('notes', array('cols'=>32, 'rows'=>1, 'label'=>'Poznámky', 'required'=>false));

    $contactSend = new Zend_Form_Element_Submit('send', array('label'=>'Odeslat'));

    $this->addElements(array ($contactFirstName, $contactLastName, $contactStreet, $contactHouseNumber, $contactCity, $contactZipCode, $contactCountry,
            $contactPhoneNumber, $contactMobileNumber, $contactEmail, $contactWebPage, $contactCrn, $contactVat, $contactNotes, $contactSend));

非常感谢!

(如果您还需要帮助我,请直接提出)

编辑:

这里是联系人模型:

class Application_Model_Contacts extends Zend_Db_Table_Abstract
{
    protected $_name    = 'contacts';
    protected $_primary = 'id';

}

最佳答案

我对 Zend_Db_TableZend_Db_Table_Row 有点生疏(我假设这是你的模型使用的),但我敢打赌你是在您的 $contactRow 中缺少主键 (PK) - 我猜您可能没有通过表单提供它,因为我看到您是通过 GET 获得的。因此,只需将 $contactRow 中的 id 设置为 $id 就可以了。

关于php - 实体 CRUD 操作 - 编辑(更新)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8938739/

相关文章:

php - select 语句返回一列多行。我必须将这些值存储到一个变量中以供将来使用 sql 使用

mysql - C API 用于连接 C & SQL 数据库

php - 错误 : fetching data from mysql and showing in on the web

php - 为 Zend_Soap 服务指定 SOAP 头

php - Zend_Validate_Date 不能正常工作

javascript - 在js中读取php变量?

php - 当 websocket 客户端太慢时 websocket 将如何工作?

php - Zend_Http_Client 不存储 cookie

php - <script> document.location.href ='' ;</script> & 转到页面相关问题

mysql - 在可用维护时段之外升级 AWS Aurora MySQL