Php 何时应使用非二进制(1或0)值的复选框值?

Php 何时应使用非二进制(1或0)值的复选框值?,php,jquery,html,mysql,checkbox,Php,Jquery,Html,Mysql,Checkbox,我在网上看到很多人在stackoverflow上,我的同事在他们的复选框中使用的值不是1或0(例如,),但我的想法是,从本质上讲,复选框总是一个是/否的答案 目前,我使用我编写的jQuery脚本对我的应用程序进行标准化,该脚本如下所示: ;(function($){ $(document).ready(function() { var selector = 'input[type="checkbox"]'; var c = 'checked';

我在网上看到很多人在stackoverflow上,我的同事在他们的复选框中使用的值不是1或0(例如,
),但我的想法是,从本质上讲,复选框总是一个是/否的答案

目前,我使用我编写的jQuery脚本对我的应用程序进行标准化,该脚本如下所示:

;(function($){
    $(document).ready(function() {
        var selector = 'input[type="checkbox"]';
        var c = 'checked';
        $.each($(selector),function(){
            var $el,value,attr;
            $el = $(this);
            value = $el.val();
            attr = $el.attr(c);
            if(value == 1 || typeof(attr) !== 'undefined')
            {
                $el.attr(c,c);
                $el.prop(c,true);
                $el.val(1);
            }
            else{
                $el.removeAttr(c);
                $el.prop(c,false);
                $el.val(0);
            }
        });
        $(selector).change(function(e){
            var $el, checked = null;
            $el = $(this);
            checked = $el.prop(c);
            if (checked) {
                $el.attr(c,c);
                $el.val(1);
            } else {
                $el.removeAttr(c);
                $el.val(0);
            }
        });
    });
})(jQuery);
因此,我可以处理以下任何情况:

<input type='checkbox' value='1'/>
<input type='checkbox' checked/>
<input type='checkbox' checked='checked'/>
<input type='checkbox' value='1' disabled/>
<input type='checkbox' checked disabled/>
<input type='checkbox' checked='checked' disabled/>
<input type='checkbox' value='0'/>
<input type='checkbox'/>
<input type='checkbox' value='0' disabled/>
<input type='checkbox' disabled/>

但它不考虑任何非0或1或属性为“checked”的复选框值

我的问题是:使用非0/null或1值(特别是在使用关系数据库时)是否有好的使用案例?

考虑以下问题:“选择您最喜欢的水果(选中所有适用项)”

您的方法:

<input type="checkbox" name="choice_apple" value="1" />
<input type="checkbox" name="choice_orange" value="1" />
<input type="checkbox" name="choice_durian" value="1" />

或者您可以使用类似以下内容:

<input type="checkbox" name="choice[]" value="apple" />
<input type="checkbox" name="choice[]" value="orange" />
<input type="checkbox" name="choice[]" value="durian" />

后端存储系统与此无关。我们只是在谈论复选框。您的方法需要3个单独的表单字段名,名称中嵌入选项的“值”。提取该名称需要额外的开销,以便您可以将水果的名称实际存储在某个位置

然而,对于“有用值”版本,它只是一个表单字段。PHP将把这些选择转换成一个数组,最终得到所需的确切名称,而不需要额外的提取/处理

请记住:未选中的复选框不会以正常表单提交。这里已经有一个隐含的真/假。如果在服务器上获得复选框的字段名,则复选框已选中

既然你已经有了一个很好的内置的真/假,为什么不在说真/假代表什么的额外语义上分层呢?

考虑以下内容:“选择你最喜欢的水果(勾选所有适用项)”

您的方法:

<input type="checkbox" name="choice_apple" value="1" />
<input type="checkbox" name="choice_orange" value="1" />
<input type="checkbox" name="choice_durian" value="1" />

或者您可以使用类似以下内容:

<input type="checkbox" name="choice[]" value="apple" />
<input type="checkbox" name="choice[]" value="orange" />
<input type="checkbox" name="choice[]" value="durian" />

后端存储系统与此无关。我们只是在谈论复选框。您的方法需要3个单独的表单字段名,名称中嵌入选项的“值”。提取该名称需要额外的开销,以便您可以将水果的名称实际存储在某个位置

然而,对于“有用值”版本,它只是一个表单字段。PHP将把这些选择转换成一个数组,最终得到所需的确切名称,而不需要额外的提取/处理

请记住:未选中的复选框不会以正常表单提交。这里已经有一个隐含的真/假。如果在服务器上获得复选框的字段名,则复选框已选中


既然您已经有了一个很好的内置真/假,为什么不在说真/假代表什么的额外语义上分层呢?

“选择所有适用的”[]是[]否[]未找到文件
。仅仅因为你想不出任何非y/n方案并不意味着它们不存在。@MarcB为此,我将使用在相关表上创建3列,并根据是否选中,在每个列中插入一个二进制值。如果有不同数量的选项,我将使用一个结点表。也可以考虑在检查框行为中使用NULL。<代码>“选择所有适用的”[]是[][NO]文件未找到。仅仅因为你想不出任何非y/n方案并不意味着它们不存在。@MarcB为此,我将使用在相关表上创建3列,并根据是否选中,在每个列中插入一个二进制值。如果有可变数量的选项,我将使用连接表。也可以考虑在检查框行为中使用NULL。