2010-09-02 54 views
2

我有這樣的形式:如何在數據庫中保存複選框數組?

<tr> 
    <td><input type="hidden" name="ledlamps" value="LED lamps">LED lamps:</td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="3mm"/><label class="choice">3mm</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="5mm"/><label class="choice">5mm</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="8mm"/><label class="choice">8mm</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="10mm"/><label class="choice">10mm</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="Ovals"/><label class="choice">Ovals</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="Assembly LEDs"/><label class="choice">Assembly LEDs</label></td> 
    </tr> 

這PHP代碼:

$box=$_POST['box']; 
$ledlamps = $_POST['ledlamps']; 

if ($box != 0) { 
echo "$ledlamps: "; 
while (list ($key,$val) = @each ($box)) { 
$val1 = "$val, "; 
echo "$val1"; 
} 

} 

如果回聲它顯示在我的方式輸出,我希望它:

LED燈具:3毫米的5mm ,8毫米(如果我勾選相應的複選框)

但我想把它存儲在一個MySQL表字段。我怎麼做?

感謝您的幫助!

+3

使用'serialize'函數:) – Sarfraz 2010-09-02 15:01:04

回答

2

您可以使用implode()加入$box陣列中的一個字符串,如下所示:

$box=$_POST['box']; 
$ledlamps = $_POST['ledlamps']; 

$str = $ledlamps . ": " . implode(", ", $box); 

然後$str應包含「LED燈具:3毫米的5mm,8毫米」(根據您檢查領域)。

然後可以將此字段插入到您需要的任何mysql列(假設您的查詢是properly escaped並且在嘗試db查詢之前驗證了輸入..)。

這種存儲數據的方式可能會使得再次查詢數據時需要再次查詢數據變得非常棘手,因此儘管只需簡單地打印屏幕來顯示產品歷史記錄等,但您可能更好地調查你的數據庫表結構是否可以更加適應。因此,如果我們假定這是一個庫存管理系統,是這樣的:

category table: 
- category_id 
- category_name  (LED lamps..) 

stock table: 
- item_id 
- category_id  (id for LED lamps..) 
- item_description (3mm lamp, etc) 

stock_selection table: 
- transaction_id 
- user_id 
- date 

stock_transaction table: 
- transaction_id 
- item_id 
- change    (number of items added/removed) 

所以一旦你收到回從表單中的複選框,將創建一個新的stock_selection記錄登錄的用戶。然後,您使用此新記錄中的ID,並在stock_transaction表中的每個複選框中輸入1個條目。

這將允許您將來查詢您的數據庫以跟蹤諸如取出(或重新添加等)的物品的數量,誰拿走了它等等,並且最終可能是更具未來性的產品,這取決於您的整體架構。

+0

謝謝,你的第一個解決方案爲我工作,雖然我同意你的意見。但這是它的要求。 – 2010-09-02 17:13:59

2

將它們存儲在數據庫serialized中,如@Sarfraz建議的那樣,或逗號分隔,或者在與主表連接的單獨表中。

1

你既可以:

$boxes = implode(",", $_POST['boxes']); 
$id = intval($_GET['id']); 
$sql = sprintf("UPDATE table SET box=%s WHERE id=%d", $boxes, $id); 
$res = mysql_query($sql); 

這將保存在一個逗號分隔的數組,然後你可以explode()從數據庫中檢索時框中的值。

或者,如果您想要走正確的路線,您可以設置一個單獨的表格。這樣你就可以有多對一的關係,一個對象(比方說汽車)可以有多個燈。

Table: cars 
    - ID 
    - Name 

Table: cars_lamps 
    - Car_ID 
    - Lamp_ID 

Table: Lamps 
    - ID 
    - Name 

我希望有道理。

相關問題