如何将yii中的输入保存到数据库中

时间:2014-04-28 06:43:33

标签: php mysql database yii

我有这个代码我试图从我制作的表格中保存内容和标题。它有一个ID,自动增加数据库中添加的ID号,但标题和内容不是&不能保存在数据库中。如果我做错了,你可以查看我的代码吗?或者我缺乏的东西。

这是我的模型ContentForm.php

<?php
class ContentForm extends CActiveRecord{
public $content;
public $title;

public function tableName(){
    return 'tbl_content';
}
public function attributeLabels()
{
    return array(
        'contentid' => 'contentid',
        'content' => 'content',
        'title' => 'title',
        // 'email' => 'Email',
        // 'usrtype' => 'Usrtype',
    );
}

这是我的观点content.php

<div>
<p>User: <a href="viewuserpost">
<?php 
echo Yii::app()->session['nameuser']; 
 ?>
 </a>
 </p>
 </div>
 <h1>Content</h1>

 <?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'contact-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
));
?>

 Title:
 <div class="row">
 <?php
echo $form->textfield($model,'title');
 ?>

 </div>
 </br>
 Body:
 <div class="row">
 <?php 
echo $form->textArea($model,'content',array('rows'=>16,'cols'=>110));
 ?>
 </div>

 <div class="row buttons">

 <?php 
echo CHtml::submitButton($model->isNewRecord? 'Create':'Save'); 
 ?>

 </div>

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

这是我的sitecontroller.php中的内容操作

public function actionContent(){

    $model=new ContentForm;

        if(isset($_POST['ContentForm'])) {

            $model->attributes=$_POST['ContentForm'];
            if($model->save())
            $this->redirect(array('content','contentid'=>$model->contentid));
            $this->redirect(array('content','title'=>$model->title));
            $this->redirect(array('content','content'=>$model->content));

            }

    $this->render('content',array('model'=>$model));        

}

请帮忙。

2 个答案:

答案 0 :(得分:2)

删除

public $content;
public $title;

来自你的班级。

Yii使用PHP魔术方法。当您向类添加属性时,PHP不会调用它们,而是引用您明确写入的属性。

此外,如果您使用$model->attributes=$_POST['ContentForm'];,则应添加一些验证。另一种变体是使用不安全的$model->setAttributes($_POST[ContentForm], false),其中false告诉Yii设置所有属性,而不仅仅是被认为是安全的。

注意,attributes不是真正的Model属性,这是通过魔术方法访问的虚拟属性。

此外,您不需要三次重定向。这是HTTP重定向到其他页面。这一次,您应该只指定模型视图操作的路由及其参数,例如id。像这样$this->redirect(array('content/view','id'=>$model->contentid));

当然,最简单的方法是使用Gii创建新的模型和控制器。

答案 1 :(得分:0)

您可能错过了规则,请在您的模型ContentForm.php

中添加此规则
public function rules()
{
    return array(
       array('content,title', 'safe'),
    );
}

有关模型验证的更多信息

http://www.yiiframework.com/wiki/56/reference-model-rules-validation/