数日間、机に頭をぶつけてきました…助けを求めたとき。
剣道UIのグリッド内の値を更新しようとしています。ポップアップエディタと同様に、グリッドは正しく表示されます。それが良い時代の終わりです。状況は次のとおりです。
- [編集]>[ポップアップを開く]>[更新](変更なし)をクリック>[ポップアップを閉じる]をクリックします。結果=期待どおり。
- [編集]>[ポップアップを開く]>[キャンセル]をクリック>[ポップアップを閉じる]をクリックします。結果=期待どおり。
- [編集]>[ポップアップを開く]>[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