2014-09-12 440 views
0

舉一個例子,假設我有三個表單文本inputs,其全部名稱爲item[]。這些inputs中的每一個都有由逗號分隔的兩個數字組成的value將多個數組插入到mysql中

<input type="text" name="item[]" value="8,6" /> 
<input type="text" name="item[]" value="6,1" /> 
<input type="text" name="item[]" value="9,4" /> 

value字段中的第一個數字涉及一種id在MySQL數據庫表。第二個是會更新另一個字段的值。

我已經使用:

foreach($_POST['item'] as $items){ 
    echo $items. "<br/>"; 
} 

這將顯示像這樣的值:

8,6 
6,1 
9,4 

我現在想利用這些值,並插入到一個表與所述第一值讀取的數據(值爲id)。

完成此操作的最佳方法是什麼?

+0

insert or update? – 2014-09-12 11:38:49

+0

@sgt插入,對不起,我說更新,但我的意思是插入 – proPhet 2014-09-12 11:39:59

回答

2

在這種情況下,explode的最佳途徑。嘗試使用它與list一起。

foreach($_POST['item'] as $item){ 
    list($id, $value) = explode(',', $item); 
} 
+0

這很容易與預處理語句一起使用。 – bansi 2014-09-12 12:25:35

0
foreach($_POST['item'] as $items){ 
     $item = explode(",",$items); 
     $id = $item[0]; 
     $otherfield = $item[1]; 

//YOUR SQL QUERY with $id and $otherfield 
} 
0

試試這個 -

$values = array(); 
foreach($_POST['item'] as $items){ 
    $values[] = "(".$items.")"; 
} 

$sql = "insert into `tablename` (`field1`, `field2`) values ".implode(',', $values); 
0

這裏是一個沒有foreach的單線程。

//Warning this is unsafe to trust posted data. 
$query = "INSERT INTO yourtable (id, otherfield) VALUES " . implode(',', array_map(function($v){return "($v)"; },$_POST['item'])); 

注意:絕不信任發佈的數據。在更新到數據庫之前,您應始終對數據進行清理和驗證。也可以嘗試使用預準備語句儘可能

參考:array_map

+0

我只在使用準備好的語句時發佈或獲取數據,謝謝,我會給它一個bash – proPhet 2014-09-12 11:57:50

0

假設你id是你的表的主鍵,我會使用一個有效的方法來添加或更新選定行與特定ID。如前所述,您應該使用explode和list的組合來提取您需要的內容並構建sql查詢。

//assuming you don't already have a db connection 
//fill constants yourself with apropriate connection info 
$dbConnection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

foreach($_POST['item'] as $item){ 
    list($id, $value) = explode(',', $item); 

    //prevent inserting empty values (assuming that 0 is not allowed) 
    if (!empty($id) && !empty($value)) { 

     //remember escaping - prevent from SQL injection! 
     $id = mysqli_real_escape_string($id); 
     $value = mysqli_real_escape_string($value); 

     $sql = "INSERT INTO table (id, value) VALUES ('{$id}', '{$value}') 
     ON DUPLICATE KEY UPDATE value='{$value}'"; 
     mysqli_query($dbConnection, $sql); 
    } 
}