现在我在PHP&编码HTML
我需要从复选框组中进行选择 它是这样的:
下拉菜单中的值是从表subject
中数据库中存储的值中检索的。所以复选框选项将显示为(例如)数学,代数,微积分,英语,语言等。 - 我显示这个没有问题。
表主题
subject_id subject_name
========== ============
1 Mathematics
2 Algebra
3 Calculus
4 English
5 Linguistic
之后,学生可以选择他们的subject
,并将其存储在另一个名为student_subject
的表中,其中存储了student_id
和subject_id
(存储学生选择的科目)
例如:
表student_subject
student_id subject_id
========== ===========
1 1
1 2
1 3
2 1
2 3
我真的不知道如何创建这个功能。我知道这里有很多经验丰富的程序员和开发人员,所以我希望你能告诉我正确的方法。非常感谢您的指导。
答案 0 :(得分:0)
您不应删除/禁用/不显示现有主题。
首先,您应检查student_subject
表的现有行,并在HTML复选框中将其呈现为已选中。
其次,当学生在编辑模式下对主题选择进行更改时,请在循环中使用学生和主题ID检查数据库行。
如果数据库中没有学生的提交主题ID,请将该值插入表中。
如果数据库中提供了学生的提交主题ID,则不执行任何操作。
使用数据库检查已提交值的已删除主题,并从数据库中删除。
如果您要禁用现有主题,请在主题分配给学生时使用readonly
复选框。
答案 1 :(得分:0)
这只是一个想法:
在你的#2表中将存储student_id和subject_id,我认为最好每当你将值存储到subject_id时 - 你只需将值存储在php数组中就可以序列化这个值,你就可以迭代整个数组了该领域是否被检查过。
Json_encode也很好,因为它将是一个字符串,与serialize相同
示例:
Student_id Subject_ID
999-0518 a:{this is the serialize value };
然后当你查询结果时它会被序列化,然后使用unserialize函数并做一个循环来迭代结果,当你json_encode时也一样;只需执行json_decode()函数并执行循环。
答案 2 :(得分:0)
您可以使用仅查找ID不在student_subject
。
看起来像是:
SELECT * FROM `subject`
WHERE `subject_id` NOT IN (
SELECT `subject_id` FROM `student_subject` WHERE `student_id` = '1'
)
(如果您不希望这是特定于用户的话,可以省略内部where
子句
然后根据从它返回的数组构建<select>
元素。