2011-05-01 100 views

回答

2

就我自己來說:如果我不費吹灰之力就將每列存儲一個,那麼我會發現它更容易查詢存儲的複選框值。但當然YMMV。

每列存儲一個值也會使這些值標準化,這是(或應該是)設計表的主要目標之一。

2
  • 複選框中的一個字段絕對不是他們要走的路,那會讓您比其他任何事情都更麻煩。

  • 如果您確實需要將結果存儲在同一個表中,那麼序列化是最好的,只要您知道您將無法根據這些值進行SQL查詢。

  • 最好的辦法是創建一個NxN表,將您的原始錶鏈接到另一個表,您將擁有可能的複選框值列表。這也是這種情況下推薦的標準化。

+0

這是* *有趣 - 180德分隔的兩個意見grees。你爲什麼認爲他(或某人)不想查詢這些複選框的值?這不是將數值放入數據庫的原因之一嗎?只是爲了讓他們能夠被查詢?也就是說,如果他們永遠不會被查詢,爲什麼還要把它們存儲在數據庫表中? – 2011-05-01 17:59:54

2

我同意維多梅洛,創建一個表,其中每個複選框映射到一個特殊的領域。這不是那麼多的開銷,所以省去你的麻煩。

另外我猜你正在使用表單將這些答案發回服務器?

如果所以這裏是一個提示:

當您發佈包含複選框到服務器端的PHP頁面的表單,你檢查一下的複選框設置像這樣:

HTML:

<form> 
<input type="checkbox" name="chk1" /> 
<input type="checkbox" name="chk2" /> 
<input type="submit" name="myChkSubmit" /> 
</form> 

PHP回傳處理程序:

<?php 

//Correct way to retrieve your checkboxes 

$chk1 = FALSE; 
$chk2 = FALSE; 

if(isset($_POST['chk1'])) 
{ 
    $chk1 = TRUE; 
} 

if(isset($_POST['chk2'])) 
{ 
    $chk2 = TRUE; 
} 

//WRONG WAY 

$chk1 = FALSE; 
$chk2 = FALSE; 

if(isset($_POST['chk1'])) 
{ 
    $chk1 = $_POST['chk1']; //This will always evaluate to "undefined" 
} 

if(isset($_POST['chk2'])) 
{ 
    $chk2 = $_POST['chk2']; //This will always evaluate to "undefined" 
} 

//NOTE: the reason the above example is incorrect is because the form will indicate checked 
//  status of a check box by setting the POST array element, but does not set a value 
//  for that element. If the element is set in POST it was checked, if it is not set, 
//  it will not be a recognized index in the POST array. 
相關問題