php - 保存 'model attributes' 不起作用(需要帮助)

标签 php mysql yii yii-cmodel

我刚刚发现我的项目存在问题。它只是不将数据保存在数据库中。

我找不到问题出在哪里,请帮忙解决这个问题。

我的 Controller 代码

public function actionCreate()
{
    $model = new Ideyalar;
    // $this->performAjaxValidation($model);
    if(isset($_POST['Ideyalar']))
    {
        $model->attributes=$_POST['Ideyalar'];
        $model->istifade = "1";
        $model->idcontact = Yii::app()->user->getId();

        if($model->save()){
            $command = Yii::app()->db->createCommand();
            $command->insert ('mqrup', array(
                        'idperson'=> Yii::app()->user->getId(),
                        'idideya'=>$model->idideya)
                        );
            $command->update ('ideyalar',
                            ['status'=>1],
                            'idideya=:i', [':i'=>$model->idideya]
                        );
            $this->redirect(array('viewm','id'=>$model->idideya));
        }
    }

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

public function actionViewm ($id)
{
    $model1 = Ekspertiza::model()->idresult;

    $sql = Yii::app()->db->createCommand()
                ->select ('e.idideya, urey, azerreal, elmireal, resrent')
                ->from ('exresult e')
                ->join ('ideyalar i', 'e.idideya=i.idideya')
                ->where ('e.idideya=:ei', [':ei'=>$id])
                ->queryAll();

    $dataProvider = new CArrayDataProvider($seqele, [
        'keyField'=>'idideya',
        'sort'=> [
            'attributes' => [
                'idideya', 'urey', 'azerreal', 'elmireal', 'resrent'
            ],
        ],
    ]);

    $this->render('viewm',['model'=>$this->loadModel($id), 'model1'=>$model1, 'dataProvider' => $dataProvider]);
}

create.php(查看文件)

<br><br>
<h4 style="margin-left:4%;">Yeni ideya</h4>
<div id="ger">
    <?php 
        $form=$this->beginWidget('CActiveForm', array(
            'id'=>'ideyalar-form',
        )); 
    ?>
        <p class="note-1"><em><span class="required">*</span> qeyd olunmuş sahələr mütləq doldurulmalıdır.</em></p><br>
        <span id="ideya-yerror"><?php echo $form->errorSummary($model); ?></span>
        <br>
        <div class="ideya-div">
            <?php echo $form->labelEx($model,'iddil'); ?>
        </div>
        <br>
        <div class="ideya-div-1">
            <?php echo $form->dropDownList($model, 'iddil',
                CHtml::listData(Yii::app()->db->createCommand()
                        ->select('iddil, dilad')
                        ->from('diller')->queryAll() ,
                    'iddil', 'dilad'), array('options' => array($model->iddil =>array('selected'=>true)))); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'ideyaad'); ?></div><br>
        <div class="ideya-div-1">
            <?php echo $form->textField($model,'ideyaad',array('size'=>60,'maxlength'=>255)); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'idnettip'); ?></div><br>
        <div class="ideya-div-1">
            <?php echo $form->dropDownList($model, 'idnettip',
                CHtml::listData(Yii::app()->db->createCommand()
                        ->select('idnettip, nettip')
                        ->from('nettip')->queryAll() ,
                    'idnettip', 'nettip'), array('options' => array($model->idnettip =>array('selected'=>true)))); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'mezmunu'); ?></div><br>
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'mezmunu',array('rows'=>6, 'cols'=>50)); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'xulase'); ?></div><br />
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'xulase'); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'patent'); ?></div><br>
        <div class="ideya-div-1">
            <?php echo $form->radioButtonList($model, 'patent',
                array(1 => 'Var', 0=>'Yoxdur'), array('labelOptions'=>array('style'=>'display:inline'),
                )); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'patentm'); ?></div><br>
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'patentm',array('rows'=>6, 'cols'=>50)); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'muddet'); ?></div><br>
        <div class="ideya-div-1">
            <?php echo $form->textField($model,'muddet'); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'vesait'); ?></div><br>
        <div class="ideya-div-1">
            <?php echo $form->textField($model,'vesait'); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'innova'); ?></div><br>
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'innova',array('rows'=>6, 'cols'=>50)); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'rivalry'); ?></div><br>
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'rivalry',array('rows'=>6, 'cols'=>50)); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'sosial'); ?></div><br>
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'sosial',array('rows'=>6, 'cols'=>50)); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'market'); ?></div><br>
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'market',array('rows'=>6, 'cols'=>50)); ?>
        </div>
        <br>
        <div class="ideya-div"><?php echo $form->labelEx($model,'strategy'); ?></div><br>
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'strategy',array('rows'=>6, 'cols'=>50)); ?>
        </div>
        <br>
        <div class="ideya-div">
            <?php echo $form->labelEx($model,'niye'); ?>
        </div><br>
        <div class="ideya-div-2">
            <?php echo $form->textArea($model,'niye',array('rows'=>6, 'cols'=>50)); ?>
            <?php echo $form->error($model,'niye'); ?>
        </div>
        <br>
        <div class="ideya-div-2">       
            <?php if($reference=="update")
                { ?>
                <div class="ideya-div"><?php echo $form->labelEx($model,'texniki'); ?></div><br>
                <div class="ideya-div-2">
                    <?php echo $form->textArea($model,'texniki',array('rows'=>6, 'cols'=>50, 'readonly' => true )); ?>
                    <?php echo $form->error($model,'texniki'); ?>
                </div><br>

                <div class="ideya-div"><?php echo $form->labelEx($model,'textarix'); ?></div><br>
                <div class="ideya-div-1">
                    <?php echo $form->dateField($model,'textarix', array('readonly' => true ) ); ?>
                    <?php echo $form->error($model,'textarix'); ?>
                </div><br>
            <?php
                }
            ?>
        <div class="orta">
            <input type="button" class="btn btn-danger" value="İmtina et" onclick="javascript:window.history.go(-1);return false;" />
            <?php echo CHtml::submitButton($model->isNewRecord ? 'İdeyanı yarat' : 'Məlumatları yenilə', ['class'=>'btn btn-success']); ?>
        </div>
    <?php $this->endWidget(); ?>
</div>

viewm.php(另一个 View 文件)

<?php $baseUrl=Yii::app()->request->baseUrl; ?>
<b><span id="comma"><h5>İdeya haqqında məlumatlar</h5></span></b><br /><br />
<div id="frame-l">
    <?php 
        $this->widget('yiiwheels.widgets.detail.WhDetailView', array(
            'data'=>$model,
            'attributes'=>array(
                'iddil'=> array(
                    'label' => $model->getAttributeLabel('iddil') ,
                    'type'=>'raw',
                    'value' => Yii::app()->db->createCommand()
                            ->select('dilad')
                            ->from('diller')->where('iddil = '.$model->iddil)->queryScalar()
                ),
                'ideyaad',
                'idnettip'=> array(
                    'label' => $model->getAttributeLabel('idnettip') ,
                    'type'=>'raw',
                    'value' => Yii::app()->db->createCommand()
                            ->select('nettip')
                            ->from('nettip')->where('idnettip = '.$model->idnettip)->queryScalar()
                ),
                'mezmunu',
                'patent'=>array(
                    'label' =>$model->getAttributeLabel('patent'),
                    'value'=> $model->idnettip == 0 ?"Yox":"Var",
                ),
                'patentm',
                'muddet',
                'vesait',
                'tarix',
                'innova',
                'rivalry',
                'sosial',
                'market',
                'strategy',
                'niye',
            ),
        ));
    ?>
</div>
<br><br><br><br>
<b><span id="comma"><h5>Ekspertiza qiymətləri</h5></span></b>
<div id="frame-r">
  <?php 
    $this->widget('yiiwheels.widgets.grid.WhGridView', [
        'id'=>'ideyalar-grid',
        'dataProvider'=> $dataProvider ,
        'ajaxUpdate'=>true,
        'responsiveTable'=>true,
        'fixedHeader'=>true,
        'headerOffset'=>40,
        'type'=>'striped bordered',
        'columns'=>[
            [
                'name'=>'elmireal',
                'header'=>'Elmi reallıq'
            ],
            [
                'name'=>'azerreal',
                'header'=>'Lokal şəraitə uyğunluq'
            ],
            [
                'name'=>'resrent',
                'header'=>'Rentabellilik'
            ],
            [
                'class'=>'bootstrap.widgets.TbButtonColumn',
                'template'=>'{view}',
                    'viewButtonUrl'=>'Yii::app()->createUrl("/ideyalar/reyler", array("id"=>$data["idideya"]))',
                    'viewButtonOptions'=>['target'=>'_blank'],
                    'header'=>'Əməliyyatlar',
                    'headerHtmlOptions'=>[
                        'width'=>10, 
                        'style'=>'color: white'
                    ],
            ],
        ]
    ]); 
?>
<input type="button" class="btn btn-info" value="Şəxsi səhifə" onclick="javascript:window.history.go(-2);return false;" />
</div>

Ideyalar.php(模型)

<?php

/**
 * This is the model class for table "ideyalar".
 *
 * The followings are the available columns in table 'ideyalar':
 * @property integer $idideya
 * @property integer $iddil
 * @property string $ideyaad
 * @property integer $idnettip
 * @property string $mezmunu
 * @property string $xulase
 * @property string $patent
 * @property string $patentm
 * @property integer $muddet
 * @property double $vesait
 * @property string $tarix
 * @property string $innova
 * @property string $rivalry
 * @property string $sosial
 * @property string $market
 * @property string $strategy
 * @property string $niye
 * @property string $istifade
 * @property string $status
 * @property integer $idtex
 * @property string $texniki
 * @property string $textarix
 * @property integer $idishchi
 * @property integer $view_count
 * @property integer $idcontact
 */
class Ideyalar extends CActiveRecord
{

    public function tableName()
    {
        return 'ideyalar';
    }

    public function rules()
    {
        return array(
            array('iddil, ideyaad', 'required'),
            array('iddil, idnettip, muddet, idtex, idishchi, view_count, idcontact', 'numerical', 'integerOnly'=>true, 'min'=>0),
            array('vesait', 'numerical'),
            array('ideyaad', 'length', 'max'=>255),
            array('xulase', 'length', 'max'=>NULL),
            array('patent, istifade, status', 'length', 'max'=>1),
            array('ideyaad', 'unique'),
        );
    }
    public function relations()
    {
        return array(
        );
    }

    public function attributeLabels()
    {
        return array(
            'iddil' => 'İdeyanın təqdim olunduğu dil',
            'ideyaad' => 'İdeya adı',
            'idnettip' => 'Gözlənilən nəticənin tipi',
            'mezmunu' => 'İdeyanın məzmunu',
            'patent' => 'İdeya üzrə patentlər yaxud ixtira şəhadətnamələri varmı?',
            'patentm' => 'Əgər ideya üzrə patentlər yaxud ixtira şəhadətnamələri varsa, onlar haqqında məlumat',
            'muddet' => 'Müddət (aylarla)',
            'xulase' => 'İdeyanın xülasəsi',
            'vesait' => 'Tələb olunan ümumi vəsait (min manatla)',
            'tarix' => 'Daxil edilmə tarix',
            'innova' => 'İdeyanın yeniliyi nədən ibarətdir?',
            'rivalry' => 'Rəqabətliliyi (üstünlüyü)',
            'sosial' => 'Sosial əhəmiyyəti',
            'market' => 'Hansı bazar üçün nəzərdə tutulur?',
            'strategy' => 'Marketinq strategiyası',
            'niye' => 'Niyə məhz bu kollektiv təklif olunan ideyanı həyata keçirməlidir?',
            'idtex' => 'Texniki ekspertizanın gedişi',
            'texniki' => 'Texniki ekspertiza rəyi',
            'textarix' => 'Textarix',
            'view_count' => 'Baxılma sayı',
            'idcontact' => 'Əlaqələndirici şəxs',
        );
    }

    public function search()
    {
        $criteria=new CDbCriteria;

        $criteria->compare('idideya',$this->idideya);
        $criteria->compare('iddil',$this->iddil);
        $criteria->compare('ideyaad',$this->ideyaad,true);
        $criteria->compare('idnettip',$this->idnettip);
        $criteria->compare('mezmunu',$this->mezmunu);
        $criteria->compare('xulase',$this->xulase,true);
        $criteria->compare('patent',$this->patent,true);
        $criteria->compare('patentm',$this->patentm,true);
        $criteria->compare('muddet',$this->muddet);
        $criteria->compare('vesait',$this->vesait);
        $criteria->compare('tarix',$this->tarix,true);
        $criteria->compare('innova',$this->innova,true);
        $criteria->compare('rivalry',$this->rivalry,true);
        $criteria->compare('sosial',$this->sosial,true);
        $criteria->compare('market',$this->market,true);
        $criteria->compare('strategy',$this->strategy,true);
        $criteria->compare('niye',$this->niye,true);
        $criteria->compare('istifade',$this->istifade,true);
        $criteria->compare('status',$this->status,true);
        $criteria->compare('idtex',$this->idtex);
        $criteria->compare('texniki',$this->texniki,true);
        $criteria->compare('textarix',$this->textarix,true);
        $criteria->compare('idishchi',$this->idishchi);
        $criteria->compare('view_count',$this->view_count);
        $criteria->compare('idcontact',$this->idcontact);

        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }

    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }
}

这些代码必须将数据插入到 2 个表中:mqrupideyalar,并且还更新表 ideyalar 中的一列(名为 <强>状态)。

将数据插入到mqrup并更新列status我没有问题......

但是有些信息没有插入到ideyalar表中。

当用户创建新想法时,以下列应更新:

iddil, ideyaad, idnettip, xulase, muddet, vesait, istifade, status

对于这些专栏我没有任何问题。所有数据都将正确插入。

但仅

mezmunu, patent, patentm, innova, rivalry, sosial, market, strategy, niye

列不会“受到影响”。

我找不到问题出在哪里(代码和/或程序算法)。

如果您知道解决方案,请帮助我。

我想我可以解释我的问题是什么以及我真正需要什么...... 如果我无法解释,抱歉我的英语不好。

P.S: when I update the existing idea, I again and again fill problematic fields, it's again and again not inserts data to db.

谢谢并致以最诚挚的问候。

最佳答案

我不确定这是否适用于所有缺失的更新,但是...

您不能在模型的 rules() 方法中大规模分配没有关联验证的属性,因为这些属性被视为不安全:

$model->attributes=$_POST['Ideyalar'];

不会更新 $_POST 数组中的不安全属性。

您可以为额外属性添加安全规则,或者(更好)为它们添加验证。

Understanding "Safe" Validation Rules

关于php - 保存 'model attributes' 不起作用(需要帮助),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25870836/

相关文章:

javascript - PHP - Dropzone 不适用于服务器但适用于本地主机

php - 查找具有特定键名前缀的数组元素

ajax - Yii、Selenium 和多个提交按钮

php - 尝试使用 Yiimail 从数据库中获取电子邮件

php - MYSQL/PHP授权脚本

php - MySQL 事务 : SELECT + INSERT

sql - 获取前 X 名用户,加上特定用户(如果他们不在前 X 名中)

php - MySQL InnoDB 事务回滚不起作用

mysql - 在搜索特定 SQL 时计算整个数据库

mysql - 为mysql中的列添加索引