jquery可排序保存到数据库不能正常工作

我正在尝试将jquery可排序function合并到我的网站中并保存数据库中的位置给我带来各种令人头疼的问题……我现在已经打了3天了,我似乎无法正常工作。

就目前而言,它是保存数据库的位置,而不是您期望的顺序或位置。 这意味着,如果我将位置0中的项目移动到位置1,它会在数据库中以不同的顺序保存位置。 在这里查看实时版本。

这是我的代码……

index.php文件:

num_rows > 0) { while($items = $result->fetch_assoc()) { ?> <div id='sort_' class='items'>

js.js文件:

 $("#container").sortable({ opacity: 0.325, tolerance: 'pointer', cursor: 'move', update: function(event, ui) { var itId = 3; var post = $(this).sortable('serialize'); $.ajax({ type: 'POST', url: 'save.php', data: {positions: post, id: itId }, dataType: 'json', cache: false, success: function(output) { // console.log('success -> ' + output); }, error: function(output) { // console.log('fail -> ' + output); } }); } }); $("#container").disableSelection(); 

save.php文件:

 require_once('conn.php'); $itId = $_POST['id']; $orderArr = $_POST['positions']; $arr = array(); $orderArr = parse_str($orderArr, $arr); $combine = implode(', ', $arr['sort']); $getIds = "SELECT id FROM items WHERE groupId = '$itId' "; $result = mysqli_query($db, $getIds); foreach($arr['sort'] as $a) { $row = $result->fetch_assoc(); $sql = " UPDATE items SET position = '$a' WHERE id = '{$row['id']}' "; mysqli_query($db, $sql); } echo json_encode( ($arr['sort']) ); 

任何人都可以指出我在哪里出错了吗?

先感谢您。

哔叽

像这样更改你的JS代码:

 {...} tolerance: 'pointer', cursor: 'move', // new LINE items: '.items', // <---- this is the new line update: function(event, ui) { var itId = 3; var post = $(this).sortable('serialize'); // it could be removed // new LINES start var post={},count=0; $(this).children('.items').each(function(){ post[++count]=$(this).attr('id'); }); // new LINES end $.ajax({ {...} 

使用这个$.each循环,您可以覆盖var post -> serialize并定义自己的排序顺序。 现在用PHP print_r($_POST["positions"]);查看你的$ _POST [“position”] print_r($_POST["positions"]); 并且您按自己的顺序拥有自己的职位。

万一有人降落在这里,这就是我的情况……

注意:我没有在index.php选择函数中创建预准备语句。 但你可能应该这样做。

index.php文件:

 
num_rows > 0) { while( $items = $result->fetch_assoc() ){ ?>
' class='items'>

jquery可排序文件:

 var ul_sortable = $('#container'); ul_sortable.sortable({ opacity: 0.325, tolerance: 'pointer', cursor: 'move', update: function(event, ui) { var post = ul_sortable.sortable('serialize'); $.ajax({ type: 'POST', url: 'save.php', data: post, dataType: 'json', cache: false, success: function(output) { console.log('success -> ' + output); }, error: function(output) { console.log('fail -> ' + output); } }); } }); ul_sortable.disableSelection(); 

更新php文件:

 $isNum = false; foreach( $_POST['sort'] as $key => $value ) { if ( ctype_digit($value) ) { $isNum = true; } else { $isNum = false; } } if( isset($_POST) && $isNum == true ){ require_once('conn.php'); $orderArr = $_POST['sort']; $order = 0; if ($stmt = $db->prepare(" UPDATE items SET position = ? WHERE id=? ")) { foreach ( $orderArr as $item) { $stmt->bind_param("ii", $order, $item); $stmt->execute(); $order++; } $stmt->close(); } echo json_encode( $orderArr ); $db->close(); }