php mysql选择框

时间:2012-04-25 16:35:41

标签: 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());
}  

由于

5 个答案:

答案 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) . ")");