所以我有一个执行查询的表单,并以文件路径的形式填充表单,当它最后一次更新等时....它还为每个条目显示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"]);
答案 0 :(得分:0)
这取决于您何时想要检测是否有更改:提交表单时,或实时单击复选框。如果是后者,只需对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
}