1

数日間、机に頭をぶつけてきました…助けを求めたとき。

剣道UIのグリッド内の値を更新しようとしています。ポップアップエディタと同様に、グリッドは正しく表示されます。それが良い時代の終わりです。状況は次のとおりです。

  1. [編集]>[ポップアップを開く]>[更新](変更なし)をクリック>[ポップアップを閉じる]をクリックします。結果=期待どおり。
  2. [編集]>[ポップアップを開く]>[キャンセル]をクリック>[ポップアップを閉じる]をクリックします。結果=期待どおり。
  3. [編集]>[ポップアップを開く]>[clientName]フィールドを更新>[更新]をクリックします。結果=行の値が(バックグラウンドで)変更され、ポップアップは開いたままになり、「未定義」を示すアラートが表示されます。その後、ポップアップを閉じると、変更が失われます。このプロセスの一部として、500の内部サーバーエラーも生成されます。

これが私の剣道コードです:

$(document).ready(function () {
                    var crudServiceBaseUrl = "assets/data/",
                        dataSource = new kendo.data.DataSource({
                            transport: {
                                read:  {
                                    url: crudServiceBaseUrl + "data.clients.php",
                                },
                                update: {
                                    url: crudServiceBaseUrl + "data.clients.update.php",
                                },
                                create: {
                                    url: crudServiceBaseUrl + "data.clients.create.php",
                                },

                                parameterMap: function(options, operation) {
                                    if (operation !== "read" && options.models) {
                                        return {models: kendo.stringify(options.models)};
                                    }
                                }
                            },
                            batch: true,
                            pageSize: 10,
                            error: function(e) {
                                alert(e.responseText);
                            },
                            schema: {
                                data: function(result) {     
                                  return result.data || result;
                                },
                                total: function(result) {
                                    var data = this.data(result);
                                    return data ? data.length : 0;
                                },
                                model: {
                                    id: "clientID",
                                    fields: {
                                        clientID: { editable: false, nullable: true },
                                        clientName: { validation: { required: true } },
                                    }
                                }
                            }
                        });

                    $("#grid").kendoGrid({
                        dataSource: dataSource,
                        pageable: true,
                        toolbar: ["create"],
                        columns: [
                            { field: "clientID", title: "Client ID" },
                            { field: "clientName", title: "Client Name"},
                            { command: "edit", title: " ", width: 110 }],
                        editable: "popup"
                    });
                });

これが私のPHPです:

include '../includes/connect.php';

    $clientName = mysql_real_escape_string($_POST["clientName"]);
    $clientID = mysql_real_escape_string($_POST["clientID"]);

    $rs = mysql_query("UPDATE cms_clients SET clientName = '" .$clientName ."' WHERE clientID = " .$clientID);

    if ($rs) {
        echo json_encode($rs);
    }
    else {
        header("HTTP/1.1 500 Internal Server Error");
        echo "Update failed for EmployeeID: " .$clientID;
    }

ああ、そして私はこのコードが潜在的な注入に問題があることを知っています。それがステップ2です。

どんな助けでもいただければ幸いです。

ありがとう、@ rrfive

4

0 に答える 0