我正在尝试在Laravel中创建一个多项选择测验,
这是管理员用来在数据库中插入问题的表单,所以这不是玩测验!
我使用angular来显示和隐藏答案C D E和F,在页面加载时只显示A和B.
我的想法是创建一个for循环,这样我就可以插入每个非空的答案。
我如何在laravel中这样做?我在想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() }}
答案 0 :(得分:1)
您构建表单的方式有点令人困惑。
如果这是一个多项选择测验,那么答案应该是不可编辑的(标签),并且只需要用户使用单选按钮选择正确的答案。
在这种情况下,您可以将单选按钮值设置为答案文本(或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>
答案 1 :(得分:0)
(新答案,回应修订后的问题)
从您提出问题的方式来看,我已经假定问题的最大答案数是固定的。让我们进一步假设您识别字母A到F的那些,如您的示例所示。
鉴于你的答案&#34;字段接受多个响应,其名称应包括方括号。我们可以按如下方式确定每个答案:
<input type="text" name="answer[A]" />
我们可以通过构建以下形式的单选按钮来识别正确的答案:
<input type="radio" name="correct_answer" value="A" />
在控制器中调用Input::get('answer')
将返回一个关联数组,其中键是答案标识符(A到F),值是答案文本。
您可以使用PHP的array_filter
功能过滤掉空答案。
$answers = array_filter(Input::get('answer'));