Php 表格输入

Php 表格输入,php,yii,tabular,Php,Yii,Tabular,我想将表单中的多条记录添加到表中 我试图理解并遵循此指南,但失败了 我的代码不保存 我在控制器代码中写了一条注释a,这里添加了isset()函数 这部分代码将不会运行 if(isset($_POST['MultiPart2'][$i])) 但是当我删除isset()函数时,我得到了错误未定义的偏移量:0 这意味着这个代码 $_POST['MultiPart2'][$i] 它不起作用 我该怎么办 这是我帖子的var_转储 $_POST['MultiPart2'] array(2) {

我想将表单中的多条记录添加到表中

我试图理解并遵循此指南,但失败了

我的代码不保存

我在控制器代码中写了一条注释a,这里添加了
isset()
函数

这部分代码将不会运行

if(isset($_POST['MultiPart2'][$i]))
但是当我删除isset()函数时,我得到了错误未定义的偏移量:0

这意味着这个代码

$_POST['MultiPart2'][$i]
它不起作用

我该怎么办

这是我帖子的var_转储

$_POST['MultiPart2']

array(2) {
   ["[0"]=>
   array(3) {
     ["'name'"]=>
     string(3) "Vic"
     ["'age'"]=>
     string(2) "25"
     ["'sex'"]=>
     string(1) "m"
   }
  ["[1"]=>
  array(3) {
     ["'name'"]=>
     string(3) "Vic"
     ["'age'"]=>
     string(2) "25"
     ["'sex'"]=>
     string(1) "m"
   }
}
这是我的控制器代码

 public function actionCreate()
 {

    //insert multiple instances of model into array
    $model=array();
    for ($i=0; $i < 2; $i++) { 
        $model[]=new MultiPart2;
    }

    if(isset($_POST['MultiPart2']))
    {   
        foreach ($model as $i => $model) {

            if(isset($_POST['MultiPart2'][$i]))
             // A
            //with isset() the following code does not run
            {       

                $model->attributes=$_POST['MultiPart2'][$i];
                if($model->save())
                    echo "Saved";
            }
        }
    }
    $this->render('create',array(
        'model'=>$model,
    ));
}
公共函数actionCreate()
{
//将模型的多个实例插入到数组中
$model=array();
对于($i=0;$i<2;$i++){
$model[]=新的多部件2;
}
如果(isset($_POST['MultiPart2']))
{   
foreach($i=>$model的模型){
如果(isset($_POST['MultiPart2'][$i]))
//A
//使用isset()时,以下代码不会运行
{       
$model->attributes=$\u POST['MultiPart2'][$i];
如果($model->save())
回声“保存”;
}
}
}
$this->render('create',数组(
'model'=>$model,
));
}
这是我的视图代码

<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'multi-part2-form',
'enableAjaxValidation'=>false,
)); ?>

<?php echo $form->errorSummary($model); ?>
    <?php 
    foreach ($model as $i => $model) {
            ?>

                <div class="row">
                    <?php echo $form->labelEx($model,'name'); ?>
                    <?php echo $form->textField($model,"[$i][name]",array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                    <?php echo $form->error($model,'name'); ?>
                </div>

                <div class="row">
                    <?php echo $form->labelEx($model,'age'); ?>
                    <?php echo $form->textField($model,"[$i][age]",array('size'=>60,'maxlength'=>100, "value"=>"5")); ?>
                    <?php echo $form->error($model,'age'); ?>
                </div>

                <div class="row">
                    <?php echo $form->labelEx($model,'sex'); ?>
                    <?php echo $form->textField($model,"[$i][sex]",array('size'=>60,'maxlength'=>100, "value"=>"m")); ?>
                    <?php echo $form->error($model,'sex'); ?>
                </div> 
                <hr>
            <?php
        }

     ?>

<div class="row buttons">
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>

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


下面是生成的HTML

<form id="multi-part2-form" action="/sam.com/system/index.php?r=multiPart2/create"      method="post">
    <p class="note">Fields with <span class="required">*</span> are required.</p>



<div class="row">
 <label for="MultiPart2_name"   class="required">Name <span class="required">*</span>   </label>                           
 <input size="60" maxlength="100"   value="Vic" name="MultiPart2[[0][name]]" id="MultiPart2__0_name" type="text" />                     

</div>

<div class="row">
<label for="MultiPart2_age" class="required">Age <span class="required">*</span></label>                        
<input size="60" maxlength="100" value="5" name="MultiPart2[[0][age]]" id="MultiPart2__0_age" type="text" />                                            

</div>

<div class="row">
<label for="MultiPart2_sex" class="required">Sex <span class="required">*</span></label>                        
<input size="60" maxlength="100" value="m" name="MultiPart2[[0][sex]]" id="MultiPart2__0_sex" type="text" />                                              
</div> 

<hr>

<div class="row">
<label for="MultiPart2_name" class="required">Name <span class="required">*</span></label>                      
<input size="60" maxlength="100" value="Vic" name="MultiPart2[[1][name]]" id="MultiPart2__1_name" type="text" />                        

</div>

<div class="row">

<label for="MultiPart2_age" class="required">Age <span class="required">*</span></label>                          
<input size="60" maxlength="100" value="5" name="MultiPart2[[1][age]]" id="MultiPart2__1_age" type="text" />                                            
</div>

<div class="row">
<label for="MultiPart2_sex" class="required">Sex <span class="required">*</span></label>                        
<input size="60" maxlength="100" value="m" name="MultiPart2[[1][sex]]" id="MultiPart2__1_sex" type="text" />                                             
</div> 

<hr>

<div class="row buttons">
<input type="submit" name="yt0" value="Create" />   </div>

</form>

带*的字段是必需的

姓名* 年龄* 性别*
姓名* 年龄* 性别*

您应该按如下方式更改视图代码:

删除
“[$i]['name']”中名称周围的
——以及所有字段中的名称

<?php echo $form->textField($model,"[$i][name]",array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>

将文本输入的生成更改为:

     <?php echo $form->textField($model,"[$i]name",array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                //...
     <?php echo $form->textField($model,"[$i]age",array('size'=>60,'maxlength'=>100, "value"=>"5")); ?>
                //..
     <?php echo $form->textField($model,"[$i]sex",array('size'=>60,'maxlength'=>100, "value"=>"m")); ?>
编辑\u 2\u同时将查看代码更改为(与名称相同的错误):

foreach($i=>$mod){
?>
//…其他投入
或者尝试一下:

        foreach ($model as $i => $mod) {
        ?>

            <div class="row">
                <?php echo $form->labelEx($mod,'name'); ?>
                <?php echo $form->textField("MultiPart2[$id]['name']",$mod['name'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                <?php echo $form->error($mod,'name'); ?>
            </div>



            <div class="row">
                <?php echo $form->labelEx($mod,'age'); ?>
                <?php echo $form->textField("MultiPart2[$id]['age']",$mod['age'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                <?php echo $form->error($mod,'age'); ?>
            </div>


            <div class="row">
                <?php echo $form->labelEx($mod,'sex'); ?>
                <?php echo $form->textField("MultiPart2[$id]['sex']",$mod['sex'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                <?php echo $form->error($mod,'sex'); ?>
            </div>
foreach($i=>$mod){
?>

我已经这样做了,但是没有任何改变。如果我添加isset()的话,我仍然会收到最早的错误,或者保存的代码被跳过函数。还有什么想法吗…@voodoo417 Thx。我没有注意到重复的同一个变量。你首先找到了它。所以我在编辑中提到了你的名字。他在查看迭代时犯了同样的错误:
$model as$I=>$model
:)在做了你建议的事情之后,我做了一个var转储,我可以看到所有的数据,但仍然得到一个偏移错误r、 …再次更新。请重试。我发现错误。您迭代了相同的变量。建议:对于多个实体,请使用名称作为
$models
(而不是
$model
)。现在您对每个实体都使用
$model作为$model
-这不正确。当我var dump我的帖子时,它会显示里面的内容。但是当我尝试像这样的vardump时,
var\u dump($\u post['MultiPart2'][0]);
它带来了偏移量错误。进行了您所建议的更改。但当我使用var dump
var_dump($\u POST['MultiPart2'][0]);
或尝试访问
$mod mod->attributes=$\u POST['MultiPart2'][$I];
以及使用isset()时,仍然会得到一个未定义的偏移量:0函数,它不会在后面运行代码。@voodoo417+1用于您的连续尝试,也用于查找大多数问题:-)
 $model=array();
for ($i=0; $i < 2; $i++) { 
    $model[$i]=new MultiPart2;
}

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

    foreach ($model as $i=>$mod) {

        if(isset($_POST['MultiPart2'][$i]))
         // A
        //with isset() the following code does not run
        {       

            $mod->attributes=$_POST['MultiPart2'][$i];
            if($mod->save())
                echo "Saved";
        }
    }
}
    foreach ($model as $i => $mod) {
        ?>

            <div class="row">
                <?php echo $form->labelEx($mod,'name'); ?>
                <?php echo $form->activeTextField($mod,"[$i]name",array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                <?php echo $form->error($mod,'name'); ?>
            </div>
            //... other inputs
        foreach ($model as $i => $mod) {
        ?>

            <div class="row">
                <?php echo $form->labelEx($mod,'name'); ?>
                <?php echo $form->textField("MultiPart2[$id]['name']",$mod['name'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                <?php echo $form->error($mod,'name'); ?>
            </div>



            <div class="row">
                <?php echo $form->labelEx($mod,'age'); ?>
                <?php echo $form->textField("MultiPart2[$id]['age']",$mod['age'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                <?php echo $form->error($mod,'age'); ?>
            </div>


            <div class="row">
                <?php echo $form->labelEx($mod,'sex'); ?>
                <?php echo $form->textField("MultiPart2[$id]['sex']",$mod['sex'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?>
                <?php echo $form->error($mod,'sex'); ?>
            </div>