【问题标题】:Save the order of a sortable list with php and MySql使用 php 和 MySql 保存可排序列表的顺序
【发布时间】:2014-07-18 13:56:59
【问题描述】:

我有一个可以用 jQuery ui 排序的列表。我能够保护用户所做的更改并将其存储在 var $order 中。我的问题是我不知道如何将其保存在 MySql 数据库中。如何保护 MySql 表中的订单? (请从最基础的解释,我只是学php)

HTML。 index.html:

<ul id="sortable">
    <li id="1">item1</li>
    <li id="2">item2</li>
    <li id="3">item3</li>
</ul>

查询。 index.html:

$('#sortable').sortable({ 
    update: function(event, ui) { 
        var newOrder = $(this).sortable('toArray').toString(); 
        $.get('6.php', {order:newOrder};
        }); 
    }
});

PHP:6.php:

$order = $_GET['order'];
// echo $order; // this gives something like 2,3,1

如何使用 php 和 Mysql 保护下表中的 $order?
我应该更改 id 以提供新订单吗?将订单存储在新列中更好吗?如何按顺序选择每个元素并放在表格的正确位置?

类似:

mysqli_query($con,"UPDATE MyTable 
                   SET ...
                   WHERE ... ");

MYSQL 表我的表:

id    concept    order
-----------------------
1     item1
2     item2
3     item3

【问题讨论】:

    标签: php mysql jquery-ui


    【解决方案1】:

    使用每个项目的正确顺序更新您的数据库:

    $order = $_GET['order'];
        // echo $order; // this gives something like 2,3,1
    
    
    $itemIds = explode(',', $_GET['order']);
    
    foreach($itemIds as $priority => $itemId) {
        // Here you have to update your table, something like UPDATE items SET priority = $priority WHERE id = $itemId
    }
    

    然后查询以正确的顺序获取所有项目:

    SELECT * FROM items ORDER BY priority 
    

    ('order' 是 SQL 中的保留关键字,因此您不应将字段称为 'order',这里我选择了 'priority'。)

    【讨论】:

    • 感谢您提供详细信息(如最后一个查询),解释每个步骤并使其简单。据我所知,这真的很有帮助。
    【解决方案2】:
    $order=explode(',',$_GET['order']);
    foreach($order as $num=>$id){
        if((int)$id!=0){
            mysqli_query("UPDATE `MyTable` SET `order`='".$num."' WHERE `id`='".(int)($id)."'");
        }
    }
    

    0) $order=explode(',',$_GET['order']); - 在此之后 $order=array(2,3,1);

    1) 在sql查询中可以使用order字段。需要带入“`”。

    2) 特别用于停止 sql 注入 - 更好(更快)的方法 - 将传入的变量转换为整数格式(有关详细信息,请参阅我在 cmets 中的答案)。

    3) 在 foreach 中写入 $num - 变量 - 数组元素的序号。 0, 1, 2, - 可用于数据库记录顺序。

    【讨论】:

    • 描述你做了什么,不要不解释就贴代码。
    • 我不明白。什么是 (int)$id 你能解释一下吗?
    • 黑客可以发送不是“1,2,3”,可能是:“1'; DELETE TABLE MyTable;,3”,并且你的数据表被删除。 (int)$variable - 将变量转换为整数格式。如果发送字符串 - 在 $variable=(int)$variable 之后; $variable 自动转换为 0
    【解决方案3】:

    如果订单只有字符串,您可以分解订单。当您插入它时,您可以将数组键用作排序号。

    $order = $_GET['order'];
    $items = explode(',', $order);
    
    foreach($items as $key => $item) {
    // Do insert where order = $key
    }
    

    希望对你有帮助:)

    【讨论】:

    • 欢迎来到 SO。您提供的答案已被标记为待审核,因为它基本上只是代码。您能否详细说明您的答案,稍微解释一下,并提及它如何以及为什么解决了 OP 的问题?谢谢。
    猜你喜欢
    • 2011-01-31
    • 2012-11-30
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2010-10-24
    • 2016-06-17
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多