Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php (UPD)不限制yii上的表格输入_Php_Mysql_Validation_Input_Yii - Fatal编程技术网

Php (UPD)不限制yii上的表格输入

Php (UPD)不限制yii上的表格输入,php,mysql,validation,input,yii,Php,Mysql,Validation,Input,Yii,请原谅,如果这个问题已经出现在StackExchange上,但我并没有在Stack上,也并没有在Google上找到它 从一个角度来看,问题很简单:我需要在Yii框架上实现表格输入。若我不想将多行添加到数据库表中,那个么就并没有问题了。例如: WorkController::actionBatchCreate() 结果它不保存任何内容,只跳到行$this->redirect(数组('work/admin')作为一种快速解决方案,我可以提出下一种简单的表单数据处理方法: if (isset($_PO

请原谅,如果这个问题已经出现在StackExchange上,但我并没有在Stack上,也并没有在Google上找到它

从一个角度来看,问题很简单:我需要在Yii框架上实现表格输入。若我不想将多行添加到数据库表中,那个么就并没有问题了。例如:

WorkController::actionBatchCreate()


结果它不保存任何内容,只跳到行
$this->redirect(数组('work/admin')

作为一种快速解决方案,我可以提出下一种简单的表单数据处理方法:

if (isset($_POST['Work']))
{
    foreach ($_POST['Work'] as $j => $model)
    {
        if (isset($_POST['Work'][$j]))
        {
            $models[$j] = new Work();
            $models[$j]->attributes = $model;
            $models[$j]->save();
        }
    }
}

请注意,我删除了带有
if($valid){}
的部分以及所有其他相关内容。这是因为
$model->save()。必须有某种方法来检查,如果某个模型属性为空,则忽略此模型。
<div class="form">
<?php echo CHtml::beginForm(); ?>
<table>
    <tr>
        <th>Name</th>
        <th>Measure</th>
        <th>Count</th>
        <th>Work</th>
        <th>Mat</th>
        <th>Mech</th>
    </tr>
    <?php foreach($models as $m=>$model): ?>
        <tr>
            <td><?php echo CHtml::activeTextField($model,"[$m]work_name"); ?></td>
            <td><?php echo CHtml::activeTextField($model,"[$m]measure"); ?></td>
            <td><?php echo CHtml::activeTextField($model,"[$m]count"); ?></td>
            <td><?php echo CHtml::activeTextField($model,"[$m]work",array('size'=>8)); ?></td>
            <td><?php echo CHtml::activeTextField($model,"[$m]material",array('size'=>8)); ?></td>
            <td><?php echo CHtml::activeTextField($model,"[$m]mechanisms",array('size'=>8)); ?></td>
        </tr>
    <?php endforeach; ?>
</table>

<?php echo CHtml::submitButton('Save'); ?>
<?php echo CHtml::endForm(); ?>
    public function actionBatchCreate()
{
    $models=array();
    $valid=array();
    // since you know how many models
    $i=0;
    while($i < 5)
    {
        $models[]=Work::model();
        $valid[$i]=0; // all false
        $i++;
        // you can also allocate memory for the model with `new Modelname` instead
        // of assigning the static model
    }
    if (isset($_POST['Work']))
    {

        foreach ($_POST['Work'] as $j=>$model)
        {
            if (isset($_POST['Work'][$j]))
            {
                $models[$j]=new Work; // if you had static model only
                $models[$j]->attributes=$model;
                if($models[$j]->validate()===true)
                {
                    $valid[$j]=1; // true
                }
            }
        }
        $i=0;
        while(isset($models[$i]))
        {
           if($valid[$i]===1) // if valid[i] true, then save
           {
               $models[$i]->save();// models have already been validated
           }
           $i++;
        }
        // anything else that you want to do, for example a redirect to admin page
        $this->redirect(array('work/admin'));
    }

    $this->render('batchcreate',array('models'=>$models));
}
if (isset($_POST['Work']))
{
    foreach ($_POST['Work'] as $j => $model)
    {
        if (isset($_POST['Work'][$j]))
        {
            $models[$j] = new Work();
            $models[$j]->attributes = $model;
            $models[$j]->save();
        }
    }
}