我已经想到了解决问题的两个方案,如果您认为可能会有更好的解决方案,我想知道所有可行的解决方案。
我的MySQL数据库中有一个列表,它与我的html表单中的复选框相关联。我想用表单添加或删除列表项,然后在我的数据库中执行相同的操作。我有一个列表的自动增量ID列。问题是,在执行添加和删除操作时如何更新表。该列表必须按时间顺序排序,这通常由数据库在我们向表中添加新项目时自动完成。
解决方案1: 复选框将具有名称属性' items []'所以,当我可以作为$ _POST数组读取它们并删除我的数据库中的匹配列表项。这当然要求我的ID列始终从头到尾连续排序,即。 1,2,3 ......每次删除项目时,我都必须更新ID列。这里建议使用解决方案:Reorder / reset auto increment primary key
解决方案2: 我为新项目提供了一个等于最大ID + 1的复选框值,这样每次输入一个项目时,ID都是不同的。这样我就不必更新ID列了。我只需要在表格中找到最大的ID,并为我的复选框值添加1。
总而言之,每次删除项目时,第一种方式都会更新列表ID,这似乎是一个更大的麻烦。第二种方法只是提供一个新的不同ID值,我只是在数据库中查询当时最大的ID,这似乎更有效。
我对其他建议开放:)非常有责任
答案 0 :(得分:1)
这是一个快速回复,可能无法按照您的需要做任何事情,但希望您可以使用一些想法。
这是在一个表格中使用一个字段的解决方案。
想象一个名为" scratchpad"的表,其中一个字段名为" cb_list"。
将cb_list
字段中的复选框/ ID存储为JSON字符串:
{"cb1":1,"cb2":0,"cb3":0,"cb4":1}
创建页面时,PHP命令会读取字段并转换为数组:
$cb_json = mysql_result(mysql_query("SELECT `cb_list` FROM `scratchpad`"), 0);
$cb_arr = json_decode($cb_json);
现在,遍历该数组并为复选框创建HTML:
$out = '<div id="chkboxDIV">';
foreach( $cb_arr AS $key =>$val ){
$chkd = ($val==1) ? 'checked="checked"' : '';
$out .= $key. " <input type='checkbox' id='" .$key. "' " .$chkd. " />";
}
$out .= "</div>";
echo $out;
要添加新复选框,您可以使用jQuery(或js)代码向DIV添加新复选框:
var lbl = prompt('Label?');
$('#chkbox').append(lbl+ ': <input id="' +lbl+ '" type="checkbox" /> ');
当复选框准备好再次存储时,使用此javascript循环选中复选框并保存其ID和值:
var arrCB = {};
$("#chkbox>input[type='checkbox']").each(function(){
var el = $(this);
var id = el.attr('id');
arrCB[id] = (this.checked ? 1 : 0)
});
var json_cb = JSON.stringify(arrCB);
现在,您可以使用AJAX发送字符串 - 类似于您在开始时从数据库中获得的字符串 - 返回PHP进行存储:
$.ajax({
type: 'POST',
url: 'your_php_file.php',
data: the_json=json_cb
});
在PHP方面,您的AJAX处理器文件(在此示例中称为your_php_file.php
)将如下所示:
<?php
$j = $_POST['the_json'];
$result = mysql_query("UPDATE `scratchpad` SET `cb_list` = '$j' ");
Here is a jsFiddle以及javascript / jQuery的示例。
资源:
您可能会发现这有用:$.ajax - dataType