我制作了一张表格,其中有商店的身份证明:
<input type="text" name="shopId">
并且有多项选择:
<select name="cars" multiple required>
在我选择了选项后,我必须将它们传递给数据库中的表;表由2列组成:shopId和car。问题是它只传递了一个选项,并且不可能像在一个商店中的两个或三个模型那样将几行添加到表中。我想我必须像数组一样传递数据。请帮帮我。
$shopId = $_GET["shopId"];
$cars = $_GET["cars"];
这是一个查询:
$query = "INSERT INTO shops (shopId, car) VALUES ($shopId, $cars)";
答案 0 :(得分:14)
我会说在给定约束的情况下,你唯一的选择是将所有选中的选项组合成一个逗号分隔的字符串(使用PHP的内置函数implode http://php.net/implode),然后插入shopID和以逗号分隔的汽车列表成新行。我会这样做:
<?php
if ($_POST) {
$cars_string = implode(', ', $_POST['cars']);
$sql = '
INSERT INTO
`my_table` (
`shopID`,
`cars`
)
VALUES (
'. $_POST['shopID'] .',
"'. $cars_string .'"
)
';
mysql_query($sql) OR die(mysql_error());
}
?>
<form method="post" action="">
Shop ID: <input type="text" name="shopID"/> -
<select name="cars[]" multiple="multiple">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="honda">Honda</option>
<option value="audi">Audi</option>
<option value="bmw">BMW</option>
</select>
<input type="submit" name="Submit"/>
</form>
考虑到您提供的限制,这是的最佳解决方案。但是,我没有看到逻辑只能为每个表单提交添加一行。这不是一个好的数据库设计,特别是从长远来看。
请注意<select>
元素的名称name="cars[]"
如何,并密切注意单词cars[]
后的开/关方括号。这将允许多个选项通过表单传递,而不是只传递一个。这是一个至关重要的区别,不应该被忽视,正如@ bart2puck在他的解决方案中提到的那样。此外,允许用户选择多个选项的浏览器最友好的方法是在multiple="multiple"
元素中使用属性<select>
。
答案 1 :(得分:-1)
您只获得1次插入,因为您将$ _GET ['cars']的值设置为您的倍数中的最后一个选定项目。实现你想要的东西设置汽车的选择名称[]。当你转到处理它时,你现在将在$ _GET数据中有一个数组。
然后循环执行插入操作。
$shopId = $_GET['shopId'];
foreach ($_GET['cars'] as $value)
{
$ins = "INSERT INSERT INTO shops (shopId, car) VALUES ($shopId, $value)";
}
如果你只能有一个插入,这似乎很奇怪,那么做一些像:
$cars = "";
foreach ($_GET['cars'] as $value)
{
$cars .= $value . ",";
}
$cars = substr($cars,0,-1); //to remove the last comma
然后
$ins = "INSERT INSERT INTO shops (shopId, car) VALUES ($shopId, $cars)";
你将最终得到一个像'本田,马自达,丰田'这样的领域,这似乎不是很有效。