Php 何时应使用非二进制(1或0)值的复选框值?
我在网上看到很多人在stackoverflow上,我的同事在他们的复选框中使用的值不是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';
),但我的想法是,从本质上讲,复选框总是一个是/否的答案
目前,我使用我编写的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。