Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

ethar's avatar
Level 5

insert from input text Field Array with checkbox

i try to insert this form into db

<div>
	<input class="form-check-input" name="correctanswer" type="radio" value="0">
	<textarea name="answer[]" required></textarea>
</div>

<div>
	<input class="form-check-input" name="correctanswer" type="radio" value="0">
	<textarea name="answer[]" required></textarea>
</div>

eloquent

        $units = [];
        foreach ($request->answer as $key => $answer) {
            $units[] = [
                'question_id' => $question->id,
                'answer' => $request->answer[$key],
                'correct_answer' => $request->correctanswer[$key],
            ];
        }

        if (! empty($units)) {
            DB::table('answers')->insert($units);
            return redirect('/admin/question')->with('success','تم إضافة السؤال بنجاح');
        }

radio button checked must insert value 1, not checked insert zero. using jquery i changed radio button selected to 1;

but in Eloquent i got this error ErrorException Uninitialized string offset: 1

plz any help to insert (answers and correct answer insert value to 1)

0 likes
5 replies
Snapey's avatar

dd($request->all()); at the start of your controller function so that you can see the request data

1 like
ethar's avatar
ethar
OP
Best Answer
Level 5

This is my final code its works fine.

but I'm not sure if its good or need improve


    public function store(Request $request)
    {
        $question = new Question();
        $question->question=$request->input('question');
        $question->course_id=$request->input('course');
        $question->active=$request->input('active');
        $question->admin_id=Auth::user()->id;
        $question->save();
        $units = [];

        for ($i=0;$i<count($request->answer);$i++){
            $units[] = [
                'question_id' => $question->id,
                'answer' => $request->answer[$i],
            ];
        }

        if (! empty($units)) {

            for($i=0;$i<count($units);$i++){
                $lastId= DB::table('answers')->insertGetId($units[$i]);
            }
            $correct_answer = $lastId-count($units)+$request->correctanswer;
            $question->correct_answer=$correct_answer;
            $question->save();
            return redirect('/admin/question')->with('success','تم إضافة السؤال بنجاح');
        }
    }

in html

<div>
	<input class="form-check-input" name="correctanswer" type="radio" value="1">
	<textarea name="answer[]" required></textarea>
</div>

<div>
	<input class="form-check-input" name="correctanswer" type="radio" value="2">
	<textarea name="answer[]" required></textarea>
</div>

1- insert question.

2- insert answers and questionid.

3- calculate which answer is the correct answer

4-update question table to take best answer id

Snapey's avatar

validation?

authorization?

you don't need to use $request->input()

$question->question=$request->question;

is the same

you have your return inside an if statement. What if $units is empty - then you get a white screen.

consider changing the names of your form inputs

<div>
	<input class="form-check-input" name="answers[]correct" type="radio" value="1">
	<textarea name="answers[]text" required></textarea>
</div>

then you will have an array of answers, each has 'correct' and 'text' elements and you can run a simple foreach over answers and not have to use while loop with $i array pointers

1 like
Snapey's avatar

Sorry I was not able to help...

Please or to participate in this conversation.