提交表单文本字段后的Yii框架未在数据库中更新

时间:2012-05-23 14:06:30

标签: mysql yii

我对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'),
);

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

提前谢谢你, 干杯, Mahsa

3 个答案:

答案 0 :(得分:6)

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

array('presentation','safe')

答案 1 :(得分:0)

我发现表单没有正确提交的问题,我在这里添加它以防任何人遇到同样的问题:

我已经覆盖了之前的保存,但我想稍后完成它,所以它不会撤回任何东西:

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

    }

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

答案 2 :(得分:-1)

试试这个..

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,
    ));

希望它对你有用..