如何将多个复选框结果存储到mysql表中

时间:2011-05-01 17:40:41

标签: php mysql database-design

我想知道将多个复选框形式的结果存储到mysql表中的更好方法。

我可以看到两个解决方案,但也许还有其他

- 复选框一个字段

- 包含序列化数据的所有复选框的一个字段

THX

3 个答案:

答案 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.