我有一个复选框,要求用户输入他/她喜欢的课程。我想将所有选定的课程存储在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 [收藏]是有问题的字段。
答案 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将其链接到用户。 例如,您可以创建与课程类型一样多的列,这将使您能够轻松获得喜欢数学(例如)甚至数学和几何的人员列表。
您将无法轻松地使用您的解决方案。