我有一个选择框,我希望循环添加到数据库。它看起来对我来说,但它不会进入数据库。
<select name="countylist" style="height:300px;" class="multiple" multiple="multiple" id="box2View">
<option value="11">Beer Gardens</option><option value="10">Historic Bars</option>
<option value="8">Live Music</option><option value="1">Night Clubs</option>
<option value="4">Pubs Serving Food</option><option value="6">Sports Bars</option>
</select>
SQL:
foreach($_POST["countylist[]"] as $s) {
$insertSQL = sprintf("INSERT INTO cat_pubs (pub_id, cat_id)
VALUES(LAST_INSERT_ID(),". $s . ")");
mysql_select_db($database_localhost, $localhost);
$Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());
}
由于
答案 0 :(得分:3)
您需要调整选择的名称以包含数组标记[]
,如下所示:
<select name="countylist[]"...
然后在PHP中删除数组标记,如下所示:
foreach($_POST["countylist"] as...
非常重要的是,在PHP中,您检查输入实际上是允许的值之一,而不是用户恶意输入的内容。对于选择,最简单的方法是保存一组允许的值,然后检查:
if(!in_array($s, $allowed_counties)) { /*false input, do not save in db*/}
答案 1 :(得分:2)
您需要将select标记的名称更改为countylist[]
,以便PHP知道它代表一个数组:
<select name="countylist[]"/>
答案 2 :(得分:1)
你想用LAST_INSERT_ID()
做什么?
在这种情况下,将值存储在变量中,因为在第一次(新)插入后它将被覆盖。
然后只是不要在插入中命名列,或者在值中添加NULL:
INSERT INTO cat_pubs (cat_id) VALUES(". $s . ")");
PS:如果您只是通过从类似的字符串构建SQL将数据从POST直接插入到数据库中,那么将被MySQL注入攻击。逃避字符串,或使用准备好的声明......
答案 3 :(得分:1)
有些指针,你需要告诉POST这个值是一个带有name="countylist[]"
的数组,否则你只能得到php中最后选择的值。
此外,如果您进行多次插入,则为迭代构建单个查询总是更快,而不是迭代结果并插入每次迭代。
您还在每次迭代时选择数据库是错误的:
<?php
//connect
mysql_connect('localhost','user','pass');
//select your db
mysql_select_db('database');
//is posted
if($_SERVER['REQUEST_METHOD']=='POST'){
//build query for a single insert
$query = 'INSERT INTO cat_pubs (pub_id, cat_id) VALUES ';
foreach($_POST["countylist"] as $s) {
$query .='("","'.mysql_real_escape_string($s).'"),';
}
//trim the last ,
$query = rtrim($query,',');
}
//do query
$result = mysql_query($query) or die(mysql_error());
?>
<form method="POST" action="">
<!-- tell POST that countylist is an array -->
<select name="countylist[]" style="height:300px;" class="multiple" multiple="multiple" id="box2View">
<option value="11">Beer Gardens</option>
<option value="10">Historic Bars</option>
<option value="8">Live Music</option>
<option value="1">Night Clubs</option>
<option value="4">Pubs Serving Food</option>
<option value="6">Sports Bars</option>
</select>
<p><input type="submit" value="Submit"></p>
</form>
答案 4 :(得分:0)
那可以举个例子,我有一句话:
使用mysql_real_escape()之类的
$insertSQL = sprintf("INSERT INTO cat_pubs (pub_id, cat_id) VALUES(LAST_INSERT_ID(),". mysql_real_escape_string($s) . ")");