当前位置: 首页 > 知识库问答 >
问题:

使用ajax更新mysql中每个输入字段的数据

欧博简
2023-03-14

我有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和值。但它在控制台中显示错误:未捕获引用错误:未定义值

和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();

共有2个答案

严天逸
2023-03-14

您的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(){

                }
            });
        });
    });
});
虞正业
2023-03-14

第一个问题似乎是您的

不要设置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

通过在发布前聚合要发送的字段,减少发布请求的数量也可能是有益的。

例如。

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

注意:以上所有都是完全未经测试的,因为你的数据库等

更重要的是,此代码没有解决任何注入漏洞。在运行任何数据库操作之前,应该转义并验证输入数据

 类似资料:
  • 创建一个在PHP服务器端无法理解的小管理员行更新程序。我希望sql查询只更新页面上已更改的$u POST字段,这样它就不会循环所有100条左右的记录。 我的做法如下: 1) jQuery侦听已更改的输入字段,然后为已更新的用户字段分配名称属性 2) PHP检测已设置更新的用户字段。 3) 在提交重新加载时,PHP检测到该输入,并按行ID更新SQL。如何确保PHP知道哪个输入字段指向哪个行ID? j

  • 我不是新来的,但这是我第一次在这个网站上寻求帮助。 我有一个非常有趣的问题,我已经在下面的同时循环中呈现了许多动态输入字段 我的目标是使用name='adjust[]'动态输入字段更新mysql数据库中的多行。目前有200多个项目更新为表列项目库存。表已存在,列已设置为整数。 (表:项)--(列:item_inventory(接受整数)) 这是我得到的↓它目前更新循环中最后一个数组项的所有行。因为

  • 我正在尝试用Angular构建一个简单的计算器,如果我想的话,我可以覆盖总数。我有这部分的工作,但当我回去输入一个数字在一个或两个领域的总数没有在该领域的更新。 这是我的jsfiddlehttp://jsfiddle.net/YUza7/2/ 形式 javascript

  • 所以,我的程序中有公司和员工实体。雇员为公司工作,在雇员表中有company_id(外键),我跟踪某些雇员为哪个公司工作。现在,如果我想更新该字段,如何更改公司员工正在工作? 我想更新员工类中的company_id,使用字段int companyId来引用该列,但是它不起作用。在员工服务实施中。类如果我想更新该列(这意味着员工不是为公司工作,或员工更改了公司),我必须调用公司类,这不是我想在员工表

  • 我想使用Ajax更新数据,下面是示例代码。SweetAlert被移位,因为它已经更新了,但是它在数据库中没有生效,因此它给出了一个错误。 这是在单击submit按钮时提交表单的Ajax脚本。 这段代码用于php服务器端,用于将数据插入数据库。

  • 每次鼠标左键单击,递增,因此值始终在变化。我想要显示在条目字段,但我无法实现这一点。 如何使输入字段始终更新并在?