0

我创建了一个带有复选框的表单:

<input type="checkbox" name="cars[]" value="Toyota" /> Toyota
<input type="checkbox" name="cars[]" value="Honda" /> Honda
<input type="checkbox" name="cars[]" value="Nissan" /> Nissan

在 php 部分,我读取数组并像这样插入它:

$carvalue = "";
foreach($_POST['cars'] as $single){
    $carvalue .= $single;
    $carvalue .= ", ";
}

$carvalue我将变量分隔值(例如丰田、本田、日产)插入到我的 mysql 数据库表中。这个对吗?

4

5 回答 5

2

这可能会使其更具可读性,并且您将摆脱尾随逗号:

$carvalue = implode(",", $_POST['cars']);

当然,首先检查 $_POST['cars'] 是否存在且不为空等。

但是,由于您将其存储到数据库中,您可能需要考虑使用逗号分隔值以外的其他值,例如 JSON。

于 2013-10-13T12:05:29.783 回答
0

尝试这个:

<?php
$carvalue = '';
if(!empty($_POST['cars']))
{
      $carvalue = implode(",", $_POST['cars']);
      $carvalue = rtrim($carvalue, ",");
}
?>

使用 $carvalue 在数据库中插入值

于 2013-10-14T11:24:42.987 回答
0

什么是正确的取决于您对数据的使用,但是在将这些值连接到字符串时需要注意一些事项。例如,如果您想查找所有包含“Honda”的行(您可能会),这可能是存储数据的不好方法。

我可能会制作一些额外的表格:car_make、car_make_group 和 car_make_to_group。我会放

car_make (make_id, make_desc)
------------------
1, "Toyota"
2, "Honda"
3, "Nissan"

我会像位标志枚举一样对我的组进行编号,但这并不是很重要..它只是一种以不冲突的方式将编号分配给组的方法。它还具有一切都是相加的特性(group2 + group4 = group6)。不过,我总是提供一个关联表。

car_make_group (make_group_id, make_group_desc)
------------------
1, "Toyota"
2, "Honda"
3, "Toyota, Honda"
4, "Nissan"
5, "Toyota, Nissan"
6, "Honda, Nissan"
7, "Toyota, Honda, Nissan"

最后,我会制作一个关联表来帮助查询:

car_makes_to_group (make_id, make_group_id)
------------------
1, 1
1, 3
1, 5
1, 7
2, 2
2, 3
2, 6
2, 7
3, 4
3, 5
3, 6
3, 7    

使用多个表将使您对未来的更改具有一定的灵活性。例如,您稍后可能会意识到您想使用 JSON 并更改 make_group_desc 以保存 JSON 字符串而不是逗号分隔的字符串。

您将能够运行临时查询,您可以在其中找到包含“Toyota”的每一行:

Select m.make_id, m.make_desc, g.make_group_id, g.make_group_desc
FROM car_make_to_group t
INNER JOIN car_make_group g
ON (t.make_group_id = g.make_group_id)
INNER JOIN car_make m
ON (t.make_id = m.make_id)
WHERE m.make_desc = "Toyota" 
于 2013-10-13T12:48:21.830 回答
0

如果您遵循范式,那么这将是一个坏主意,因为它会违反第一个范式(Bcoz 单个字段已被允许包含多个值)。否则我看不出有任何问题。

范式参考:http ://en.wikipedia.org/wiki/First_normal_form

于 2013-10-13T12:01:13.477 回答
-1

最好使用 json_encode 创建一个 json 字符串并将其存储在数据库中。如果以后需要,这将更容易将数据转换回可用格式(回到数组)。

于 2013-10-13T12:09:42.270 回答