php - 发送多个AJAX数据到PHP并更新Mysql数据库

标签 php jquery mysql ajax

我正在构建一个应用程序,用户可以在其中重新订购商品(并将订单保存到数据库)。用户重新排序的项目是导航链接,它们是从 php 循环在页面上动态生成的:

$nav_links.='<li class="collection-item ui-state-default item" data-ord="'.$navorder.'" data-url="'.$pageurlname.'"><a>' .$pagename. '</a></li>';}

$navorder 是导航中页面的顺序 $pageurlname 是用于动态调用页面的字符串(index.php?page=$pageurlname),是表中的唯一键。

我正在使用 jqueryUi 可排序功能来进行流程拖放,它工作正常,每次我对链接重新排序时,新顺序都会更新为“data-ord”..脚本:

    $('#sortable').sortable({
    stop: function(event, ui){
        $(".sortable li").each(function(i, el){
               $(el).attr('data-ord',$(el).index()+1);
        });
    }
});

现在问题来了,这是我的ajax脚本:

$(document).on('click','.saveorder',function(){
    var neworder = $('.collection-item').attr('data-ord');
    var pgurl = $('.collection-item').attr('data-url');
    $.ajax({
        type:'POST',
        dataType:'text',
        url:'/rs/pages/nav_order.php',
        data: { neworder:neworder, pgurl:pgurl },
        success: function(data) {console.log(data); $('#response').html(data);}, 
        error: function(data) {console.log('Error!', data); } 
          });

    });

我是 ajax 新手,所以它主要是基于我在其他问题中找到的脚本构建的。 (我能够成功地将脚本链接到我的其他功能)但是在这种情况下它不起作用。问题似乎是我正在尝试发布多行的多个数据(此时我有 4 个链接,我正在尝试重新排序,但链接计数可能或多或少)。当我尝试获取变量“neworder”和“pgurl”的值(使用警报)时,它始终仅显示第一项的值。

我已经尝试了在类似问题中找到的很多解决方案,但没有一个起作用,仅仅是因为用户发布表单数据然后将其序列化,这不是我的情况,因为我没有从表单发送数据。

最后是 nav_order.php (我猜这里也是错误的,可能需要添加 foreach 但首先我需要让 ajax 正常工作):

<?php

include "/rs/include/db.php";

$neworder = $_POST['neworder'];
$pgurl = $_POST['pgurl'];

$query = mysqli_query($Connection, "UPDATE horus_pages SET nav_order='$neworder' WHERE url_name='$pgurl'") or die (mysqli_error($Connection));
echo 'Reordered';

?>

此外,当我检查控制台时,没有数据。

那么请您告诉我如何更正ajax脚本以发送每个对象的数据,然后在php脚本中正确处理它?希望我清楚地描述了我的问题。感谢您的任何帮助。

最佳答案

  1. 将 data-id="your_database_id"放入链接 html 中。如果有多个记录具有相同的 href,则使用 href 在数据库中选择它们会很慢并且会出现错误。

  2. 您有保存按钮,可以发送它找到的第一个链接的顺序和 href 吗?当多个项目更改顺序时会发生什么?如果你有很多链接,你会为每次保存抛出数百个 mysql 更新?

  3. 您最好将 json 发送到您的 php.ini。类似这样的事情:

    [{id:123,订单:332},{id:124,订单:334},...]

    dataType:'text' 变为 dataType:'json'

如果您不关心可扩展性,那么这将在后端工作。

$data = file_get_contents("php://input");
$links = json_decode($data, true);
foreach($links as $link) {
   $order = intval($link['order']);
   $id = intval($link['id'])
   // UPDATE table SET `order` = '$order' WHERE id = '$id'
}

顺便说一句。您的 php 代码允许 SQL 注入(inject)。那就不好了

  • 也许您可以使订单“ float ”并制定一个算法来查找空位。这将使您能够将这 100 个 SQL 请求减少到 1 个。
  • 关于php - 发送多个AJAX数据到PHP并更新Mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46179246/

    相关文章:

    javascript - Analytics.js 是否可以在 ga ('set' ('send' ) 之后使用 ga ,'pageview' )?

    mysql - 理解全文 bool 模式结果

    mysql - 使用 md5 哈希作为音频链接/src

    php - 使用 array_diff_assoc 比较两个数组

    php - 使用变量作为列名创建表

    javascript - 平滑滚动至姓名和 ID

    mysql - 在 MySQL 中保存数据和进行备份的最便捷方法

    javascript - 由于 div 显示/隐藏而获取错误的 POST 值

    php - 在 Laravel 6.16 中调用未定义函数 App\Http\Controllers\Auth\array_get()

    jquery - 克隆表格 不带克隆输入值