2010-09-02 53 views
2

我有这样的形式:如何在数据库中保存复选框数组?

<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"; 
} 

} 

如果回声它显示在我的方式输出,我希望它:

LED灯具:3毫米的5mm ,8毫米(如果我勾选相应的复选框)

但我想把它存储在一个MySQL表字段。我怎么做?

感谢您的帮助!

+3

使用'serialize'函数:) – Sarfraz 2010-09-02 15:01:04

回答

2

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

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

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

然后$str应包含“LED灯具:3毫米的5mm,8毫米”(根据您检查领域)。

然后可以将此字段插入到您需要的任何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个条目。

这将允许您将来查询您的数据库以跟踪诸如取出(或重新添加等)的物品的数量,谁拿走了它等等,并且最终可能是更具未来性的产品,这取决于您的整体架构。

+0

谢谢,你的第一个解决方案为我工作,虽然我同意你的意见。但这是它的要求。 – 2010-09-02 17:13:59

2

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

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 

我希望有道理。

相关问题