0

我有一个复选框,要求用户输入他/她最喜欢的课程。我想将所有选定的课程存储在 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[favorite] 是有问题的字段。

4

3 回答 3

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())";
于 2013-06-04T20:37:26.900 回答
2

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

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

于 2013-06-04T20:52:00.147 回答
0

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

但是,如果你真的想使用 php.ini 的函数 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 将其链接到用户。例如,您可以创建与课程类型一样多的列,这将使您能够轻松获得喜欢数学(例如)甚至数学和几何的人的列表。

您将无法使用您的解决方案轻松做到这一点。

于 2013-06-04T21:41:37.677 回答