当您不确切知道用户可以选择多少选项时,我很好奇如何将所选项目插入数据库。
说我有以下代码:
<select name="foo[]" multiple="multiple">
<option value="dog">Dog</option>
<option value="cat">Cat</option>
<option value="fish">Fish</option>
</select>
<?php
$pets = $_POST['foo'];
$query = mysql_query("INSERT INTO `pets` (`pet1`, `pet2`, `pet3`) VALUES ('".$pets[0]."', '".$pets[1]."', '".$pets[2]."')");
?>
用户只选择“狗”,“狗”和“猫”,“猫”和“狗”等选项。基本上是三者的任意组合。
我是否必须对查询进行硬编码以接受所有可能的选项,然后指定一个WHERE子句,说“WHERE $pets != ''
”或类似的内容?
我很感激任何帮助。
答案 0 :(得分:1)
首先,不要使用 mysql _ * 函数,因为已弃用
如果你需要将它们插入多行,你可以简单地使用这样的循环
foreach($pets as $pet)
{
Insert to db each single pet in different row
}
如果要将它们插入同一行,可以使用
$toInsert = implode(',',$pets);
如果您有n个列,我认为您不能使用第二个选项和宠物数量的内爆函数
$petsColumns = array();
for($i = 1; $i <= count($pets); $i++)
$petsColumns[] = "pet".$i ;
$petsColumnsString = implode(',',$petsColumns);
将它们与查询相结合
如果希望这可以帮助您尝试做什么
答案 1 :(得分:0)
这种情况有几种选择。
首先,您可以将数据存储为序列化字符串。如果您只需要使用PHP端的数据,这很好。主要的缺点是MySQL不会真正理解数据,所以在它到达PHP之前它不能过滤数据。
第二个选项是SET
数据类型列。 SET
数据类型允许您在使数据库更加了解数据的同时拥有可能选项的任意组合。 SET
中限制为64个成员。 SET
选项是最小的选项,但对列的过滤不是最佳选择。更改可能的值也有点困难。
第三个选项是将值规范化为单独的表。你会有用户表和宠物表。宠物表将具有用户ID,宠物列和表的唯一ID。然后,您只需在pet表中为用户选择的每个条目插入一行。这允许您为每个用户提供尽可能多的条目,并允许您轻松过滤数据。这通常是最好的方式。将可能的宠物值标准化为第三个表可能也是一个好主意。该表将有宠物ID,宠物名称,以及您可能想要的其他任何东西。然后,第二个表将充当用户和宠物之间的桥梁,具有用户ID,宠物ID和表的唯一ID。