我正在尝试在Laravel中创建多项选择测验,
这是管理员用来在数据库中插入问题的形式,所以这不是为了玩测验!
我使用角度来显示和隐藏答案 C D E 和 F,在加载页面时仅显示 A 和 B。
这个想法是创建一个 for 循环,以便我可以插入每个不为空的答案。
如何在拉拉维尔中执行此操作?我想count(Input::get('answer'))
但它不起作用。即使它有效,它仍然会计算我所有的答案,但不会计算有价值的答案。
我所有的答案输入都有相同的名称。
请帮忙!
{{ Form::open(['action' => 'QuizController@storeQuestions']) }}
{{ Form::hidden('id', $quiz->id) }}
<div class="form-group">
<label class="form-label">Question:</label>
{{ Form::text('question', Input::old('question'), array('class' => 'form-control')) }}
</div>
<div class="form-group">
<label class="form-label">Answer A:</label>
{{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
{{ Form::radio('is-correct') }}
</div>
<div class="form-group">
<label class="form-label">Answer B:</label>
{{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
{{ Form::radio('is-correct') }}
</div>
<!-- De '+' krijgt de showInput van de vorige input! -->
<div class="form-group">
<span class="add-question-button"><a class="plus-input" ng-click="addAnswer(1)">+</a></span>
</div>
<div ng-show="showInput1" class="form-group">
<label class="form-label">Answer C:</label>
{{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
{{ Form::radio('is-correct') }}
</div>
<div class="form-group">
<span class="add-question-button"><a ng-show="showInput1" ng-click="addAnswer(2)" class="plus-input">+</a></span>
</div>
<div ng-show="showInput2" class="form-group">
<label class="form-label">Answer D:</label>
{{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
{{ Form::radio('is-correct') }}
</div>
<div class="form-group">
<span class="add-question-button"><a ng-show="showInput2" ng-click="addAnswer(3)" class="plus-input">+</a></span>
</div>
<div ng-show="showInput3" class="form-group">
<label class="form-label">Answer E:</label>
{{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
{{ Form::radio('is-correct') }}
</div>
<div class="form-group">
<span class="add-question-button"><a ng-show="showInput3" ng-click="addAnswer(4)" class="plus-input">+</a></span>
</div>
<div ng-show="showInput4" class="form-group">
<label class="form-label">Answer F:</label>
{{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
{{ Form::radio('is-correct') }}
</div>
{{ Form::submit('Next question', array('class' => 'btn btn-primary btn-block')) }}
<button class="btn btn-success btn-block">Finish</button>
{{ Form::close() }}
你构建表单的方式有点令人困惑。
如果这是一个多项选择测验,则答案应该是不可编辑的(标签),并且用户应该只需要使用单选按钮选择正确的答案。
在这种情况下,您可以将单选按钮值设置为答案文本(或 ID,如果要从数据库中提取可用答案)。
例如:
<label>Who was the first man on the moon?</label>
<label>
<input type="radio" name="man_on_moon" value="Armstrong" /> Neil Armstrong
</label>
<label>
<input type="radio" name="man_on_moon" value="Aldrin" /> Buzz Aldrin
</label>
<label>
<input type="radio" name="man_on_moon" value="Hanks" /> Tom Hanks
</label>
(新答案,作为对修订问题的回应)
从你对问题的措辞来看,我假设一个问题的最大答案数是固定的。让我们进一步假设您用字母 A 到 F 来标识它们,如您的示例所示。
鉴于您的"答案"字段接受多个响应,其名称应包含方括号。我们可以按如下方式确定每个单独的答案:
<input type="text" name="answerswer[A]" />
我们可以通过构造以下形式的单选按钮来识别正确答案:
<input type="radio" name="correct_answer" value="A" />
在控制器中调用Input::get('answer')
将返回一个关联数组,其中键是答案标识符(A 到 F),值是答案文本。
您可以使用 PHP 的 array_filter
函数来过滤掉空答案。
$answers = array_filter(Input::get('answer'));