繁体   English   中英

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

[英]How do I save the values of checkboxes in a form into a single MySQL field?

我有很多音乐流派的形式。 艺术家可以以多种流派唱歌。 我已将流派放在复选框中。 现在,我需要将复选框的值存储在单个字段中。

当我不熟悉php编程时,有人可以帮我一些代码片段吗?

通常,您不应该那样做。 您的数据库不会被规范化 ,这将使在体裁字段上构建查询变得困难。

如果您有一个名为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表的单个字段中,则上述内容将很难实现。 除了困难之外,它可能会很慢且效率低下,特别是如果您有很多记录的话。

为什么要在单个字段中存储多个值-这会使搜索/检索不必要地麻烦。

要么使用每个类型的字段,要么更好地使用“类型”表和“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM