我有一个像波纹管这样的表单,其中有1个以上的名称,在我的表单中输入了1个像波纹管的名字:
<form>
<input type="text" name="family">
<input type="text" name="inputCurrName[]">
<input type="text" name="inputCurrName[]">
<input type="text" name="inputCurrName[]">
<input type="submit" name="submit" value="submit">
</form>
我有一个带有2列的表,其列名称为 Family 和 CurrName
我想在表单提交中将多个名称保存到CurrName列的一行中,例如,这是提交时的数据:
Family Input: ali
inputCurrName[] Inputs : array(jack,peter,lara)
我只想在数据库中保存1条记录,其数据如下:
familyColumn Value: ali | CurrNameColumn Value: {jack,peter,lara}
我在下面使用了代码,但是它在数据库中保存了3条记录!
$input = $request->all();
for ($i = 0; $i <= count($input['inputCurrName']); $i++) {
$user_data = [
'family' => $input['family'],
'curr_name' => $input['inputCurrName'][$i],
];
User::Creat($user_data);
}
我该怎么办?
答案 0 :(得分:1)
您正在for loop
中检查inputCurrName
的长度,因此它循环遍历每个inputCurrName
,这就是为什么每个FamilyName
获得3条记录的原因。在这种情况下,您每FamilyName
只关心1条记录。
有几种方法可以将array
的{{1}}值插入到inputCurrName
的1条记录中。
从数据库中检索时,可以使用serialize()创建一个值的可存储表示,并使用unserialize()对其进行解码。
-或-
插入记录时,可以使用implode()创建以逗号分隔的列表。从数据库中检索后,使用explode()遍历每个逗号分隔的值。
-或-
如果您喜欢json,则可以使用json_encode()和json_decode()进行相同操作,方法与serialize()和unserialize()相同
FamilyName
使用以下代码将为您提供上表的示例。 +------------+---------------------------------------------------------+
| FamilyName | CurrName |
+------------+---------------------------------------------------------+
| Ali | a:3:{i:0;s:5:"Laura";i:1;s:6:"Peter ";i:2;s:4:"Jack";} |
| Ali | Laura,Peter,Jack |
+------------+---------------------------------------------------------+
是curr_name_optional
$user_data
的一部分,展示了implode()。
array
此外,在插入数据库之前,我将确保修剪并清理表单输入数据。
答案 1 :(得分:1)
您可以简单地使用foreach,然后将数据转换为json格式,然后插入到单行中
$arr = [];
foreach($request->get('inputCurrName') as $key => $value){
$arr[$key] => $value;
}
$user_data = [
'family' => $request->get('family_name'),
'curr_name' => json_encode($arr),
];
User::Create($user_data);
不确定其工作原理,但您似乎忘记了在表单中传递csrf-token
。在@csrf
标签下面添加<form>
。