2011-02-09 88 views
0

解決,見我最後的答案後完整的細節是什麼工作,我如何發佈陣列到PHP

*原來的問題和下面編輯:

尋找一種方式來設置多個SQL項目由張貼的數組。

我很確定我使用的是php5。

這是我如何設置一個單一的一個,但我不知道很多關於PHP中數組

mysql_query 
(" 
    UPDATE comics 
    SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>') 
    WHERE id = $id 
") or die(Err(mysql_error())); 

我想從閃存張貼idArray和newPageNumberArray

,其中有相聲idArray [0]的id會將其pageNumber設置爲newPageNumberArray [0],依此類推。

這些陣列的長度彼此相等。但可以是任意長度,具體取決於管理工具中更改的頁碼數量。

現在我可以對每個項目做一個單獨的php請求,但我認爲將它們全部發送到一個php請求會更清晰。

* 編輯

感謝帕特里克我感覺更接近...但我仍然沒有完全正確。

閃光發送這些陣列

idArr:34,24

pageNumArr:1,2

在PHP我有此功能

function changePageNumbers($con, $idArr, $pageNumArr){ 

    selectDataBase($con); 
    echo '&startForLoop=true'; 
    for($i=0;$i<count($idArr);$i++) 
    { 

     $thisPageNum = mysql_real_escape_string($pageNumArr[$i]); 
     $thisId = mysql_real_escape_string($idArr[$i]); 

     echo '&thisPageNum='.$thisPageNum; 
     echo '&thisId='.$thisId; 

     mysql_query 
     (" 
     UPDATE comics 
     SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>".$thisPageNum."</pageNumber>') 
     WHERE `id` = ".$thisId." 
     LIMIT 1; 
     ") or die(Err(mysql_error())); 

     echo '&querySent=true'; 
    } 
    echo '&endForLoop=true'; 
} 

它返回這個

thisPageNum = 2 & endForLoop = true & thisId = 2 & startForLoop =真& querySent =真

這似乎亂序(也許這是正常的嗎?)

更重要的是,它只是列出thisPageNum和thisId一次,當陣列具有2

並且更重要的是它列出thisId = 2所發送的ID是34和24

* EDIT2 當我在html中運行它,並手動設置PHP中的數組它的工作原理

$idArr = array(34,24); 
$pageNumArr = array(2, 1); 

這意味着從閃存傳遞我的數組通過$ _POST在某種程度上失敗。我確定他們在Flash中構造良好。也許在通過$ _POST的路上,它們變成了逗號分隔值。

運行更多測試。

+0

創建一個頁面,它可以檢查所有關於php安裝的信息:`<?php phpinfo(); ?> – 2011-02-09 17:29:41

+0

哦是的,PHP版本5.2.15,謝謝 – SketchBookGames 2011-02-09 17:44:06

+0

你試圖在提交後用最新編輯的`echo`重定向瀏覽器嗎?您是否嘗試過發佈兩個數組的`print_r()`,以確保獲得兩個長度相等且不是多維數組的單獨數組? – Patrick 2011-02-10 00:28:57

回答

1

您可以將它們全部發送到一個請求中,並在PHP中創建一個循環以逐一更新它們。據我所知,在一個聲明中沒有辦法做到這一點,否則你將不得不創建複雜的案例結構。這可能會導致一些更好的數據庫性能,但對於SQL經驗不多的人來說,這是一個非常麻煩的工作,所以我應該用PHP來完成。

不要忘記開始交易。 :)

循環:

foreach($_POST['variableofyourchoice'] as $id) 
{ 
    // Execute the query using $id 
} 
2

設置數據像數組:

$uploaded_data = array(
    0 => array(
     'xml' => '..blah...blah', 
     'id' => 231 
    ), 
    1 => array(
     'xml' => 'bleh...bleh..', 
     'id' => 232 
    ) 
); 

編輯 更新從$ _POST 陣列的數據是這樣的方式,此數據將目光從普通形式POST

$_POST = array(
    'xml' => array(
     '..blah...blah', 
     'bleh...bleh..' 
    ), 
    'id' => array(
     231, 
     232 
    ), 
'submit' => 'Submit' 
); 

並通過陣列迭代並做每各內部陣列插入

foreach($uploaded_data as $data) 
{ 
    $update_query = sprintf("UPDATE comics 
     SET xml = UpdateXML('%s','comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>') 
     WHERE id = '%s' 
     LIMIT 1;", 
     mysql_real_escape_string($data['xml']), 
     mysql_real_escape_string($data['id']) 
    ); 
    $update_result = mysql_query($update_query); 
} 

編輯2 更新通過$循環_POST數據

for($i=0;$i<count($_POST['xml']);$i++) 
{ 
    if(!array_key_exists($i, $_POST['id'])) 
    { 
     // if there is not a value for the id's at this count, break 
     $i = count($_POST['xml']); 
     continue; 
    } 
    $update_query = sprintf("UPDATE comics 
    SET xml = UpdateXML('%s','comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>') 
    WHERE id = '%s' 
    LIMIT 1;", 
    mysql_real_escape_string($_POST['xml'][$i]), 
    mysql_real_escape_string($_POST['id'][$i]) 
    ); 
    $update_result = mysql_query($update_query); 
} 

重要: ALWAYS設置限制上UPDATE查詢。可能會發生錯誤,並意外更新整個數據庫而不是單個行。

重要2 確保你總是清理你的數據庫輸入以及,(mysql_real_escape_string()

0

最終答案

唯一的辦法我能得到這個職位,通過正確地去使用CSV的和PHP explode();作爲GolezTrol建議

帕特里克證實通過在PHP數組步進的過程。

所以這是提供援助的一個組合:一些測試後

我的最終代碼。

要運行測試的w/o快速

$_POST["idArr"] = "34,24"; 
$_POST["pageNumArr"] = "2,1"; 

要打開CSV的(逗號分隔值)成陣列

$idArr = explode(",", $_POST["idArr"]); 
$pageNumArr = explode(",", $_POST["pageNumArr"]); 

通過陣列步進和發送SQL querys

for($i=0;$i<count($idArr);$i++) 
{ 

    $thisPageNum = mysql_real_escape_string($pageNumArr[$i]); 
    $thisId = mysql_real_escape_string($idArr[$i]); 

    mysql_query 
    (" 
    UPDATE comics 
    SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>".$thisPageNum."</pageNumber>') 
    WHERE `id` = ".$thisId." 
    LIMIT 1; 
    ") or die(Err(mysql_error())); 
} 

「正確答案」 ......去GolezTrol

,因爲只能有一個,我想GolezTrol回答的問題,如標題所述,而帕特里克幫助解決根本問題,我就不得不在之後立即。

感謝您的幫助和耐心。