几天来,我一直在用头撞桌子……是时候寻求帮助了。
我正在尝试更新 Kendo UI 网格中的值。网格正确显示,弹出编辑器也是如此。美好的时光就这样结束了。情况如下:
- 单击“编辑”>弹出窗口打开>单击“更新”(未进行更改)>弹出窗口关闭。结果 = 正如预期的那样。
- 单击“编辑”>弹出窗口打开>单击“取消”>弹出窗口关闭。结果 = 正如预期的那样。
- 单击“编辑”>弹出窗口打开>更新“客户端名称”字段>单击“更新”。结果 = 行中的值更改(在后台),弹出窗口保持打开状态,并显示一条警告,说明“未定义”。如果我然后关闭弹出窗口,则更改将丢失。作为此过程的一部分,还会生成 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