我想知道将多个复选框形式的结果存储到mysql表中的更好方法。
我可以看到两个解决方案,但也许还有其他
- 复选框一个字段
- 包含序列化数据的所有复选框的一个字段
THX
答案 0 :(得分:2)
只是为自己说话:如果我在第一时间将每个列存储一个,我会发现它更容易查询存储的复选框值。但当然是YMMV。
每列存储一个值也会使这些值标准化,这是(或应该)我设计表格的主要目标之一。
答案 1 :(得分:2)
复选框中的一个字段绝对不是他们要走的路,这会比其他任何事情都更麻烦。
如果你真的需要将结果存储在同一个表中,那么序列化是最好的,只要你知道你不能根据这些值进行SQL查询。
最好的办法是创建一个NxN表,将原始表链接到另一个表,在那里您将拥有可能的复选框值列表。这也是这种情况的推荐标准化。
答案 2 :(得分:2)
我同意Vitor Mello,创建一个表格,其中每个复选框都映射到一个特殊字段。这不是那么多开销,所以省去麻烦。
另外我猜你正在使用表单将这些答案发回服务器?
如果有的话,这里有一个提示:
当您将包含复选框的表单发布到服务器端PHP页面时,您检查复选框是否设置如下:
HTML:
<form>
<input type="checkbox" name="chk1" />
<input type="checkbox" name="chk2" />
<input type="submit" name="myChkSubmit" />
</form>
PHP POSTBACK处理程序:
<?php
//Correct way to retrieve your checkboxes
$chk1 = FALSE;
$chk2 = FALSE;
if( isset($_POST['chk1']) )
{
$chk1 = TRUE;
}
if( isset($_POST['chk2']) )
{
$chk2 = TRUE;
}
//WRONG WAY
$chk1 = FALSE;
$chk2 = FALSE;
if( isset($_POST['chk1']) )
{
$chk1 = $_POST['chk1']; //This will always evaluate to "undefined"
}
if( isset($_POST['chk2']) )
{
$chk2 = $_POST['chk2']; //This will always evaluate to "undefined"
}
//NOTE: the reason the above example is incorrect is because the form will indicate checked
// status of a check box by setting the POST array element, but does not set a value
// for that element. If the element is set in POST it was checked, if it is not set,
// it will not be a recognized index in the POST array.