2012-04-25 101 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>