Php Jquery/AJAX排序函数无法在mysql中使用破折号存储数据
我有一个页面,其中列出了一组要通过拖放进行排序的产品。这里一切正常 我有一篇AJAX帖子,指向一个sort-on-fly PHP文件,每当排序顺序被更改时,它都会将排序顺序保存在一个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
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触发的文件。也许你可以带我去监狱