Php Jquery/AJAX排序函数无法在mysql中使用破折号存储数据

Php Jquery/AJAX排序函数无法在mysql中使用破折号存储数据,php,jquery,ajax,sorting,Php,Jquery,Ajax,Sorting,我有一个页面,其中列出了一组要通过拖放进行排序的产品。这里一切正常 我有一篇AJAX帖子,指向一个sort-on-fly PHP文件,每当排序顺序被更改时,它都会将排序顺序保存在一个Mysql表中。这几乎可以正常工作 代码如下所示: foreach ($_POST['item'] as $value) { $explode = explode("mzm", $value); mysql_query("UPDATE b_kat_prod SET sortering = $i WHERE

我有一个页面,其中列出了一组要通过拖放进行排序的产品。这里一切正常

我有一篇AJAX帖子,指向一个sort-on-fly PHP文件,每当排序顺序被更改时,它都会将排序顺序保存在一个Mysql表中。这几乎可以正常工作

代码如下所示:

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]' ");

}
<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>
产品排序文件:

<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>
            <?
                                                }
}
?>
<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>
更新程序可以工作,但当$explode[1]包含破折号(-)时,更新程序将失败。当$explode[1]中有一个-时,我似乎无法更新它

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

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]' ");

}
<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>
  • Alu værksteds donkraft 2.5 T.
    瓦伦默:6820
  • Alu værksteds donkraft 1,25 T.
    瓦伦默:6815
  • 卡尔丹为1.25吨唐卡夫
    Varenummer:R6815-21
  • 卡丹为2.5吨的唐卡夫
    Varenummer:R6820-UJ
  • 1.25吨donkraft的Olie包装套件sæt.
    Varenummer:R6815巴基斯坦
  • 用于2.5吨donkraft的Olie包装套件sæt.
    Varenummer:R6820巴基斯坦
  • 1.25吨donkraft的Gummiplade.
    Varenummer:R6815-1
  • 2.5吨donkraft的Gummiplade.
    Varenummer:R6820-1
  • 我希望有人能在这里帮助我——我确实相信这和已经包含破折号有关,但移除破折号并不能解决问题


    我还知道不推荐使用的mysql语句。我正在转换为mysqli。

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

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

    因为我的产品ID可能包含破折号,这是有问题的(使用str_replace来解决它似乎是一个糟糕的解决方案),所以我使用了另一个与json一起使用的解决方案,在那里我能够像最初的问题一样解码json并在foreach循环中插入值

    工作结果如下:

    排序文件:

    <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>
                <?
                                                    }
    }
    ?>
    
    <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>
    

    当它失败时,实际执行的运行时查询是什么?它失败的具体程度如何?如果这是一个源于SQL注入漏洞的问题,那么使用准备好的语句和查询参数可能会使问题变得毫无意义。(还有一个额外的好处,就是修复您的SQL注入问题。)嗨@David,如果前5个循环没有破折号,那么Mysql中的这些循环将完成并更新。如果第六个循环包含破折号,则更新停止。我无法看到任何错误,因为代码是在sortonthefly.php文件中运行的。您必须在这里进行一些实际调试。现在你基本上是在说“它不起作用”,这不是很有帮助。专注于失败的循环的一次迭代,并对其进行调试。确定实际运行时值是什么,特别是SQL查询。确定它是如何失败的。如果查询没有成功,那么实际检查数据库中的错误(
    mysql\u error()
    )。数据库可能会告诉你失败的原因,但你只是没有检查。我同意你的观点,很抱歉没有提供更多的细节。我只是不知道如何调试一个由AJAX触发的文件。也许你可以带我去监狱