【问题标题】:CakePHP data not saving/adding to databaseCakePHP 数据未保存/添加到数据库
【发布时间】:2013-03-04 12:09:27
【问题描述】:

提交数据只会重新加载页面,CakePHP 不会给出任何错误或消息。 代码遵循与博客教程相同/相似的结构。

查看代码

        <?php
        echo $this->Form->create('Sm');
        echo $this->Form->input('recievers', array('rows' => '1'));
        echo $this->Form->input('subject');
        echo $this->Form->input('message');
        echo $this->Form->end('SEND');
        ?>

控制器代码

    public function send() {
    if ($this->request->is('sm')) {
        $this->Sm->create();
        if ($this->Sm->save($this->request->data)) {
            $this->Session->setFlash('Sms has been added to the database');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('Unable to send sms.');
        }
    }
}

型号代码

class Sm extends AppModel {
public $validate = array(
    'subject' => array(
        'rule' => 'notEmpty'
    ),
    'message' => array(
        'rule' => 'notEmpty'
    ),
    'recievers' => array(
        'rule' => 'notEmpty'
    )
); }

导出的 SQL

    CREATE TABLE IF NOT EXISTS `sms` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `subject` varchar(150) DEFAULT NULL,
  `message` text,
  `sender` varchar(50) DEFAULT NULL,
  `recievers` text,
  `sent` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

【问题讨论】:

  • 对这个问题投了赞成票,因为我看不出这个问题获得负分的直接原因。包含所有必需的代码,格式整齐,OP 正在尝试根据手册中的示例启动 CakePHP。
  • 谢谢好心的先生 :) 至于问题,我最后的回答是改用烘焙工具生成代码。以下建议的答案都没有成功。可能会花一些时间将我的原始代码与生成的代码进行比较以找到正确的答案。

标签: php sql cakephp


【解决方案1】:

您指定了错误的请求“方法”;

if ($this->request->is('sm')) {

应该是:

if ($this->request->is('post')) {

我怀疑您对 CakePHP 上的示例感到困惑,这些示例使用“post”模型。然而,这一行是检查用于访问页面的 请求类型,例如postgetput

通过检查正确的请求方法,CakePHP 只会在表单发送/提交时插入/更新数据,否则表单只是显示而不更新数据库

【讨论】:

  • 啊,是的!我对 post 模型和 post 方法感到困惑,整天都在为这个简单的错误拉头发。谢谢!
  • 也许帖子在示例中不是一个好名字:)
  • @arthur 不是真的。我看到其他人也对此感到困惑:)
【解决方案2】:

您忘记在模型中定义 name 属性。

var $name = 'Sm';

【讨论】:

【解决方案3】:

就在几分钟前,我遇到了同样类型的问题。我的问题更奇怪。在我的控制器中,我使用了这样的东西:

if( $this->MyModel->save( $this->request->data ) ) {
    //positive. proceed.....
}
else {
    //negative. show error
    pr( $this->MyModel->validationErrors );
}

如您所见,我已经处理了负面情况,但我仍然什么也看不到。即使在我的模型中,我也使用 beforeSave 和 afterSave 进行检查。在我的 beforeSave 模型中,我可以看到一个格式完美的数组可以保存,但 afterSave 没有触发,这意味着数据没有保存。因此我应该从我的控制器中看到错误。还是没有解决办法。

现在这就是我发现问题的方式。我检查了要保存数据的表。该表有很多具有 NOT NULL 属性的列。我保存的数据有一些具有 NULL 值的字段。所以理论上,我应该将控制器中的validationErrors视为一个原因,但不幸的是它没有显示出来。将这些字段设置为空解决了我的问题。所以我给你的建议是检查哪些字段可能有 NULL 值并设置那些可以为空的并确保 NOT NULL 字段有一些值。

希望这会有所帮助。干杯!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2021-10-27
    • 2013-10-24
    • 2014-04-26
    • 2012-08-08
    相关资源
    最近更新 更多