PHP:如果已经选择了值并将其存储在数据库中,如何从复选框组中删除/禁用选择

时间:2017-07-04 03:25:28

标签: javascript php mysql checkbox

现在我在PHP&编码HTML

我需要从复选框组中进行选择 它是这样的:

  1. 下拉菜单中的值是从表subject中数据库中存储的值中检索的。所以复选框选项将显示为(例如)数学,代数,微积分,英语,语言等。 - 我显示这个没有问题。

    表主题

    subject_id       subject_name
    ==========       ============
         1            Mathematics
         2            Algebra
         3            Calculus
         4            English
         5            Linguistic
    
  2. 之后,学生可以选择他们的subject,并将其存储在另一个名为student_subject的表中,其中存储了student_idsubject_id存储学生选择的科目) 例如:

  3. 表student_subject

        student_id       subject_id
        ==========       ===========
            1                 1
            1                 2                                           
            1                 3
            2                 1  
            2                 3   
    
    1. 现在,学生再次来到他的个人资料中添加另一个主题。将显示相同的复选框选项,如前面(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>元素。