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

时间:2017-09-12 14:36:14

标签: 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可排序函数来使进程拖拽和放大drop,它工作正常,每次我重新排序链接,新订单更新为&#34; data-ord&#34; .. sript:

    $('#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的新手,因此它主要基于我在其他静止版中找到的脚本。 (我能够成功地将cript链接到我的其他功能)但是在这种情况下它不起作用。问题似乎是我试图为多行发布多个数据(此时我有4个链接,我试图重新排序,但链接数可以或多或少)。当我试图获得变量值时,&#34; neworder&#34;和&#34; pgurl&#34; (使用警报),它始终只显示第一个项目的值。

我尝试了很多类似静止的解决方案,但没有一个能够工作,只是因为用户发布表单数据然后序列化,这不是我的情况,因为我不是从表单发送数据。

最后这里是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 个答案:

答案 0 :(得分:0)

  1. 把data-id =&#34; your_database_id&#34;在你的链接HTML。如果有多个具有相同href的记录,那么使用href在数据库中选择它们会很慢并且会出错。

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

  3. 你最好把json发送到你的php。这样的事情:

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

    数据类型:&#39;文本&#39;变成dataType:&#39; json&#39;

  4. 如果您不关心可扩展性,那么这将适用于后端。

    $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注入。那太糟糕了

    1. 也许你可以订购&#39;漂浮&#39;并制作一个找到空点的算法。这将允许您将这100个SQL请求减少到1。