2014-09-12 113 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); 
    } 
}