【问题标题】:PHP: How to remove/disable a selection from a checkbox group if the value is already selected and stored in database previouslyPHP:如果该值已被选中并先前存储在数据库中,如何从复选框组中删除/禁用选择
【发布时间】:2017-12-07 08:51:15
【问题描述】:
现在我正在使用 PHP 和 HTML 进行编码
我需要从复选框组中进行选择
它是这样的:
-
下拉菜单中的值是从存储在数据库中的表subject 中的值中检索的。因此,复选框选项将显示为(例如)数学、代数、微积分、英语、语言学等。--显示这个没有问题。
表格主题
subject_id subject_name
========== ============
1 Mathematics
2 Algebra
3 Calculus
4 English
5 Linguistic
1234563有学生选择了)
示例:
表 student_subject
student_id subject_id
========== ===========
1 1
1 2
1 3
2 1
2 3
- 现在,学生又来为他的个人资料添加另一个主题。与前面 (1) 中提到的一样,将显示相同的复选框选项,但我希望禁用/删除/不显示已选择的选项,使其无法再次选择以避免冗余。
我真的不知道如何创建这个函数。我知道这里有很多经验丰富的程序员和开发人员,所以我希望你能告诉我正确的方法。非常感谢您的指导。
【问题讨论】:
标签:
javascript
php
mysql
checkbox
【解决方案1】:
您不应删除/禁用/不显示现有主题。
首先,您应该检查student_subject 表的现有行并将其呈现在选中的HTML 复选框中。
其次,当学生在编辑模式下对学科选择进行更改时,请在循环中检查具有学生和学科 ID 的数据库行。
如果数据库中没有学生提交的科目 ID,则将该值插入表中。
如果学生提交的科目 ID 在数据库中可用,则不执行任何操作。
用数据库检查从提交值中删除的主题,并从数据库中删除。
如果您想禁用现有科目,如果科目已分配给学生,请在复选框中使用readonly。
【解决方案2】:
这只是一个想法:
在您的 #2 表将存储 student_id 和 subject_id 上,我认为最好是每当您将值存储到 subject_id 时,您只需通过将其存储在 php 数组中来序列化该值,这样您就可以迭代整个数组,如果该字段是否已检查。
Json_encode 也很好,因为它是一个字符串,和序列化一样
例子:
Student_id Subject_ID
999-0518 a:{this is the serialize value };
然后当你查询结果时,它会被序列化,然后使用 unserialize 函数并做一个循环来迭代结果,当你 json_encode 时也是如此;只需执行 json_decode() 函数并执行循环。
【解决方案3】:
您可以使用只选择 ID 不在 student_subject 中的主题的查询。
它看起来像:
SELECT * FROM `subject`
WHERE `subject_id` NOT IN (
SELECT `subject_id` FROM `student_subject` WHERE `student_id` = '1'
)
(如果您不希望这是特定于用户的,可以省略内部的 where 子句)
然后根据从它返回的数组构建<select> 元素。