【问题标题】:Problems with variable $_POST on yiiyii 上变量 $_POST 的问题
【发布时间】:2013-08-22 09:59:10
【问题描述】:

我创建了一个cgridview,其中有一列可编辑用于更新数据,based on this post

只需一个按钮(更新许可证)即可更新 ajax 调用中的所有字段。

但它只更新第一个字段。

我认为$_POST 变量上发生了一些事情。

我尝试了几种方法来查看循环 $_POST 变量失败。

我的代码:

查看:

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


<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'rta-client-grid',
    'selectableRows'=>1,
    'selectionChanged'=>'mostrarDetalles',  // via 1: para mostrar detalles al seleccionar
    'dataProvider'=>$modelClient->search(),
    'filter'=>$modelClient,
    'columns'=>array(
        array(
            'id'=>'autoId',
            'class'=>'CCheckBoxColumn',
            'selectableRows' => '50',
        ),
        'oid',
        'name',
        'surname',
        'id_country',
        'nif',
        //'CifDni',
        array(
            'name'=>'CifDni',
            'type'=>'raw',
            'value'=>'CHtml::textField("CifDni[$data->oid]",$data->CifDni,array("style"=>"width:80px;"))',
            //
        ),
        array(
            'class'=>'CButtonColumn',
        ),
        array(
            'class'=>'CButtonColumn',
            'template' => '{detallarClientes}',
            'buttons' => array(
                'detallarClientes'=>array(
                    'label'=>'ver',
                    'imageUrl'=>'images/demo1/view.png',
                    'click'=>'js:mostrarDetalles',
                ),
            ),
        ),

    ),
)); ?>

<script>
    function reloadGrid(data) {
        $.fn.yiiGridView.update('rta-client-grid');
    }
</script>
<?php echo CHtml::ajaxSubmitButton('Filter',array('rtaClient/ajaxupdate'), array(),array("style"=>"display:none;")); ?>
<?php echo CHtml::ajaxSubmitButton('Update licencias',array('rtaClient/ajaxupdate','act'=>'doUpdateLicencia'), array('success'=>'reloadGrid'),array("style"=>"float:right;")); ?>
<?php $this->endWidget(); ?>

控制器:

public function actionAjaxupdate()
{
    $act = $_GET['act'];
    if($act=='doUpdateLicencia')
    {
        $sortOrderAll = $_POST['CifDni'];
        if(count($sortOrderAll)>0)
        {
            foreach($sortOrderAll as $menuId=>$sortOrder)
            {
                $model=$this->loadModel($menuId);
                $model->CifDni = $sortOrder;
                $model->save();
            }
        }
    }
}

在 FirebugConsole 上发布变量:

CifDni[10]  H
CifDni[11]  I
CifDni[12]  J
CifDni[2]   A
CifDni[3]   B
CifDni[4]   C
CifDni[6]   D
CifDni[7]   E
CifDni[8]   F
CifDni[9]   G
RtaClient[CifDni]   
RtaClient[id_country]   
RtaClient[name] 
RtaClient[nif]  
RtaClient[oid]  
RtaClient[surname]  

我刚刚解决了这个问题。我修改了控制器添加:

    foreach($_POST as $id=>$value)
    {
        if($id=="CifDni") {
            foreach($value as $id2=>$value2)
            {
                $model=$this->loadModel($id2);
                $model->CifDni = $value2;
                $model->save();
            }
        }
    }

但是base中的问题出在其他具有“必需”规则的字段(未显示在网格上)并且在数据库中没有值,并且它们不允许我通过 SQL 错误进行更新(sql 错误不要' t 出现在日志中)。

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        //array('pass', 'required'), //<----

【问题讨论】:

  • 在您的情况下,这是否意味着 oid=10(第一个)的记录将被更新但 oid=11,12,....2,3,4 没有?跨度>
  • 嗨@TelvinNguyen,我刚刚解决了这个问题。我在数据表和模型上的规则。

标签: ajax forms yii http-post cgridview


【解决方案1】:
$model->save(false);

在不验证规则的情况下强制保存模型,而不是删除模型上的规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2015-09-25
    • 2013-10-20
    相关资源
    最近更新 更多