2010-01-23 106 views
3

我有一個表格,我有很多音樂流派。一位藝術家可以在許多流派下演唱。我把這些流派置於複選框中。現在我需要將複選框的值存儲到單個字段中。如何將表單中複選框的值保存到單個MySQL字段中?

有人可以幫我解決一些代碼片段,因爲我是新的PHP編程?

+0

歡迎來到Stack Overflow,Reagan :) – 2010-01-23 11:59:00

回答

2

爲什麼你想要在一個字段中存儲多個值 - 這將使搜索/檢索不必要的痛苦。

要麼使用每個流派的字段,要麼更好地使用'流派'表和'artist_genres'查找表。

1

您可以使用serialize/unserialize,但不應將序列化數據保存到數據庫。

您將無法在其上(搜索,排序等)使用的數據庫功能即

1

您可以序列數據,例如:

<input type="checkbox" name="genre[]" value="Genre1"/> 
<input type="checkbox" name="genre[]" value="Genre2"/> 
<input type="checkbox" name="genre[]" value="Genre3"/> 

PHP:

// Don't forget to escape the POST-values 
$genre = serialize($_POST['genre']); 
$query = "INSERT INTO database (genre) VALUES ('" . $genre . "')"; 
if(mysql_query($query)){ 
    // Success 
} 

你可以取回數據有:

$genres = unserialize($serializedGenre); 
4

一般來說,你不應該那樣做。您的數據庫不會是normalized,這將使難以在流派字段上構建查詢。

如果您有一個名爲artists的表和一個名爲genres的表,那將是一個更好的辦法。然後,您可以在另一個表artists_genres中定義藝術家和流派之間的關係,該表格僅包含artist_idgenre_id。您仍然可以爲同一個藝術家創作多個流派。

例如,請考慮如下定義的表結構:

TABLE artists 
------------- 

artist_id   name    surname 
1     Alicia   Keys 
2     Mariah   Carey 
... 


TABLE genres 
------------ 

genre_id   name 
1     R&B 
2     pop 
3     hip hop 
4     dance 
... 


TABLE artists_genres 
-------------------- 

artist_id   genre_id 
1     1 
1     2 
1     3 
2     1 
2     2 
2     4 
... 

在這種情況下,你就可以構建簡單的查詢,如:

SELECT 
    artists.name, artists.surname 
FROM 
    artists 
INNER JOIN 
    artists_genres ON (artists_genres.artist_id = artists.artist_id) 
INNER JOIN 
    genres ON (genres.genre_id = artists_genres.genre_id) 
WHERE 
    genre.name = 'pop'; 

以上將是相當困難的以實現您的藝術家的流派是否存儲在artists表中的單個字段中。除了困難之外,它可能會很慢並且效率低下,尤其是如果你有很多記錄的話。

0

MySQL有一個SET數據類型,它可以很好地將一組複選框存儲在一個列中。

相關問題