Jquery / AJAX排序函数不能在mysql中使用破折号存储数据


Jquery / AJAX sort function can not store data with dash in mysql

我有一个页面,其中列出了一组要按拖拽排序的产品;下降。这里一切正常。

我有一个AJAX post到一个即时排序PHP文件,该文件在排序顺序改变时将排序顺序保存在Mysql表中。

代码如下:

产品排序文件:

<script>
$(document).ready(function () {
    $('ul').sortable({
        scroll:true,
        helper: "clone",
        axis: 'y',
        stop: function (event, ui) {
            var data = $(this).sortable('serialize');
            $('#span').text(data);
            $.ajax({
            data: data,
            type: 'POST',
            url: '/admin/pages/sortonthefly.php'
        });
    }
    });
});
  </script>
<?
while($hent_produkter_over = mysql_fetch_array($hent_produkter)){
            $show = mysql_query("SELECT * FROM tblProdukt WHERE fldProduktNrID = 
            '$hent_produkter_over[prodref]' AND land = '$country' AND aktiv = 1");
            $hent_produkter_data = mysql_fetch_array($show);
            if($hent_produkter_data[fldID] != ""){  ?>
                <? $itemcontainer = $hent_produkter_data[fldProduktNrID]."mzm".$_GET[id]."mzm".$_GET[subid]."mzm".$_GET[country];?>             
                <li id="item-mzm<?=$itemcontainer?>" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/<?=$hent_produkter_data[fldProduktImg]?>" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                            <?=$hent_produkter_data[fldProduktNavn]?><br/>
                            Varenummer: <?=$hent_produkter_data[fldProduktNrID]?>
                        </div> 
                    </div>
                </li>
            <?
                                                }
}
?>

即时排序文件看起来像这样:

foreach ($_POST['item'] as $value) {
    $explode = explode("mzm", $value);
mysql_query("UPDATE b_kat_prod SET sortering = $i WHERE prodref = '$explode[1]' AND katref = '$explode[2]' AND country = '$explode[4]' ");
}

更新程序工作,但当$ explosion[1]包含破折号(-)时,更新程序失败。当$ explosion[1]中有一个-时,我似乎无法让它更新。

产品排序文件中解析的数据可能如下所示:

<li id="item-mzm6820mzm2mzmNaNmzmdk" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/6820.jpg" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                         Alu værksteds donkraft 2,5 T.<br/>
                            Varenummer: 6820                        </div> 
                    </div>
                </li>

                <li id="item-mzm6815mzm2mzmNaNmzmdk" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/6815.jpg" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                         Alu værksteds donkraft 1,25 T.<br/>
                            Varenummer: 6815                        </div> 
                    </div>
                </li>

                <li id="item-mzmR6815-21mzm2mzmNaNmzmdk" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/1463467375.jpg" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                         Kardanled for 1,25 ton donkraft. <br/>
                            Varenummer: R6815-21                        </div> 
                    </div>
                </li>

                <li id="item-mzmR6820-UJmzm2mzmNaNmzmdk" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/1463467386.jpg" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                         Kardanled for 2,5 ton donkraft. <br/>
                            Varenummer: R6820-UJ                        </div> 
                    </div>
                </li>

                <li id="item-mzmR6815-pakmzm2mzmNaNmzmdk" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/1463466442.jpg" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                         Olie pakning kit sæt for 1,25 ton donkraft.<br/>
                            Varenummer: R6815-pak                       </div> 
                    </div>
                </li>

                <li id="item-mzmR6820-pakmzm2mzmNaNmzmdk" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/1463466450.jpg" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                         Olie pakning kit sæt for 2,5 ton donkraft.<br/>
                            Varenummer: R6820-pak                       </div> 
                    </div>
                </li>

                <li id="item-mzmR6815-1mzm2mzmNaNmzmdk" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/1463467321.jpg" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                         Gummiplade for 1,25 ton donkraft.<br/>
                            Varenummer: R6815-1                     </div> 
                    </div>
                </li>

                <li id="item-mzmR6820-1mzm2mzmNaNmzmdk" class="list-group-item hand">
                    <div class="row">
                        <div class="col-md-2">
                            <img src="/images/1463467331.jpg" class="img-responsive">
                        </div>
                        <div class="col-md-10">
                         Gummiplade for 2,5 ton donkraft.<br/>
                            Varenummer: R6820-1                     </div> 
                    </div>
                </li>

我希望有人能帮我解决这个问题——我确实认为这与包含破折号有关,但是删除它并不能解决问题。

我也知道不推荐的mysql语句。我正在转换到mysqli.

我发现我怀疑的破折号确实是问题所在-正如我在这里发现的:

jQuery UI可排序,然后将顺序写入数据库

当您使用serialize选项时,它将创建一个POST查询字符串像这样:item[]=1&item[]=2等等。所以如果你利用-比如-在id属性中添加数据库id,然后可以简单地迭代通过post数组并更新元素的位置因此。

因为我的产品ID可以包含破折号,这是有问题的(它似乎是一个坏的解决方案使用str_replace来解决它),所以我去了另一个解决方案与json一起,在那里我能够解码json和插入值内foreach循环就像原来的问题。

工作结果如下:

排序文件:
<script>
$(document).ready(function () {
    $('ul').sortable({
        scroll:true,
        helper: "clone",
        axis: 'y',
        stop: function (event, ui) {
            var data = {category: '<?=$_GET['id']?>', subcategory: '<?=$_GET['subid']?>', lang: '<?=$_GET['country']?>', dataset:$("#sortable").sortable('toArray')};
            var json = JSON.stringify(data);
            $('#span').text(data);
            $.ajax({
            data: json,
            type: 'POST',
            contentType: "application/json",
            url: '/admin/pages/sortonthefly.php'
        });
    }
    });
});
  </script>

排序文件:

$i = 1;

$data = json_decode(file_get_contents('php://input'));
$productId = $data->dataset;
$category = $data->category;
$subcategory = $data->subcategory;
$country = $data->lang;

foreach ($productId as $value) {
    mysql_query("UPDATE b_kat_prod SET sortering = $i WHERE prodref = '$value' AND katref = $category AND subref = $subcategory AND country = '$country'") or die(mysql_error());
        $i++;
    }