2

我有一个选择框,我希望循环添加到数据库中。它看起来对我来说是正确的,但它不会进入数据库。

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

谢谢

4

5 回答 5

3

您需要调整选择的名称以包含数组标记[],如下所示:

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

然后在 PHP 中删除数组标记,如下所示:

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

非常重要的是,在 PHP 中,您检查输入实际上是允许的值之一,而不是用户自己恶意输入的内容。对于选择,保存一个允许值的数组可能是最简单的,然后对此进行检查:

if(!in_array($s, $allowed_counties)) { /*false input, do not save in db*/}
于 2012-04-25T16:49:12.017 回答
2

您需要将 select 标记的名称更改为,countylist[]以便 PHP 知道它代表一个数组:

<select name="countylist[]"/>
于 2012-04-25T16:43:20.793 回答
1

你想用那个做LAST_INSERT_ID()什么?

  • 您是否完成了您现在尝试引用的插入?

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

  • 您是否试图让插入进行下一个自动增量?

然后不要在插入中命名列,或将 NULL 放入值中:

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

PS:如果您只是通过从此类字符串构建 SQL 将 POST 中的数据直接插入数据库,您将被 MySQL 注入攻击。转义字符串,或使用准备好的语句...

于 2012-04-25T16:40:05.910 回答
1

一些指针,您需要告诉 POST 该值是一个数组,name="countylist[]"否则您只能获得 php.ini 中最后选择的值。

此外,如果您进行多次插入,与迭代结果并在每次迭代中插入相比,为插入构建单个查询总是更快。

您还在每次迭代中选择错误的数据库:

<?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>
于 2012-04-25T16:59:53.743 回答
0

举个例子,没关系,我有一句话:

使用 mysql_real_escape() 喜欢

$insertSQL = sprintf("INSERT INTO cat_pubs (pub_id, cat_id) VALUES(LAST_INSERT_ID(),". mysql_real_escape_string($s) . ")");
于 2012-04-25T16:40:02.640 回答