我有一个页面,其中列出了一组要按拖拽排序的产品;下降。这里一切正常。
我有一个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++;
}