在JqGrid中删除行的两个参数

时间:2013-07-04 08:44:03

标签: php jquery mysql json jqgrid

我在删除jqGrid中的行时遇到了一些问题。

我的行包含两个主键,即email和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

我已成功收到来自身份证的电子邮件,但对如何获取'另一个变种'没有任何想法

2 个答案:

答案 0 :(得分:1)

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

您无法在服务器端更改任何内容,然后您可以执行以下操作。您不能将该属性key:true更多地用作colModel的一列。您不能在user_email之类的列中使用它,如果您可以将更多行作为相同数据的行。您可以做的是例如:使用由iduser_email值和一些分隔符组成的组合module_access值。例如,如果是"test@mydomain.com""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回调(请参阅the documentation)或delData来扩展数据。回调将rowid作为输入。您可以使用getCellgetRowData重试'user_email''module_access',只需扩展将发送到服务器的数据。 The answer显示编辑操作的相同内容。简单重命名回调将显示。您可以在the answerthis one中找到另一个示例。

答案 1 :(得分:0)

您的服务器是否可以提供包含电子邮件+ ID的其他数据属性?然后,您可以将它声明为jqgrid中的id列(隐藏),并让服务器在发送回来时将其取消标记?