2011-11-15 68 views
1

多個帖子,但我仍然卡住...我在這裏失去了一些基本的東西。我有一個選擇的表格:與窗體數組mysql更新查詢

<select name="camera_status[]"> 
    <option <?php echo $enabled_option; ?>>Enabled</option> 
    <option <?php echo $disabled_option; ?>>Disabled</option> 
</select> 

此表單是用循環構建的,以給出所有相機設置的列表。所以你會有多個攝像頭和相應的camera_status。此外,我有一個隱藏的輸入字段與camera_id:

camera_id處理一些JavaScript。然後我處理:

$camera_id = $_POST['camera_id']; 

if (is_array($_POST['camera_status'])) 
{ 
    foreach ($_POST['camera_status'] as $camera_status) { 
    $query_status = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'" WHERE `camera_id`='.$camera_id; 
    $db->setQuery($query_status); 
    $db->query(); 
    } 
} 

如果我回顯camera_id它是正確的。但我的foreach運行更新查詢完整列表的相機,而不是隻選擇一個。所以它只更新列表中的最後一個攝像頭。讓我知道是否有意義更新完整的代碼。很顯然,我要對此都錯了......

+0

是什麼在'$ enabled_option'和'$ disabled_option' ? –

+0

@Dimme單獨選擇。用戶將更新表單並點擊一個「應用」按鈕,然後我想在數據庫和相應的表單中更新該記錄。目前,我的代碼將爲每個相機運行更新,只需填寫相同的camera_id – Tom

+0

@StanislavShabalin一些代碼即可填寫表單並確定相機是啓用還是禁用。它查詢數據庫並循環以填寫所有相機的數據。 – Tom

回答

1

編輯:好有一個選擇,如果你那麼簡單得多:

HTML:

<select name="camera_status"> 
    <option value="Enabled">Enabled</option> 
    <option value="Disabled">Disabled</option> 
</select> 

和PHP:

$camera_id = (int) $_POST['camera_id']; //Here you had SQL injection. 
$camera_status = mysql_real_escape_string($_POST['camera_status']); //Neither that was protected. 

$query_status = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'" WHERE `camera_id`='.$camera_id; 
$db->setQuery($query_status); 
$db->query(); 
+0

謝謝。我仍然卡住,因爲我的表單在選擇存在完全包含在一個循環中。所以我循環所有這些數據在數據庫中,並創建一個填充表單。當用戶改變表單中的內容並點擊應用時,它應該更新適當的行。但由於某種原因,它只會更新最後一臺相機。即使它我知道我有正確的camera_id。沒有代碼可能很難解釋。 = \ – Tom

+0

我明白了...很難爲我提供一些代碼。如果我有權訪問您的系統,我可以幫助您。當然這是不可能的。檢查nickb的解決方案是否有幫助,或嘗試給我們更多的代碼。 – Dimme

+0

我會添加另一個帖子。所以我可以發佈整個事情。謝謝。 – Tom

0

您在頁面的思維過程中存在根本性缺陷。當你輸出多個<select name="camera_status[]">元素時,你會得到很多結果。有了它們中的兩個,你會在數組中獲得兩個值,依此類推。

它聽起來像你正在做的是輸出一個相機列表,讓用戶選擇一個相機進行修改,然後,從那時起,所有的相機設置現在只適用於該特定的相機。如果是這種情況,那麼您不需要使用陣列來進行相機設置,包括camera_status。只需刪除陣列部分,並停止爲每個攝像頭設置輸出多個HTML元素(因爲您知道一旦選擇了攝像頭,這些值就適用於該特定攝像頭)。

但是,如果顯示多個攝像頭的頁面允許用戶修改每個攝像頭及其設置,則需要適應用戶的輸入。

如果是後者的話,這裏有一個巧妙的方法 - 修改您的<select>所以它看起來是這樣的,當你輸出你的相機形式:

<select name="camera_status[<?php echo $row['camera_id']; ?>]"> 
    <option value="1">Enabled</option> 
    <option value="0">Disabled</option> 
</select> 

現在,當你搶$_POST['camera_status'],它會以相機ID作爲鍵和它們的選定值作爲值的數組。所以現在,你可以做到這一點:

if(is_array($_POST['camera_status'])) 
{ 
    foreach ($_POST['camera_status'] as $camera_id => $camera_status) { 
     $camera_status = intval($camera_status); // Be wary of SQL injection 
     $camera_id = intval($camera_id); 
     $query_status = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'" WHERE `camera_id`='.$camera_id; 
     $db->setQuery($query_status); 
     $db->query(); 
    } 
} 

現在這將更新每個攝像頭與選擇正確的值。

0

夠簡單。添加值屬性的<option>標籤,使他們每個人都會有一個值

<select name="camera_status"> 
    <option value="1" <?php echo $enabled_option; ?>>Enabled</option> 
    <option value="0" <?php echo $disabled_option; ?>>Disabled</option> 
</select> 

然後,在你的PHP,尋找價值

foreach ($_POST['camera_status'] as $camera_status) { 
    if($camera_status == 1) { 
     $query_status = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'" WHERE `camera_id`='.$camera_id; 
     $db->setQuery($query_status); 
     $db->query(); 
    } 
}