Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将表单中复选框的值保存到单个MySQL字段中?_Php_Sql_Mysql_Html - Fatal编程技术网

Php 如何将表单中复选框的值保存到单个MySQL字段中?

Php 如何将表单中复选框的值保存到单个MySQL字段中?,php,sql,mysql,html,Php,Sql,Mysql,Html,我有一种形式,我有很多音乐流派。一个艺术家可以用多种体裁唱歌。我已经在复选框中输入了这些类型。现在我需要将复选框的值存储到单个字段中 由于我不熟悉php编程,有人能帮我解决一些代码片段吗?为什么要在一个字段中存储多个值?这将使搜索/检索变得不必要的痛苦 每个流派使用一个字段,或者最好仍然使用“流派”表和“艺术家流派”查找表。您可以使用/,但不应将序列化数据保存到数据库 您将无法在其上使用数据库功能(搜索、排序等),即您可以序列化数据,例如: <input type="checkbox" n

我有一种形式,我有很多音乐流派。一个艺术家可以用多种体裁唱歌。我已经在复选框中输入了这些类型。现在我需要将复选框的值存储到单个字段中


由于我不熟悉php编程,有人能帮我解决一些代码片段吗?

为什么要在一个字段中存储多个值?这将使搜索/检索变得不必要的痛苦

每个流派使用一个字段,或者最好仍然使用“流派”表和“艺术家流派”查找表。

您可以使用/,但不应将序列化数据保存到数据库


您将无法在其上使用数据库功能(搜索、排序等),即

您可以序列化数据,例如:

<input type="checkbox" name="genre[]" value="Genre1"/>
<input type="checkbox" name="genre[]" value="Genre2"/>
<input type="checkbox" name="genre[]" value="Genre3"/>
您可以通过以下方式获取数据:

$genres = unserialize($serializedGenre);

一般来说,你不应该这样做。您的数据库不会是这样的,这将使在类型字段上构建查询变得困难

如果您有一个名为
artists
的表和一个名为
genres
的表,这将是一个更好的主意。然后,您可以在另一个表
artists\u genres
中定义艺术家和流派之间的关系,该表只包含一个
artist\u id
和一个
genre\u 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有一种数据类型,可以很好地将一组复选框存储在一列中。

欢迎使用Stack Overflow,Reagan:)
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';