2011-08-17 130 views
1

我有一個有多個類別的表單。它們由複選框分開,這樣一個可以檢查任何數量的類別,他們的職位/故事會英寸PHP MYSQL編輯窗體,試圖爆炸/爆炸行復選框?

的值存儲在一個數據庫行內把它們分開用逗號,而INSERT

GetSQLValueString(implode($_POST['r_category'],", "), "text"), 

所以在數據庫我可能有一個看起來像這樣的條目:

2,3,6,12 

這些是類別號碼。

我現在正在構建一個編輯表單功能,用於編輯和更新這些記錄。我找不到在編輯表單中將「分解」爲值複選框的方法?

因此,如果您登錄並轉到您想要編輯的ENTRY,例如,我有複選框將類別分開,因此將很容易檢查並取消選中添加並且不添加...我嘗試了所有我可以將這些值設置爲POST並在查看此編輯表單時進行檢查。

下面是我的編輯表單頁面上的一個類別複選框的示例,但它不起作用,當我有多個類別,如上面的示例2,3,6,12 ?? :

<input type="checkbox" name="r_category[]" 
<?php if (!(strcmp("2", $row_Recordset2['r_category']))) { 
       echo "checked=\"checked\"";} ?> value="2" />Cat 2 

在此先感謝NINJAS !!

+2

在單個字段中存儲多個值總是一個壞主意和一個糟糕的設計。您應該規範化並將這些值存儲在單獨的表中。現在,如果您的字段出現「2」,ANYWHERE中的PHP中的「檢查」代碼將勾選複選框。因此,「12,22」的值也會檢查'2'。 –

回答

5

我無法找到一個方法來「爆炸」的值到複選框編輯表單

此行是如此的接近,我認真想知道答案,如果這是一個笑話後。

根據您的數據庫結構,您可以使用explode()函數根據分隔符將值分解爲數組。例如:

$values = "1,2,3,4"; 
$array_of_values = explode(",", $values); 

在此之後,將$array_of_values含有與分別1234的值的四個元件的陣列。

在決定是否要顯示覆選框作爲託運,您可以使用in_array()功能,使這一呼籲:

if (in_array("2", $array_of_values)) { 
    echo 'checked="checked"'; 
} 

除此之外,讓我藉此機會向第二個什麼@MarkB在說對此問題的評論:這是一個不好的想法在一個數據庫字段中保存多個值。它讓搜索更難,它使得增加價值變得更困難......它使得一切都變得比需要的複雜。

處理此問題的最佳方法是使用多對多表來存儲項目和類別的行,併爲每個類別指定一個項目所屬的行。

換句話說,你現在有這樣的:

Item | Category 
--------------- 
123 | 1,2,3,4 

你會代替有一個表,看起來像這樣:

Item | Category 
--------------- 
123 | 1 
123 | 2 
123 | 3 
123 | 4 
+0

優秀評論!!!好東西!!這真的有很大的幫助!我是這樣一個視覺的人,這真的爲我做了。謝謝! – eberswine

+0

@eberswine不客氣。很高興有幫助。 – AgentConundrum

+0

我認爲這是我在這裏得到的最佳答案之一! – eberswine

0

你可以用它如下圖所示它可能是有幫助

if (in_array("2", $row_Recordset2['r_category'])) {echo "Checked";} 
0

in_array有條件的從來沒有爲我工作。我設計了一個完全的前端解決方案,它的作用就像魅力一樣,並根據數據庫的變化自動更新。如果你有興趣,請在這裏查看。 https://stackoverflow.com/a/26433841/1896348