How can I get seprate quiestion ID in foreach loop?

时光总嘲笑我的痴心妄想 提交于 2019-12-12 07:00:15

问题


I am new in laravel, I am making quiz application in laravel, I got this issue

@include('inc.header')
<br>
    <div class="container">
        <div class="row">
            <form method="POST" action="{{ url('/store-quiz') }}" class="" id="quiz_module">
            {{ csrf_field() }}      
                @foreach($questions as $question)
                    @if($id == $question->category_id)
                        <legend> Quiz Of {{ $question->category->title }}</legend>
                            <div class="jumbotron">
                                <input type="hidden" name="user_id" value="{{ auth()->user()->id }}">
                                <input type="hidden" name="category_id" value="{{ $question->category_id }}">
                                <input type="hidden" name="question_id" value="{{ $question->id }}">
                                <h4> 
                                    Question {{ $question->id }}
                                </h4>
                                <h3>
                                    {{ $question->question }}
                                </h3><brx`>
                                <h5>
                                    &emsp;<input type="radio" name="user_answer" class="form-check-input"  value="{{ $question->option_a }}">{{ $question->option_a }}<br>
                                    &emsp;<input type="radio" name="user_answer" class="form-check-input" value="{{ $question->option_b }}">{{ $question->option_b }}<br>
                                    &emsp;<input type="radio" name="user_answer" class="form-check-input" value="{{ $question->option_c }}">{{ $question->option_c }}<br>
                                    &emsp;<input type="radio" name="user_answer" class="form-check-input" value="{{ $question->option_d }}">{{ $question->option_d }}<br>
                                </h5>
                            </div>
                    @endif
                @endforeach
        </div>
            <button type="submit" class="btn btn-primary">Submit</button>
            </form>
    </div>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.5/validator.min.js"></script>
<script type="text/javascript">
$("#quiz_module").click(function(){
    var url = $(this).attr("action");
    $.ajax({
        url: "/store-answer",
        type:"POST",
        data: $('form').serialize(),
    }); //end of ajax
});
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf_token"]').attr('content')
    }
});
</script>
@include('inc.footer')

You can see my output here https://prnt.sc/p4esh1

Here I am getting all records from database.For answer when I click on any radio button, It will store user_id, category_id, question_id and answer in database.

But the problem is that everytime it take last question's question id.

I want to store individual question id, like if I select 2nd question's answer then in database 2nd question's question id save, same for 3rd question. But here everytime it saves 3.

How can I resolve this?? Please guide me, Thank You!

In My controller I code like below

public function storeAnswer(Request $request)
    {
        $create = Quiz::create($request->all());
        return redirect('/home');
    }

回答1:


I am not fully understanding your code with just these informations, but try the following:

Add the form inside the foreach loop, in order to send a request to a single Quiz object.

Like that:

@foreach($questions as $question)
    @if($id == $question->category_id)
        <legend> Quiz Of {{ $question->category->title }}</legend>
        <div class="jumbotron">
            <form method="POST" action="{{ url('/store-quiz') }}" id="quiz_module">
                <input type="hidden" name="user_id" value="{{ auth()->user()->id }}">
                <input type="hidden" name="category_id" value="{{ $question->category_id }}">
                <input type="hidden" name="question_id" value="{{ $question->id }}">
                <h4> 
                    Question {{ $question->id }}
                </h4>
                <h3>
                    {{ $question->question }}
                </h3><br>
                <h5>
                    &emsp;<input type="radio" name="user_answer" class="form-check-input"  value="{{ $question->option_a }}">{{ $question->option_a }}<br>
                    &emsp;<input type="radio" name="user_answer" class="form-check-input" value="{{ $question->option_b }}">{{ $question->option_b }}<br>
                    &emsp;<input type="radio" name="user_answer" class="form-check-input" value="{{ $question->option_c }}">{{ $question->option_c }}<br>
                    &emsp;<input type="radio" name="user_answer" class="form-check-input" value="{{ $question->option_d }}">{{ $question->option_d }}<br>
                </h5>
                <button type="submit" class="btn btn-primary">Submit</button>
            </form>
        </div>
    @endif
@endforeach



回答2:


I think you have to submit all answer together on submit button. please make below changes into your code. please note that: 1) form is outside of foreach 2) submit button should be into form tag. 3) name of each element into form.

 <form method="POST" action="{{ url('/store-answer') }}" class="crud-submit" id="quiz_module">
        @foreach($questions as $i => $question)
     <?php

            print_r($question);
            ?>
                <legend> {{$i}} Quiz Of {{ $question['category']['title'] }}</legend>

                    <div class="jumbotron">
                        <input type="hidden" name="user_id" value="1">
                        <input type="hidden" name="que_module[{{$i}}]['category_id']" value="{{ $question['category_id'] }}">
                        <input type="hidden" name="que_module[{{$i}}]['question_id']" value="{{ $question['id'] }}">
                        <h4>
                            Question {{ $question['id'] }}
                        </h4>
                        <h3>
                            {{ $question['question'] }}
                        </h3><br>
                        <h5>
                            &emsp;<input type="radio" name="que_module[{{$i}}]['answer']" class="form-check-input"  value="{{ $question['option_a'] }}">{{ $question['option_a'] }}<br>
                            &emsp;<input type="radio" name="que_module[{{$i}}]['answer']" class="form-check-input" value="{{ $question['option_b'] }}">{{ $question['option_b'] }}<br>
                            &emsp;<input type="radio" name="que_module[{{$i}}]['answer']" class="form-check-input" value="{{ $question['option_c'] }}">{{ $question['option_c'] }}<br>
                            &emsp;<input type="radio" name="que_module[{{$i}}]['answer']" class="form-check-input" value="{{ $question['option_d'] }}">{{ $question['option_d'] }}<br>
                        </h5>
                    </div>


        @endforeach
         <button type="submit" class="btn btn-primary">Submit</button>
         </form>

you have to changed into jquery also as below.

$("#quiz_module").submit(function(e)
    {
        e.preventDefault();
            $.ajax({
                type: 'POST',
                dataType: 'json',

                url: '/store-answer',
                data: $("#quiz_module").serialize(),
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
            });
    });

you have get all data into controller as below.

function storeAnswer(Request $req){
    print_r($req->all());
}


来源:https://stackoverflow.com/questions/57876933/how-can-i-get-seprate-quiestion-id-in-foreach-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!