将多个复选框答案放在MySQL数据库中

时间:2013-06-04 20:35:25

标签: php mysql

我有一个复选框,要求用户输入他/她喜欢的课程。我想将所有选定的课程存储在MySQL数据库中以分隔符分隔的一列中

这是我将其插入mysql数据库的方式。我该怎么做?

$sql="INSERT INTO Students(FirstName, LastName,gender,Major,Favorite_courses,GPA,Date_of_reg)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[sex]','$_POST[major]','$_POST[favorite]','$_POST[GPA]',SYSDATE())";

$ _ POST [收藏]是有问题的字段。

3 个答案:

答案 0 :(得分:3)

$sql="INSERT INTO Students(FirstName, LastName,gender,Major,Favorite_courses,GPA,Date_of_reg) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[sex]','$_POST[major]','implode(\',\',$_POST[\'favorite\'])','$_POST[GPA]',SYSDATE())";

答案 1 :(得分:2)

如果您真的想将所有喜爱的课程放在一个字段中,您可以将此字段设为字符串,并通过序列化将PHP数组存储在其中。您可以使用serialize()函数或JSON,json_encode()或任何其他类似方法。要检索数据,只需使用unserialize()json_decode(),然后您将使用PHP恢复数组。

但请记住,使用SELECT语句过滤喜欢课程foo或课程栏的人,将会非常困难。最好的方法是遵循jeroen的建议,规范化您的数据。

答案 2 :(得分:0)

好吧,出于安全和规范化的原因,你不应该这样做。

但是,你可以这样做,如果你真的想通过使用php的serialize()函数。

$myFavorites = serialize($_POST[favorite]);
$sql="INSERT INTO Students  (FirstName, LastName, gender, Major, Favorite_courses, GPA, Date_of_reg) VALUES
('$_POST[firstname]' ,'$_POST[lastname]' ,'$_POST[sex]' ,'$_POST[major]', '$myFavorites', '$_POST[GPA]', SYSDATE())";

使用

从数据库中获取后,您将能够对其进行反序列化
$serializedCourses = myFunctionToGetItFromMyDatabase();
$unserializedCourses = unserialize($serializedCourses);

我要做的是在数据库中为课程创建另一个表,并通过用户的ID将其链接到用户。 例如,您可以创建与课程类型一样多的列,这将使您能够轻松获得喜欢数学(例如)甚至数学和几何的人员列表。

您将无法轻松地使用您的解决方案。