我有mysql数据库。在我的页面上,当我点击一个按钮时,我会从数据库中检索数据。所有数据都显示在页面上。我得到一行带有id,一行带有名称,一行带数字(在输入字段中)。所以我得到一个例子:
51
表
200
52
头
320
53
玻璃
456
因为所有值编号(第3行)都在输入字段中,所以可以更改它们。我创建了提交按钮,因此我可以提交更改的值。 这是我的js代码:
$(document).ready(function () {
$("#submit2").click(function () {
event.preventDefault();
$('form#list_prices_form input[type=number]').each(function () {
default = $("#default").val();
var value = $(this).val();
var id = $(this).attr("name");
console.log(id);
console.log(value);
});
$.ajax({
type: "POST",
url: "save.php",
data: {default: default, value: value, id: id},
success: function (response) {
default = $("#default").val();
$.ajax({
type: "POST",
url: "retrive.php",
data: {default: default},
success: function (response) {
$('#list').html(response);
}
});
}
});
return false;
});
});
所以在控制台中我得到了所有必要的字段。它们显示每个字段的正确ID和值。但它在控制台中显示错误:未捕获的ReferenceError:未定义值
和php代码:
$default = $_POST['default'];
$value = $_REQUEST['value'];
$id = $_REQUEST['id'];
$result = $conn->query("SELECT * FROM tbl_name WHERE default = '$default'";
$query = "UPDATE tbl_name SET (value_row) VALUES(?) WHERE id='$id'";
$statement = $conn->prepare($query);
$statement->bind_param('i', $value);
if ($statement->execute()) {
echo 'Changed';
//print 'Success! ID of last inserted record is : ' . $statement->insert_id . '<br />';
} else {
die('Error : (' . $conn->errno . ') ' . $conn->error);
}
$statement->close();
答案 0 :(得分:1)
第一个问题似乎是您的<input>
没有名字。因此,浏览器不会提交该元素。这是W3 spec for successful controls
。
而不是设置id
尝试设置name
属性。
例如
echo "$x: <input class='value' id='$id' name='$ID' value='$y' />";
请注意,通过POST而不是GET提交这些变量要好得多。这样做意味着URI中的数据不太可能被任何中间件记录。因此你的JQuery AJAX看起来像:
$.ajax(
type: 'post',
url: "update.php",
data: {id: id, value: value},
success: function(responseData) {
console.log("Result" + responseData);
}
});
现在,由于您发布的是JSON而不是表单编码数据,因此您需要从PHP脚本中读取JSON:
$json = file_get_contents('php://input');
$obj = json_decode($json);
var_dump($obj); // show what data is in there for your debugging.
看起来有点像:
$obj->id; // the id POST'ed
$obj->value; // the value POST'ed
通过聚合要在POST之前发送的字段来减少您正在进行的POST请求的数量也是有益的。
e.g。
var values = [];
$(".value").each(function () {
var getId = $('.value').prop('id');
var id = $(getId).val();
var getValue = $('.value').prop('value');
var value = $(getValue).val();
values.push({id: id, value: value});
});
$.ajax(
type: 'get',
url: "update.php",
data: values,
success: function(responseData) {
console.log("Result" + responseData);
}
});
如果你这样做,那么你的PHP代码将需要看起来像这样:
$postData = file_get_contents('php://input');
$postJson = json_decode($postData);
$results = [];
foreach($postJson as $row) {
// $row->id and $row->value
$sql = "UPDATE table SET y='{$row->value}' WHERE ID = '{$row->id}'";
if ($conn->query($sql) === TRUE){
$results[$row->id] = 'updated';
} else {
$results[$row->id] = 'error';
}
}
$conn->close();
echo json_encode($results); // Return a list of ID => success/error
注意:鉴于您的数据库等,上述所有内容都是未经测试的
更重要的是,此代码不解决任何注入漏洞。在运行任何数据库操作之前,您应该转义并验证输入数据
答案 1 :(得分:0)
你的jQuery应该是这样的:
$(document).ready(function(){
$('#submit').click(function(e) {
e.preventDefault();
$(".value").each(function(){
var id = $(this).attr('id');
var value = $(this).attr('value');
$.ajax({
type: 'get',
url: "update.php",
data: {id: id, value: value},
success: function(){
}
});
});
});
});