2012-04-25 74 views
2

我有一个选择框,我希望循环添加到数据库。它看起来很适合我,但它不会进入数据库。php mysql选择框

<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

尝试'的foreach($ _ POST [ “countylist”])' – Armatus 2012-04-25 16:37:15

+0

没有不要么反正工作,谢谢,但我敢肯定它是一个数组 – 2012-04-25 16:39:10

+0

在HTML – BeRecursive 2012-04-25 16:41:14

回答

3

您需要调整选择的名称包括所述阵列的标记[]像这样:

<select name="countylist[]"... 

然后在PHP删除数组标记像这样:

foreach($_POST["countylist"] as... 

什么是非常重要的是,在PHP中,您检查输入实际上是允许的值之一,而不是用户恶意输入的内容。对于选择它可能是最简单的持有允许值的数组,然后核对此:

if(!in_array($s, $allowed_counties)) { /*false input, do not save in db*/} 
+0

谢谢,这工作 – 2012-04-25 16:56:29

0

这就是确定了一个例子,我有一个备注:

使用mysql_real_escape()之类

1

是什么你试着去做那LAST_INSERT_ID()

  • 你已经完成了一个插入之前,你现在试图引用?

在这种情况下,将值存储在变量中,因为它会在第一次(新)插入后被覆盖。

  • 您是否想要插入下一个自动增量?

然后就不要在您输入名字列,或把空的值:

INSERT INTO cat_pubs (cat_id) VALUES(". $s . ")"); 

PS:你得到由MySQL注入黑客攻击,如果你只是插入来自POST数据通过像这样的字符串构建SQL,直接进入数据库。转义字符串,或使用事先准备好的声明...

+0

我现在只是测试,谢谢虽然我的意见,我会改变后测试 – 2012-04-25 16:41:35

2

您需要选择标签的名称更改为countylist[]使PHP知道它代表一个数组:

<select name="countylist[]"/> 
1

一些指点,你需要告诉邮报,该值与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>