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

Javascript PHP:如果值以前已经被选中并存储在数据库中,如何从复选框组中删除/禁用选择,javascript,php,mysql,checkbox,Javascript,Php,Mysql,Checkbox,现在我正在用PHP和HTML编写代码 我需要从复选框组中进行选择 事情是这样的: 下拉菜单中的值是从数据库中存储在表subject中的值中检索的。因此,复选框选项将显示为(例如)数学、代数、微积分、英语、语言学等——我对显示此选项没有问题 表格主题 subject_id subject_name ========== ============ 1 Mathematics 2 Algebra 3

现在我正在用PHP和HTML编写代码


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

  • 下拉菜单中的值是从数据库中存储在表
    subject
    中的值中检索的。因此,复选框选项将显示为(例如)数学、代数、微积分、英语、语言学等——我对显示此选项没有问题

    表格主题

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

  • 表格学生主题

    subject_id       subject_name
    ==========       ============
         1            Mathematics
         2            Algebra
         3            Calculus
         4            English
         5            Linguistic
    
        student_id       subject_id
        ==========       ===========
            1                 1
            1                 2                                           
            1                 3
            2                 1  
            2                 3   
    
  • 现在,学生再次来到他的个人资料中添加另一个主题。相同的复选框选项将显示,如前面(1)所述,但我希望禁用/删除/不显示已选择的选项,以避免重复

  • 我真的不知道如何创建这个函数。我知道这里有很多经验丰富的程序员和开发人员,所以我希望你能告诉我正确的方法。非常感谢您的指导

    不应删除/禁用/不显示现有主题

    首先,您应该检查
    student\u subject
    表的现有行,并将其显示在选中的HTML复选框中

    其次,当student在编辑模式下更改主题选择时,在循环中使用student和subject ID检查数据库行

    如果提交的学生科目id在数据库中不可用,请将该值插入表中

    如果数据库中有该学生提交的科目id,请不要对其进行任何处理

    使用数据库检查已提交值中删除的主题,然后从数据库中删除

    如果要禁用现有科目,如果科目已分配给学生,请在复选框中使用
    readonly

    这只是一个想法:

    在您的#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_编码时也是如此;只需执行json_decode()函数并执行循环

    您可以使用一个查询,该查询只选择ID不在
    学生科目中的科目

    它看起来像:

    SELECT * FROM `subject` 
    WHERE `subject_id` NOT IN (
        SELECT `subject_id` FROM `student_subject` WHERE `student_id` = '1'
    )
    
    (如果不希望这是特定于用户的,则可以使用内部
    where
    子句)

    然后基于从中返回的数组构建
    元素