【问题标题】:Determine if there is a change in checkbox判断checkbox是否有变化
【发布时间】:2014-01-15 20:22:33
【问题描述】:

所以我有一个执行查询的表单,并以文件路径、上次更新时间等形式使用该查询的结果填充表单。它还为每个条目显示 5 个不同的受众复选框已填充,如果这些复选框在数据库中有值,则检查这些复选框(有 5 个可能的受众值 - 因此有 5 个复选框 - 一个条目可以有多个受众值,因此可以在一个条目中选中多个复选框)。到目前为止,我已经完成了所有这些工作,该页面显示了我的 mysql 数据库中的所有正确条目及其受众复选框。现在我需要做的是找到一种方法来检测这些复选框是否与最初从数据库中检索到的内容相比发生了变化,如果有变化,则将值插入到数据库中。我该怎么做呢? Javascript?比较PHP中的数组? 这是我的 while 循环的一部分,它用复选框填充表单:

printf("\t<tr class='recordrow'>
        \n\t\t<td><a class='page_modal' href='#mWindow%s' target='_blank'>%s</a></td>
        \n\t\t<td class='ppath'>%s</a></td>
        \n\t\t<td>%s</td>
        \n\t\t<td><input type='checkbox' name='audience[]' $currentcheckbox/><div class='page_dialog' id='mWindow%s'><img src='exit.png' class='close' alt='close'/><img src='newwin.jpg' alt='new window'/><div id='content_section'>%s</div></div> </td>
        \n\t\t<td><input type='checkbox' name='audience[]' $prospectivecheckbox/></td>
        \n\t\t<td><input type='checkbox' name='audience[]' $facultycheckbox/></td>
        \n\t\t<td><input type='checkbox' name='audience[]' $staffcheckbox/></td>
        \n\t\t<td><input type='checkbox' name='audience[]' $externalcheckbox/></td>
        \t</tr>",$folder_content["cms_id"],$folder_content["display_name"],$page_path,$update,$folder_content["cms_id"],$folder_content["path"],$folder_content["cms_id"],$folder_content["content"]);

【问题讨论】:

    标签: javascript php html mysql checkbox


    【解决方案1】:

    这取决于您何时想要检测是否有更改:提交表单时,或实时单击复选框时。如果是后者,只需对 javascript 事件执行 ajax 请求:

    jQuery checkbox change and click event

    http://html.net/tutorials/javascript/lesson21.php

    如果是前者,我不会检查复选框是否已更改。只需使用表单中提交的任何内容覆盖数据库中的值。在大多数情况下,我发现,在更新记录之前尝试检测更改会更令人困惑并且更容易出错,而且我没有看到任何性能优势。

    如果您只需要在发生更改时执行更新,请获取一个包含原始复选框值的数组,并使用 array_diff 将它们与新值进行比较。

    $values = get_current_values_somehow();
    $remove = array_diff($values, $_GET['audience']); // Array of entries to remove
    $add = array_diff($_GET['audience'], $values); // Array of entries to add
    
    if (count($remove) > 0) {
        // Remove from database
    }
    
    if (count($add) > 0) {
        // Add to database
    }
    

    【讨论】:

    • 我应该提到我想在提交表单时检测是否有更改...不幸的是,除非表单发生更改,否则我不能只覆盖数据库中的值因为我们需要时间戳
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多