如何在数据库中保存复选框数组?

时间:2010-09-02 14:57:43

标签: php arrays checkbox

我有这样的表格:

    <tr>
   <td><input type="hidden" name="ledlamps" value="LED lamps">LED lamps:</td>
   <td><input class="field checkbox" type="checkbox" name="box[]" value="3mm"/><label class="choice">3mm</label></td>
   <td><input class="field checkbox" type="checkbox" name="box[]" value="5mm"/><label class="choice">5mm</label></td>
   <td><input class="field checkbox" type="checkbox" name="box[]" value="8mm"/><label class="choice">8mm</label></td>
   <td><input class="field checkbox" type="checkbox" name="box[]" value="10mm"/><label class="choice">10mm</label></td>
   <td><input class="field checkbox" type="checkbox" name="box[]" value="Ovals"/><label class="choice">Ovals</label></td>
   <td><input class="field checkbox" type="checkbox" name="box[]" value="Assembly LEDs"/><label class="choice">Assembly LEDs</label></td>
  </tr>

和这个PHP代码:

    $box=$_POST['box'];
$ledlamps = $_POST['ledlamps'];

if ($box != 0) {
echo "$ledlamps: ";
while (list ($key,$val) = @each ($box)) {
$val1 = "$val, ";
echo "$val1";
}

}

如果我输出echo,它会以我想要的方式显示:

Led灯:3mm,5mm,8mm(如果我勾选相应的复选框)

但是我想将它存储在mysql表字段中。我该怎么做?

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

按照@Sarfraz的建议将它们存储在数据库serialize中,或以逗号分隔,或者在单独的表中与主表连接。

答案 1 :(得分:2)

您可以使用implode()$box数组加入到一个字符串中,如下所示:

$box=$_POST['box'];
$ledlamps = $_POST['ledlamps'];

$str = $ledlamps . ": " . implode(", ", $box);

然后$str应包含“Led灯:3mm,5mm,8mm”(取决于您检查过的字段)。

然后可以将此字段插入到您需要的任何mysql列中(假设您的查询为properly escaped并在尝试数据库查询之前验证输入。)。

这种存储数据的方式可能会让您再次查询数据再次查询数据非常棘手,因此虽然它应该足以简单地打印到产品历史之类的屏幕上,但您可能会更好调查您的数据库表结构是否可以更容易调整。因此,如果我们假设这是一个库存控制系统,就像:

category table:
- category_id
- category_name      (LED lamps..)

stock table:
- item_id
- category_id        (id for LED lamps..)
- item_description   (3mm lamp, etc)

stock_selection table:
- transaction_id
- user_id
- date

stock_transaction table:
- transaction_id
- item_id
- change             (number of items added/removed)

因此,一旦您收到表单中的复选框,就会为登录用户创建新的stock_selection记录。然后,您可以使用此新记录中的id,并在stock_transaction表中为每个复选框创建1个条目。

这将允许您将来查询您的数据库,以跟踪诸如已经取出(或重新添加等)的项目数量,谁接受它们等等,并最终可能更加面向未来方法,取决于您的整体架构。

答案 2 :(得分:1)

你可以:

$boxes = implode(",", $_POST['boxes']);
$id = intval($_GET['id']);
$sql = sprintf("UPDATE table SET box=%s WHERE id=%d", $boxes, $id);
$res = mysql_query($sql);

这会将框值存储在以逗号分隔的数组中,然后在从数据库中检索时可以explode()

或者,如果您想要正确的路线,可以设置一个单独的表格。这样你就可以拥有多对一的关系,其中一个物体(比如汽车)可以有很多灯。

Table: cars
  - ID
  - Name

Table: cars_lamps
  - Car_ID
  - Lamp_ID

Table: Lamps
  - ID
  - Name

我希望这是有道理的。