JqGrid中删除行的两个参数


Two Parameter for Deleting A Row in JqGrid

我在删除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 CONSTRAINTUNIQUE CONSTRAINT在列上添加了索引,因此按列搜索会很快。我认为我在生产数据库中使用的数据库中的所有表都遵循规则。

如果你不能在服务器端更改任何内容,那么你可以执行以下操作。不能将属性key:true用作colModel的一列。如果可以将多个具有相同数据的行作为一行,则不能像user_email那样在一列中使用它。您可以做的是例如:使用由IDENTITY0、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_emailAUTO_INCREMENT0。

还有一个选项是使用任何rowid,但将'user_email''module_access'与rowid一起发送。您可以使用serializeDelDataonclickSubmit回调(请参阅文档)或delData来扩展数据。回调获取rowid作为输入。您可以使用getCellgetRowData重试'user_email''module_access',只需扩展将发送到服务器的数据。"编辑"操作的答案相同。回调的简单重命名将显示。你会在答案或本篇文章中找到另一个例子。

您的服务器能否提供一个由电子邮件+id组成的附加数据属性?然后,您可以将其声明为jqgrid中的id列(隐藏),并在发送回时让服务器取消对其的访问权限?