【问题标题】:laravel foreach input radiobutton displayed incorrectlylaravel foreach 输入单选按钮显示不正确
【发布时间】:2020-09-11 09:42:00
【问题描述】:

我正在尝试显示问题的选项。我有一个问题,当我这样做时:

@section('content')
<div class="card">
  <div class="card-header">Quiz: {{$category->name}}:</div>
  <div class="card-body">
    <form action="#" method="post" class="form-group">
      @csrf
      @foreach($questions as $key => $question)
        <div class="form-group">
          <label for="question">Question {{1+$key}}:</label>
          <p class="card-text">{{$question->question_text}}</p>
          @foreach($question->option_text as $key => $option)
            <input type="radio">{{$option}}
          @endforeach
        </div>
        @endforeach
      <div class="form-group">
        <input type="submit" class="btn btn-primary">
      </div>
    </form>
  </div>
</div>
@endsection

我可以同时检查所有单选按钮,但如果我为单选按钮命名,我只能检查整个问题的选项之一。我认为 foreach 循环有些奇怪。

信息:“问题”表有以下几行: id、category_id、question_text、correct_answer、option_text(这是一个转换为数组的 json 字段)

来自控制器的代码:

public function store(Request $request, Category $category){
  if($request->categoryTest == $category->name){
    $questions = $category->question()->inRandomOrder()->get();
    return view('user.test', compact('questions', 'category'));
  }
}

你知道如何解决这个问题吗?谢谢!

【问题讨论】:

    标签: php html laravel radio-button laravel-blade


    【解决方案1】:

    试试这个:

    @section('content')
    <div class="card">
      <div class="card-header">Quiz: {{$category->name}}:</div>
      <div class="card-body">
        <form action="#" method="post" class="form-group">
          @csrf
          @foreach($questions as $key => $question)
            @php
            $q = 1+$key
            @endphp
            <div class="form-group">
              <label for="question">Question {{1+$key}}:</label>
              <p class="card-text">{{$question->question_text}}</p>
              @foreach($question->option_text as $key => $option)
                <input name="radio-{{$q}}" type="radio">{{$option}}
              @endforeach
            </div>
            @endforeach
          <div class="form-group">
            <input type="submit" class="btn btn-primary">
          </div>
        </form>
      </div>
    </div>
    @endsection
    

    【讨论】:

      【解决方案2】:

      这似乎是单选按钮的正常行为,只有一个是市场时间。你试过用复选框来代替吗?

      另外,如果要将其发送到后端,则需要设置名称属性。神奇之处在于:不要使用单数名称,而是将其作为数组放置,以便在控制器上获取数组。

      <input type="checkbox" name="question[]" class="btn btn-primary">
      

      【讨论】:

      • 我可以用一个复选框试试,这是对的,谢谢!但我认为它也可以与单选按钮一起正常工作
      • 我猜是的,但您需要记住,收音机有很多选择,可以只选择其中一个。如果您只想标记一个,那很好 - 只需输入 name 属性(不带 []),您就会在后端获得值。我忘记提到的一件事是您需要设置 value 属性 - 这是您将在控制器上获得的值
      • 作为值我设置了 value="{{$option}}",现在我应该从选项数组中获取当前选项,对吗?
      • 尝试类似 {{$option}} 然后在控制器中检查 $ request->input('selectedQuestion')... 我认为它会工作。
      • 它不起作用,如果我将名称设置为“selectedQuestion”之类的名称,那么我只能在整个测验中标记一个问题选项,这与我一开始遇到的问题相同,但在另一方面,现在我知道当我将 $question->id 作为名称时它也可以工作,所以我不必像 serghei 提到的那样做:)
      猜你喜欢
      • 1970-01-01
      • 2015-04-16
      • 2014-03-01
      • 2016-02-21
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多