-6ren">
gpt4 book ai didi

javascript - yii框架中存储数组

转载 作者:行者123 更新时间:2023-11-27 22:53:20 25 4
gpt4 key购买 nike

我的 View 中有此表单:

<form method="POST" action="<?php echo Yii::$app->request->baseUrl;?>/telephone/addnow/" role="form" enctype="multipart/form-data">
<label>Upload your photo:</label><input type="file" name="image" ><br>
<input type="name" name="name" id="name" placeholder="Name" required><br><br>
<input type="text" name="address" placeholder="Address"><br><br>
<input type="text" name="telephone" placeholder="Telephone number" required>
<br><br>
<div id="dynamicInput">
<br><input type="text" name="myinputs[]" placeholder="Secondary Phone #1">
<span class="glyphicon glyphicon-plus" onClick="addInput('dynamicInput');"></span>
<br><br>
</div>
<input type="text" name="mobile" placeholder="Mobile number" > <br><br>
<input type="email" name="email" placeholder="Email">
<input type="email" name="altemail" placeholder="Alternative Email"><br><BR>
<input type="text" name="company_name" placeholder="Company Name"><br><BR>
<input type="text" name="company_address" placeholder="Company Address"><br><br>
<input type="text" name="company_phone_primary" placeholder="Company Telephone">
<input type="text" name="company_phone_secondary" placeholder="Telephone Secondary "><br><br>
<input type="text" name="company_email" placeholder="Company Email Address"><br><BR>
<button type="submit" class="btn btn-default">Submit</button><BR><BR>
</form>

允许用户插入任意数量的辅助电话我使用了以下 JavaScript 代码:

<script>
var counter = 1;
var limit = 10;
function addInput(divName) {
if (counter == limit) {
alert("You have reached the limit of adding " + counter + " inputs");
} else {
var newdiv = document.createElement('div');
newdiv.innerHTML = "Seconday Phone # " + (counter + 1) + " <br><input type='text' name='myinputs[]' placeholder='Secondary Phone '>";
document.getElementById(divName).appendChild(newdiv);
counter++;
}
}
</script>

我有这个 Controller 代码:

public function actionAddnow()
{
$request = Yii::$app->request;
$add=new telephone();
$add->Name=$request->post('name');
$add->Email=$request->post('email');
$add->Mobile=$request->post('mobile');
$add->Address=$request->post('address');
$add->Telephone=$request->post('telephone');
$add->altemail=$request->post('altemail');
$add->company_name=$request->post('company_name');
$add->company_address=$request->post('company_address');
$add->company_phone_primary=$request->post('company_phone_primary');
$add->company_phone_secondary=$request->post('company_phone_secondary');
$add->company_email=$request->post('company_email');

$add->save();

$getlast=Yii::$app->db->getLastInsertId();
$myinputs=$request->post('myinputs');
$totalinputs=sizeof('$myinputs');

for ($i=0; $i<=$totalinputs; $i++) {
$inputs=$myinputs[$i];
$phones=new phone();
$phones->secondary_phones=$inputs;
$phones->id=$getlast;
$phones->save();
}
return $this->redirect(Yii::$app->request->baseUrl.'/telephone/index');
}

但仅将 $myinputs 的前两个值插入数据库中。

最佳答案

将变量 $myinputs 放在单引号('$myinputs')之间,您会将变量转换为字符串。 sizeof是 count 函数的别名,但是当您将参数作为字符串给出时,您总是得到结果 1。在您将使用条件 ($i=0; $i<=$totalinputs; $i++) 循环之后,这意味着循环将运行 2 次$i 为 0,当 $i 为 1 时。

而不是:

$totalinputs=sizeof('$myinputs');

您应该使用

$totalinputs=sizeof($myinputs);

另一个错误存在于您的循环条件中。

for ($i=0; $i<=$totalinputs; $i++)

应该

for ($i=0; $i<$totalinputs; $i++)

或者你可以用 foreach 替换 for 循环

foreach($myinputs as $inputs)
{
$phones=new phone();
$phones->secondary_phones=$inputs;
$phones->id=$getlast;
$phones->save();
}

Yii 方面的改进

1. 对于表单,您可以使用 ActiveForm小部件

$form = \yii\widgets\ActiveForm::begin([
'options' => [
"role" => "form",
"enctype"=> "multipart/form-data",
], ]);

echo $form->field($add, 'Name');
//etc
$form->end();

2.如果您使用 ActiveField 在 View 中创建输入字段或以 ModelClassName[ModelFieldName] 等格式手动添加字段名称,那么您将能够使用模型加载来分配值示例:

$add=new telephone();
if ($add->load(Yii::$app->request->post()))
{
if ($add->save())
{//saved
}
else
{//error
}
}
else
{//no post data
}

3.对于url,可能不需要添加请求baseUrl属性。 redirect 中的示例你可以简单地使用

$this->redirect('/telephone/index');

4.当数据库中有一些触发器会创建额外的行时,使用 getLastInsertId() 方法可能会导致错误。因此,使用以下方法可能更明智:

$getlast=$add->id;//assuming model autoincrement field name is "id"

关于javascript - yii框架中存储数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com