我想存储动态表单字段中的数据。
这是我的代码:
我的控制器:
/*
* This is For Create Question
*
*/
public function CreateQuestion(Request $request)
{
$this->validate($request, [
'exercise' => 'required',
'question' => 'required',
'opt1' => 'required',
'opt2' => 'required',
'opt3' => 'required',
'opt4' => 'required',
]);
$inputs = $request->all();
foreach ($inputs as $input)
{
Question::create(array(
'exercise'=>$input['exercise'],
'question'=>$input['question'],
'opt1'=>$input['opt1'],
'opt2'=>$input['opt2'],
'opt3'=>$input['opt3'],
'opt4'=>$input['opt4'],
));
}
return back()->with('success','Soal Berhasil dikirim.');
}
我在表单中使用诸如exercise []之类的名称。
我的代码的结果是:
ErrorException
Illegal string offset 'exercise'
答案 0 :(得分:0)
如果要遍历$inputs
,则实际上是在尝试为每个表单输入创建一个Question
记录……不要那样做。摆脱foreach()
并正确访问输入:
Question::create(array(
'exercise' => $request->input('exercise'),
'question' => $request->input('question'),
'opt1' => $request->input('opt1'),
'opt2' => $request->input('opt2'),
'opt3' => $request->input('opt3'),
'opt4' => $request->input('opt4')
));
答案 1 :(得分:0)
我更新了代码,在这里我可以获取所有值。但它看起来像这样:
Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of
the type array, string given,
我的新控制器:
/*
* This is For Create Question
*
*/
public function createQuestion(Request $request)
{
$request->validate([
'exercise' => 'required',
'question' => 'required',
'opt1' => 'required',
'opt2' => 'required',
'opt3' => 'required',
'opt4' => 'required',
]);
//Init
$inputs = $request->all();
Question::create(array(
'exercise' => $inputs['exercise'],
'question' => $inputs['question'],
'opt1' => $inputs['opt1'],
'opt2' => $inputs['opt2'],
'opt3' => $inputs['opt3'],
'opt4' => $inputs['opt4'],
));
return back()->with('success','Soal Berhasil dikirim.');
}
我的新表格:
<form>
<select name="exercise[]"></select>
<textarea name="question[]"></textarea>
<input name="opt1[]"></input>
<input name="opt2[]"></input>
<input name="opt3[]"></input>
<input name="opt4[]"></input>
<!-- This is the add more filed button -->
<button name="addMoreSoal" id="addMoreSoal"addMoreSoal">Add More
Soal</button>
<button name="submit" type="submit">Upload</button>
</form>
感谢所有尝试帮助我的人,但是我需要更多帮助...
答案 2 :(得分:0)
正如@Tim Lewis所说,“您正在尝试为每个表单输入创建一个问题记录”,
换句话说,您可以传递create
方法内部的所有输入,以向数据库中插入新的问题记录
public function CreateQuestion(Request $request)
{
$this->validate($request, [
'exercise' => 'required',
'question' => 'required',
'opt1' => 'required',
'opt2' => 'required',
'opt3' => 'required',
'opt4' => 'required',
]);
$inputs = $request->all();
Question::create($inputs);
return back()->with('success','Soal Berhasil dikirim.');
}
答案 3 :(得分:0)
public function CreateQuestion(Request $request)
{
$this->validate($request, [
'exercise' => 'required',
'question' => 'required',
'opt1' => 'required',
'opt2' => 'required',
'opt3' => 'required',
'opt4' => 'required',
]);
$inputs = $request->all();
foreach ($inputs['exercise'] as $key => $exercise)
{
Question::create(array(
'exercise'=>$exercise,
'question'=>$inputs['question'][key],
'opt1'=>$inputs['opt1'][key],
'opt2'=>$inputs['opt2'][key],
'opt3'=>$inputs['opt3'][key],
'opt4'=>$inputs['opt4'][key],
));
}
return back()->with('success','Soal Berhasil dikirim.');
}