仅计算Laravel 4中具有值的输入

时间:2015-03-16 11:25:38

标签: php angularjs laravel input

我正在尝试在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() }}

2 个答案:

答案 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'));