0

jqGrid で行を削除する際に問題があります。

私の行は、email と idms_module という 2 つの主キーで構成されています。1 つの電子メールに 2 つ以上の idms_module を含めることができるため、これら 2 つのキーは行を削除するために必要です。

構文は次のとおりです。

   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"
            });

たとえば、email: 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 からメールを正常に取得しましたが、「別の変数」を取得する方法についてのアイデアはありません

4

2 に答える 2

1

まず、データベースの設計に関する一般的な意見を 1 つ挙げます。通常、データベースでは整数値を使用します。IDENTITYそのような列の定義中にまたはAUTO_INCREMENT単語を使用します。PRIMARY KEY通常、整数列を使用します。UNIQUE CONSTRAINT重複を含むことができない列に追加します。UNIQUE CONSTRAINT列にインデックスを追加して、列による検索が迅速になるようにします。実稼働データベースで使用したデータベース内のすべてのテーブルは、ルールに従っていると思います。

サーバー側で何も変更できない場合は、次のことができます。key:trueプロパティを複数の の 1 つの列として使用することはできませんcolModeluser_email同じデータを1行として複数持つことができる場合のように、1列で使用することはできません。できることは、たとえば、 、値、およびセパレータidから構成される合成値の使用です。たとえば、 の場合、id として使用できます。2 番目は電子メールでは使用できません。セパレーターとして使用できます。エンコーディングのもう 1 つのバリアントは、Base64でエンコードされた (または単に HEX エンコードされた) 値、文字、および Base64 でエンコードされた (または HEX エンコードされた) 値です。user_emailmodule_access"test@mydomain.com""module1"test@mydomain.com@module1@user_email_module_access. jqGrid は削除操作中に行 ID を送信し、行 ID をuser_emailおよびにデコードできますmodule_access

あなたが持っているもう1つのオプションは、rowidを使用することですが'user_email' rowidと'module_access'一緒に両方を送信します。serializeDelDataまたはonclickSubmitコールバック (ドキュメントを参照) または youを使用delDataして、データを拡張できます。コールバックは、入力として行 ID を取得します。getCellまたはを使用しgetRowDataて再試行'user_email''module_access'、サーバーに送信されるデータを拡張することができます。答えは、編集操作についても同じです。コールバックの名前を変更するだけで、. answerまたはthis oneにある別の例。

于 2013-07-04T15:01:31.657 に答える