2011-08-17 37 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 
      });