【问题标题】:How to save checkbox array in database?如何将复选框数组保存在数据库中?
【发布时间】:2010-09-02 23:15:24
【问题描述】:

我有这个表格:

    <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 表字段中。我该怎么做?

感谢您的帮助!

【问题讨论】:

  • 使用serialize函数:)

标签: php arrays checkbox


【解决方案1】:

您可以使用@987654321@$box 数组加入一个字符串,如下所示:

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

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

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

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

如果您希望再次将数据提取出来,这种存储数据的方式可能会使再次查询数据变得非常棘手,因此虽然它应该足以简单地打印到屏幕上,例如产品历史记录,但您可能会更好调查您的数据库表结构是否可以变得更适应。因此,如果我们假设这是用于库存控制系统,例如:

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 个条目。

这将允许您在将来查询您的数据库以跟踪诸如已取出(或重新添加等)多少物品、谁拿走了它们等信息,并且最终可能会更加面向未来方法,具体取决于您的整体架构。

【讨论】:

  • 谢谢,您的第一个解决方案对我有用,尽管我同意您的 cmets。但这就是它的要求。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你可以:

    $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
    

    我希望这是有道理的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多