![](/img/trans.png)
[英]How do I pass the values of my checkboxes with PHP to mySQL database?
[英]How do I save the values of checkboxes in a form into a single MySQL field?
我有很多音乐流派的形式。 艺术家可以以多种流派唱歌。 我已将流派放在复选框中。 现在,我需要将复选框的值存储在单个字段中。
当我不熟悉php编程时,有人可以帮我一些代码片段吗?
通常,您不应该那样做。 您的数据库不会被规范化 ,这将使在体裁字段上构建查询变得困难。
如果您有一个名为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
表的单个字段中,则上述内容将很难实现。 除了困难之外,它可能会很慢且效率低下,特别是如果您有很多记录的话。
为什么要在单个字段中存储多个值-这会使搜索/检索不必要地麻烦。
要么使用每个类型的字段,要么更好地使用“类型”表和“ 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);
MySQL具有SET数据类型,很适合将一组复选框存储在单个列中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.