2012-03-10 96 views
-2

我有下面的代碼,我創建更新數據庫與來自一個PHP窗體的數據。 $_POST['variables']是不同的陣列。 我遇到的問題是當我回復$updater字段狀態和字段顯示值的順序不正確時。例如,如果我選中複選框3,它將返回結果第一行中啓用的值。任何建議將幫助謝謝循環更新來自表單的數據php mysql html

//update data 

$priority = $_POST['priority']; // this will be an array 
$enable = $_POST['enable']; 
$height = $_POST['height']; 
$position = $_POST['position']; 
$widgetid = $_POST['widgetid']; 
$display = $_POST['display']; 

$i = -1; 
foreach($priority as $priori) 
{ 
    ++$i; 
    $row_enable = $enable[$i]; 
    $row_height = $height[$i]; 
    $row_prio = $priority[$i]; 
    $positio = $position[$i]; 
    $disp  = $display[$i]; 
    $widgeti = $widgetid[$i]; 

    if (isset($enable[$i])) 
     $enables ="y"; 
    else 
     $enables ="n"; 

    if (isset($display[$i])) 
     $displ = "y"; 
    else 
     $displ = "n"; 

    //DO THIS FOR THE REST AND THEN YOUR UPDATE QUERY 
    $updater = "UPDATE hpoptions SET position='$positio', height='$row_height', status='$enables', display='$displ', priority='$row_prio' WHERE userid='$ud' and widgetid='$widgeti'"; 

    echo $updater."<br>"; 

} // ends here 

enter image description here

回答

2

誰也不能保證你會得到你的陣列所需的順序,除非你強迫它的HTML。你可能有這樣的事情:

<input type="text" name="position[]"> 
<input type="text" name="height[]"> ... 
<input type="hidden" name="widgetid[]" value="w1"> 
    ... 
<input type="text" name="position[]"> 
<input type="text" name="height[]"> ... 
<input type="hidden" name="widgetid[]" value="w2"> 
    ... 

你需要一個額外的維度添加到字段名稱編碼的陣列。你需要每個字段組的唯一ID,我相信你的widgetid就是這樣,對嗎?所以,你可以這樣做:

<input type="text" name="data[w1][position]"> 
<input type="text" name="data[w1][height]"> ... 
... 
<input type="text" name="data[w2][position]"> 
<input type="text" name="data[w2][height]"> ... 
... 

注意到你甚至不需要一個名爲widgetid了場,因爲IDS將在每個字段名稱進行編碼。在PHP中,你這樣做循環遍歷結果:

foreach($_POST['data'] as $widgetid => $data) { 
    // Make sure to check if the values won't make your SQL query vulnerable to injection! 
    // http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain 
    $widgetid = mysql_real_escape_string($widgetid); 
    $position = is_numeric($data['position']) ? $data['position'] : 0; 
    // ... 
    // Build your update query here 
} 
+0

編輯:第一個版本是錯誤的,修復。 – bfavaretto 2012-03-11 00:09:49

+0

謝謝我現在嘗試它。表單字段是從MySQL生成的...我不能將它們命名爲w1 w2等... – cppit 2012-03-11 00:30:00

+0

使用別名,因此您可以命名它們。 – 2012-03-11 00:36:33