gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 18:26:09 24 4
gpt4 key购买 nike

我正在构建一个应用程序,用户可以在其中重新订购商品(并将订单保存到数据库)。用户重新排序的项目是导航链接,它们是从 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com