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