我有一个复选框,要求用户输入他/她最喜欢的课程。我想将所有选定的课程存储在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())";$_POSTfavorite是有问题的字段。
发布于 2013-06-05 04:37:27
$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())";发布于 2013-06-05 04:52:00
如果您真的想将所有喜欢的课程放在一个字段中,可以将此字段设置为字符串,并通过序列化将PHP数组存储在其中。您可以使用serialize()函数,或者JSON、json_encode()或任何其他类似的方法。要检索数据,只需使用unserialize()或json_decode(),就可以让数组返回到PHP语言中。
但请记住,使用SELECT语句来过滤喜欢course foo或course bar的人将是相当困难的。最好的方法是遵循jeroen的建议,规范化您的数据。
发布于 2013-06-05 05:41:38
好吧,出于安全和规范化的原因,你不应该这么做。
但是,如果您确实想要这样做,可以使用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将其链接到用户。例如,您可以创建与课程类型一样多的列,这将使您能够轻松地获得喜欢数学(例如)甚至数学和几何的人的列表。
使用您的解决方案,您将无法轻松做到这一点。
https://stackoverflow.com/questions/16926988
复制相似问题