簡體   English   中英

PHP MySQL的選擇框

[英]php mysql select box

我有一個選擇框,我希望循環添加到數據庫中。 它對我來說看起來不錯,但不會進入數據庫。

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

謝謝

您將需要調整選擇的名稱,使其包含數組標記[]如下所示:

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

然后在PHP中刪除數組標記,如下所示:

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

非常重要的是,在PHP中,您檢查輸入實際上是允許的值之一,而不是用戶惡意輸入的內容。 對於選擇而言,最簡單的方法是保存一個允許值的數組,然后進行檢查:

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

您需要將select標記的名稱更改為countylist[]以便PHP知道它代表一個數組:

<select name="countylist[]"/>

您要如何處理LAST_INSERT_ID()

  • 您是否已完成插入操作,現在嘗試參考?

在這種情況下,請將值存儲在變量中,因為在您第一次(新)插入之后它將被覆蓋。

  • 您是否要讓插入項進行下一個自動增量?

然后,僅不要在插入內容中命名該列,或在值中輸入NULL:

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

PS:如果您只是通過從像這樣的字符串中構建SQL, 就將 POST中的數據直接插入到數據庫中,那么您被MySQL Injection所欺騙。 轉義字符串,或使用准備好的語句...

一些指針,您需要告訴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>

可以的例子,我有一個評論:

使用mysql_real_escape()喜歡

$insertSQL = sprintf("INSERT INTO cat_pubs (pub_id, cat_id) VALUES(LAST_INSERT_ID(),". mysql_real_escape_string($s) . ")");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM