2011-08-17 56 views
0

我试图通过jQuery发布的一些数据进行循环。这是我的PHP脚本:循环发布数据并更新相应的数据库记录

<?php 
include '../dbconnect.php'; 
$map = $_POST['map']; 
$position = 0; 
foreach ($map as $ID) 
{ 
    if ($_POST['type'] == "sub") { 
    $query = "UPDATE Subcategories SET `Position` = '$position' WHERE CategoryID = '$ID';"; 
    } else { 
    $query = "UPDATE Categories SET `Position` = '$position' WHERE CategoryID = '$ID';"; 
    } 

    $result = mysql_query($query) or die(mysql_error()); 
    $position ++; 
} 
?> 

,它是recieving为$地图中的数据以这种形式被发送:

ID [] = 27 & ID [] = 28 & ID [] = 33 & ID [] = 19

显然,我的foreach是错的,但我将如何去得到它让我保持$map的订单和每一个数值变变$ID

+0

你的意思是$ _POST [“映射”]即将通过为单个元件阵列($ _POST [“映射”] [0]仅被设定),在它上面的字符串?你真的希望每个人的身份证都能通过这个foreach吗? – Pete171

+0

$ _POST ['map']包含的示例输出将帮助 –

+1

它应该是'$ map = $ _POST ['ID'];'否? – Darcara

回答

2

好吧,由于您的$ map包含ID[]=27&ID[]=28&ID[]=33&ID[]=19字符串值。做这样的事情

$str = str_replace($map, "ID[]=",""); 
$mArr = explode("&", $str); 
foreach($mArr as $key) { 
    //now your $key will have 27, 28, 33, 19 as the loop progresses 
} 

P.S.基于OP的$ map的评论,其中有一个字符串输出

+0

这与OP已具有的完全相同。 – J0HN

+0

它应该说'explode'而不是'expode',它不是什么运算和应该工作。 – Darcara

+0

@Darcora,好的,爆炸已被纠正。你知道'typos'正确的:P – Starx

0

我不完全确定,但这是你的意思吗?它的工作原理,如果我正确地理解你的问题。

<?php 
include '../dbconnect.php'; 
$position = 0; 

$pattern = '/ID\\[\\]=(\d+)&*/'; 
$subject = $_POST['map']; 

preg_match_all($pattern, $subject, $matches); 

foreach ($matches as $k => $ID) { 
    // etc 

测试用例

你可以做个试验,在一个单独的脚本。如果你使用这个脚本,$ matches [1]的输出就是你要提供给foreach循环的东西。这是否取回你想要的?

<?php 
$pattern = '/ID\\[\\]=(\d+)&*/'; 
$subject = 'ID[]=27&ID[]=28&ID[]=33&ID[]=19'; 
preg_match_all($pattern, $subject, $matches); 
echo '<pre>'.print_r($matches,1).'</pre>'; 
?> 

输出:

Array 
(
[0] => Array 
    (
     [0] => ID[]=27& 
     [1] => ID[]=28& 
     [2] => ID[]=33& 
     [3] => ID[]=19 
    ) 

[1] => Array 
    (
     [0] => 27 
     [1] => 28 
     [2] => 33 
     [3] => 19 
    ) 

) 
+0

谢谢,但这对我不起作用:( –

+0

嗯,正则表达式本身起作用,因为我自己测试了它,我会用测试的东西来更新我的文章,以供您尝试。可以修改这个例子以适合你的需求 – Pete171

0

你能告诉我们什么print_r($map);显示器。

如果它只是你描述的格式的字符串,我会建议将地图的格式更改为更容易循环的东西,比如json。例如

{"map":[27,28,33,19]} 

然后你可以使用

<?php 
$mapObject = json_decode($_POST['map']); 

$mapArray = $mapObject->map; 
foreach($mapArray as $id) 
{ 
    echo $id; 
} 
?> 
0

您可以发布它没有地图,只要

$.ajax({ type: 'POST', url: 'updatecategoryposition.php', data: map + "&type=sub" }); 

我假设地图包含“ID [] = 27 & ID [] = 28 & ID [] = 33 & ID [] = 19'

作为一种替代方案,您可以将地图保存为其他格式,以便地图只是一个ID列表($ map =“27,28,33,19”),使用原始的jquery帖子并最终使用

$map = explode(',' $_POST['map']); 
+0

我不选择map是如何格式化的,不幸的是这是插件中的一个函数,它产生了字符串。 –

0

感谢您尝试的家伙,但在最后,我不能得到任何建议的工作,但我没有找到一个解决方案:

更新类别位置:

<?php 
include '../dbconnect.php'; 
foreach ($_POST['ID'] as $position => $ID){ 
$query = "UPDATE Subcategories SET `Position` = '$position' WHERE CategoryID = '$ID';"; 
$result = mysql_query($query) or die(mysql_error()); 
} 
?> 

和新的jQuery职位请求Starx(告诉我删除变量名称),因此我可以像上面那样访问查询字符串:

$.ajax({ 
       type: 'POST', 
       url: 'updatecategoryposition.php', 
       data: map 
      });