我在删除jqGrid中的一行时遇到了一些问题。
我的行由两个主键组成,它们是电子邮件和idms_module。删除行需要这两个键,因为一封电子邮件可以有两个或多个idms_module。
语法如下:
jQuery("#grid-uac").jqGrid({
mtype:'GET',
url:'functions/get_useraccess.php',
editurl:'functions/edit_useraccess.php',
datatype: "JSON",
colNames:['User Email','Module Access','Level Access'],
colModel:[
{name:'user_email', width:300, editable:true, key:true},
{name:'module_access', width:550,editable:true, key:true,edittype:'select',editoptions:{dataUrl:'functions/get_modusracc.php'}},
{name:'level_access',width:100,editable:true,edittype:'select',editoptions:{value:"0:read only;1:read write"}}
],
loadComplete: function () {
alert("OK");
},
loadError: function (jqXHR, textStatus, errorThrown) {
alert('HTTP status code: ' + jqXHR.status + ''n' +
'textStatus: ' + textStatus + ''n' +
'errorThrown: ' + errorThrown);
alert('HTTP message body (jqXHR.responseText): ' + ''n' + jqXHR.responseText);
},
rowNum:10,
rowList:[5,10,15],
pager: '#pager-uac',
sortname: 'user_email',
viewrecords: true,
jsonReader: **{id: "user_email", id2 or some var : "module_access"}**,
sortorder: "asc",
gridview: true,
autoencode:true,
caption:"Inventory User Access Role"
});
例如,我想删除一行,该行由电子邮件组成:admin@test.com和idms_module:6
php代码的一部分是:
$email = $_REQUEST['id'];
$modules= $_REQUEST['another var'];
$query = DELETE FROM table WHERE email= $email AND module = $modules
我已经成功地从id收到了电子邮件,但还没有任何关于如何获得"另一个var"的想法
首先是关于数据库设计的一个常见注释。通常在数据库中使用整数值。在定义这样的列时使用CCD_ 1或CCD_。通常使用整数列作为PRIMARY KEY
。一种是在不能包含重复的列上额外添加UNIQUE CONSTRAINT
。UNIQUE CONSTRAINT
在列上添加了索引,因此按列搜索会很快。我认为我在生产数据库中使用的数据库中的所有表都遵循规则。
如果你不能在服务器端更改任何内容,那么你可以执行以下操作。不能将属性key:true
用作colModel
的一列。如果可以将多个具有相同数据的行作为一行,则不能像user_email
那样在一列中使用它。您可以做的是例如:使用由IDENTITY
0、module_access
值和一些分隔符组成的组合id
值。例如,在"test@mydomain.com"
和"module1"
的情况下,您可以使用test@mydomain.com@module1
作为id。第二个@
不能在电子邮件中,您可以将其用作分隔符。编码的另一个变体将是user_email
的Base64编码(或仅HEX编码)值、字符_
和module_access
的Base64解码(或HEX编码的)值。jqGrid将在Delete操作期间向您发送rowid,您将能够将rowid解码为user_email
和AUTO_INCREMENT
0。
还有一个选项是使用任何rowid,但将'user_email'
和'module_access'
与rowid一起发送。您可以使用serializeDelData
或onclickSubmit
回调(请参阅文档)或delData
来扩展数据。回调获取rowid作为输入。您可以使用getCell
或getRowData
重试'user_email'
和'module_access'
,只需扩展将发送到服务器的数据。"编辑"操作的答案相同。回调的简单重命名将显示。你会在答案或本篇文章中找到另一个例子。
您的服务器能否提供一个由电子邮件+id组成的附加数据属性?然后,您可以将其声明为jqgrid中的id列(隐藏),并在发送回时让服务器取消对其的访问权限?