我创建了一个带有复选框的表单:
<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
变量分隔值(例如Toyota,Honda,Nissan)插入到我的mysql db表中。这是对的吗?
答案 0 :(得分:2)
这可能使它更具可读性,你将摆脱尾随的逗号:
$carvalue = implode(",", $_POST['cars']);
当然,首先检查$ _POST ['cars']是否存在且不为空等等。
但是,由于您将其存储到数据库中,因此您可能需要考虑使用逗号分隔值以外的其他值,也许是JSON。
答案 1 :(得分:0)
如果您的下列正常形式,那么这将是一个坏主意,因为它将违反第一个正常形式(Bcoz单个字段已被允许包含多个值)。否则我没有看到任何错误。
答案 2 :(得分: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字符串而不是逗号分隔的字符串。
您将能够运行即席查询,其中您还可以找到包含“丰田”的每一行:
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"
答案 3 :(得分:0)
试试这个:
<?php
$carvalue = '';
if(!empty($_POST['cars']))
{
$carvalue = implode(",", $_POST['cars']);
$carvalue = rtrim($carvalue, ",");
}
?>
使用$ carvalue在数据库中插入值
答案 4 :(得分:-1)
最好使用json_encode创建一个json字符串并将其存储在数据库中。如果以后需要,这将使数据更容易变回可用格式(返回数组)。