0

我在删除 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”一无所知

4

2 回答 2

1

首先,关于数据库设计的一个常见评论。通常在数据库中使用整数值。在定义此类列时使用IDENTITY或单词。通常AUTO_INCREMENT使用整数列。PRIMARY KEY一个额外的添加UNIQUE CONSTRAINT到不能包含重复的列上。UNIQUE CONSTRAINT在列上添加索引,以便按列搜索将很快。我认为我在生产数据库中使用的数据库中的所有表都遵循规则。

您无法更改服务器端的任何内容,然后您可以执行以下操作。您不能将key:true更多中的属性用作 的一列colModel。您不能在一列中使用它,例如user_email如果您可以将更多作为同一数据的一行。例如,您可以做的是:使用id由 from user_emailmodule_accessvalue 和一些分隔符组成的组合值。例如,如果是"test@mydomain.com"and,"module1"您可以将test@mydomain.com@module1其用作 id。第二个@不能在电子邮件中,您可以将其用作分隔符。编码的另一种变体将是Base64编码(或仅 HEX 编码)值user_email,字符_和 Base64 编码(或 HEX 编码)值module_access. jqGrid 将在删除操作期间向您发送 rowid,您将能够将 rowid 解码为user_emailmodule_access

您还有一个选择是使用任何rowid,但同时发送'user_email''module_access'与 rowid 一起发送。您可以使用serializeDelDataonclickSubmit回调(请参阅文档)或您delData来扩展数据。回调将 rowid 作为输入。您可以使用getCellorgetRowData重试'user_email''module_access'扩展将发送到服务器的数据。对于编辑操作,答案显示相同。回调的简单重命名将向您显示 . 您将在答案此中找到另一个示例。

于 2013-07-04T15:01:31.657 回答
0

您的服务器能否提供包含 email+id 的附加数据属性?然后,您可以将其声明为 jqgrid 中的 id 列(隐藏),并在您将其发回时让服务器取消标记它?

于 2013-07-04T11:09:11.163 回答