我有一個表格,我有很多音樂流派。一位藝術家可以在許多流派下演唱。我把這些流派置於複選框中。現在我需要將複選框的值存儲到單個字段中。如何將表單中複選框的值保存到單個MySQL字段中?
有人可以幫我解決一些代碼片段,因爲我是新的PHP編程?
我有一個表格,我有很多音樂流派。一位藝術家可以在許多流派下演唱。我把這些流派置於複選框中。現在我需要將複選框的值存儲到單個字段中。如何將表單中複選框的值保存到單個MySQL字段中?
有人可以幫我解決一些代碼片段,因爲我是新的PHP編程?
爲什麼你想要在一個字段中存儲多個值 - 這將使搜索/檢索不必要的痛苦。
要麼使用每個流派的字段,要麼更好地使用'流派'表和'artist_genres'查找表。
您可以使用serialize/unserialize,但不應將序列化數據保存到數據庫。
您將無法在其上(搜索,排序等)使用的數據庫功能即
您可以序列數據,例如:
<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);
一般來說,你不應該那樣做。您的數據庫不會是normalized,這將使難以在流派字段上構建查詢。
如果您有一個名爲artists
的表和一個名爲genres
的表,那將是一個更好的辦法。然後,您可以在另一個表artists_genres
中定義藝術家和流派之間的關係,該表格僅包含artist_id
和genre_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
表中的單個字段中。除了困難之外,它可能會很慢並且效率低下,尤其是如果你有很多記錄的話。
MySQL有一個SET數據類型,它可以很好地將一組複選框存儲在一個列中。
歡迎來到Stack Overflow,Reagan :) – 2010-01-23 11:59:00