2015-09-25 43 views
0

我有一個從mysql表中拉出的項目的簡單列表的頁面。每個項目都屬於兩個類別之一。在數據庫中我有「狀態」列。項目處於狀態1或狀態0.每組有一個。組合數組在foreach循環與if語句和查詢部分失敗

在頁面上的每個項目上,我添加了一個複選框,其中包含表中行的主鍵。在頁面上給定類別中的每個項目內。我還有一個隱藏字段,它的$ _POST ['Status']被設置爲與它當前所在的組相對應。使用下面的代碼,我將Status數組和check_list(這是主鍵)正確地合併到鍵和值中對。

我希望人們能夠檢查兩個組中的複選框,並通過單擊一次按鈕實現狀態更改,實質上將項目從一個組移動到另一個組。我有兩件事在兩組之間反彈。

組1中的一切正常。我可以一次移動一個項目,直到它一次只剩下兩個項目,並且所有三個項目都沒有問題。組0不起作用。我可以一次移動三件物品,沒有問題,我可以同時移動兩件物品,但一次只能移動一件物品。第二次,沒有任何進展。如果我選擇該組中的其餘項目,則只有第一個項目會移動。

這是非常奇怪的行爲。我認爲這與if語句在foreach循環中執行的方式有關,但我不知道如何解決它。

function combine_arr($a, $b) { 
    $acount = count($a); 
    $bcount = count($b); 
    $size = ($acount > $bcount) ? $bcount : $acount; 
    $a = array_slice($a, 0, $size); 
    $b = array_slice($b, 0, $size); 
    return array_combine($a, $b); 
} 
if(isset($_POST['Move'])) { 
    if(!empty($_POST['check_list'])) { 
     $combined = combine_arr($_POST['check_list'], $_POST['Status']); 
     foreach ($combined as $key => $value) { 
      if($value == 1) { 
       mysqli_query($con, "UPDATE items SET Status=0 WHERE ID=$key"); 
      } 
      if($value == 0) { 
       mysqli_query($con, "UPDATE items SET Status=1 WHERE ID=$key"); 
      } 
     } 
    } 
} 

這裏開始發起行動的按鈕,頁面上的相關HTML ...

<form action="index.php" method="post" id="itemCheck"> 
    <button form="itemCheck" class="button_Blue" type="submit" name="Move" value="Move">Move<span>selected</span></button> 
</form> 

...然後在第一組中的一個複選框...

<input type="hidden" form="itemCheck" name='Status[]' value='1'> 
<input type="checkbox" form="itemCheck"name="check_list[]" value="<?php echo $row['ID']; ?>"> 

......最後是第二組中的複選框,除了隱藏字段的值之外,它們是相同的。

<input type="hidden" form="itemCheck" name='Status[]' value='0'> 
<input type="checkbox" form="itemCheck"name="check_list[]" value="<?php echo $row['ID']; ?>"> 
+1

如果複選框是互斥的,爲什麼不你用單選按鈕呢? – Barmar

+1

我無法理解您的描述。請將HTML添加到問題中。 – Barmar

回答

1

您將兩個參數數組組合的方式將不起作用。只有被選中的框被提交,所以$_POST['check_list'][$n]不對應於$_POST['Status'][$n]。你應該更改HTML,以便Status輸入的名稱包含行ID:

<input type="hidden" form="itemCheck" name="Status[<?php echo $row['ID']; ?>" value="0"> 

然後你就可以像這樣將它們組合起來:

function combine_arr($a, $b) { 
    $result = array(); 
    foreach ($a as $val) { 
     $result[$val] = $b[$val]; 
    } 
    return $result; 
} 
+0

這是完美的! – user2530671