如何根据存储在数据库中的类型更改输入类型?

Posted

技术标签:

【中文标题】如何根据存储在数据库中的类型更改输入类型?【英文标题】:How to change the input type based on the type stored in database? 【发布时间】:2018-05-24 01:03:03 【问题描述】:

我有一个表格供用户创建自定义问题。用户需要介绍问题以及字段类型(文本、长文本、复选框、选择菜单、单选按钮)来创建自定义问题:

<form method="post" class="clearfix" action="route('questions.store', ['conference_id' => $conference->id])" enctype="multipart/form-data">
    csrf_field()
    <div class="form-group">
        <label for="question">Question</label>
        <input type="text" class="form-control" name="question" id="question">
    </div>
    <div class="form-group">
        <label for="type" class="text-heading h6 font-weight-semi-bold">Type of field</label>
        <select class="form-control" name="type" id="type">
            <option value="text">Text</option>
            <option value="long_text">Long Text</option>
            <option value="checkbox">Checkbox</option>
            <option  value="radio_btn">Radio Button</option>
            <option  value="select_menu">Select menu</option>
        </select>
    </div>

    <div>
        <input type="submit" class="btn btn-primary" value="Store"/>
    </div>
</form>

在数据库中的问题表是这样的:

id       question                    conference_id        type
1        Whats your phone?               1                 text
2        Want receive notifications?      1                 radio_btn
3       ..............                    1                 checkbox
4       ..............                    1                 long_txt
5       ..............                    1                 select_menu

然后在 registration.blade.php 中,我向用户显示自定义问题,以便他回答。该问题已通过以下代码呈现给用户。我的疑问是如何根据存储在数据库中的问题类型更改输入类型。

您知道如何实现吗?因为它总是出现带有文本类型的问题。但是,如果问题类型是例如复选框,则问题应显示为复选框,而不是输入类型文本。

@foreach($selectedType['questions'] as $customQuestion)
    <div class="form-group">
        <label for="participant_question">$customQuestion->question</label>
        <input type="text"
               @if($customQuestion->pivot->required == "1") required @endif
               class="form-control" name="participant_question[]">
        <input type="hidden" name="participant_question_required[]"
               value=" $customQuestion->pivot->required ">
        <input type="hidden" value=" $customQuestion->id " name="participant_question_id[]"/>
    </div>
@endforeach

【问题讨论】:

它不像制作 QuestionType 类或类似的东西来处理这个问题那样优雅,但您可以在 type 上使用 switch 语句并让它回显不同的输入类型您需要的不同问题类型。不过,您的设计可能会遇到一些限制,因为选择/收音机可以有多个答案,但与同一个问题相关联。不确定这里是如何处理的,或者您的设计中的期望。 【参考方案1】:

在您的 Question 模型中创建一个函数来输出所需的不同类型的输入。

例如

public function gethtmlInput($name = "", $id = "", $required = false, class="", val = "", $customtype=false) 

    switch ($this->type) 
        case "text": 
              return "<input type='".($customtype?:"text")."' name='$name' id='$id' class='$class' value='$val'" . ($required?:"required") . ">";
        case "checkbox":
        ...
    

那么在你看来,你可以做$question-&gt;getHtmlInput(&lt;params&gt;)

【讨论】:

以上是关于如何根据存储在数据库中的类型更改输入类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置输入类型文件的值并存储在php中的数据库中?

如何在c#中更改数据表中所有列的数据类型[重复]

OpenCV C++:根据存储在 int 向量中的索引为 Mat 类型数据创建列范围

根据用户输入更改箱线图显示 - 闪亮(不能强制类型“闭包”为字符类型的向量)

如何根据用户类型更改 VueJS 中的背景

请问C#.net如何更改dataTable的数据类型?