【问题标题】:Yii framework, after submiting the form text fields are not updated in databaseYii框架,提交表单后,数据库中的文本字段不更新
【发布时间】:2012-05-23 14:06:29
【问题描述】:

我对 MVC 和 Yii 框架很陌生,因此我的问题很可能很愚蠢。如果是这样,请提前接受我的道歉。

我想在网站的管理部分有一个表单,用户可以在其中发布一些内容。我按照示例博客的教程进行操作,但是似乎添加到数据库中定义为文本的字段(我的表单中的 textarea)的内容在提交表单后没有得到更新(其他一切正常)。这是我的表的 sql 语句:

CREATE TABLE `tbl_show` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `presentation` text,
    PRIMARY KEY (`id`),
    KEY `fk_tbl_show_tbl_season1` (`tbl_season_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

我使用 Gii 制作了我的模型和 CRUD,我只在这里添加了可能相关的部分:

在我的控制器上:

    public function actionCreate()
{
    $model=new Show;

    if(isset($_POST['Show']))
    {
        $model->attributes=$_POST['Show'];
        if($model->save())
                    {
                        $this->redirect(array('view','id'=>$model->id));
                    }   
    }
    $this->render('create',array(
        'model'=>$model,
    ));

还有我的 _form.php:

<div class="form">

 <?php $form=$this->beginWidget('CActiveForm', array(
 'id'=>'show-form',
 'enableAjaxValidation'=>false,
  )); ?>

<?php echo $form->errorSummary($model); ?>

    <div class="row">
    <?php echo $form->labelEx($model,'presentation'); ?>
    <?php echo $form->textArea($model,'presentation',array('rows'=>6, 'cols'=>50)); ?>
    <?php echo $form->error($model,'presentation'); ?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>

    <?php $this->endWidget(); ?>

    </div><!-- form -->

示范规则:

return array(
    array('id, presentation', 'safe', 'on'=>'search'),
);

我不明白为什么只有文本内容没有更新,它们在数据库中显示为空。

提前谢谢你, 干杯, 玛莎

【问题讨论】:

  • 如何在模型规则中定义“安全”列表?
  • array('id, title, presentation', 'safe', 'on'=&gt;'search')
  • 你有这个用于“搜索”场景,但你正在初始化你的模型而没有场景。您需要为“插入、更新”场景添加一个新的安全列表。
  • @bool.dev 更新和插入由框架自动处理,不一定要这样声明,但确实对程序员有帮助。
  • 这里一直令人困惑的是,必需的属性总是被视为安全的,这就是为什么声明和插入、更新安全列表不是标准的原因。但你需要它们。

标签: mysql yii


【解决方案1】:

你必须使属性安全。将此添加到您的 Show 模型验证规则中

array('presentation','safe')

【讨论】:

  • 现在我遇到了一个新问题,当我提交表单时,没有任何行添加到数据库中!而且我没有收到任何错误,我几乎没有改变任何东西......这可能是什么原因?
  • @MahsaTeimourikia 你能粘贴你的模型规则吗?
【解决方案2】:

我发现表单提交不正确的问题,我在这里添加以防万一有人遇到同样的问题:

我已经覆盖了 beforeSave,但我想稍后完成它,所以它不会返回任何东西:

protected function beforeSave() {
        if(parent::beforeSave())
        {
            if($this->isNewRecord)
            {
               //things that should be added by the system
            }
        }

    }

评论后一切正常。另外,正如你们建议的那样,我将未验证的字段添加到安全规则中。

【讨论】:

    【解决方案3】:

    试试这个..

    public function actionCreate()
    {
        $model=new Show;
    
        if(isset($_POST['Show']))
        {
            $model->attributes=$_POST['Show'];
    
            $save = $model->save(false);      // write like this...
            if($save)
                        {
                            $this->redirect(array('view','id'=>$model->id));
                        }   
        }
        $this->render('create',array(
            'model'=>$model,
        ));
    

    希望它对你有用..

    【讨论】:

    • 这有什么问题..谁可以否决这个答案..我认为他没有读过这个问题..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2021-09-20
    相关资源
    最近更新 更多