2014-09-12 3 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

Вставить или обновить? –

+0

@sgt insert, извините, я сказал обновление, но я имел в виду вставку – proPhet

ответ

2

В этом случае explodeявляется лучшим способом. Попробуйте использовать его вместе с list.

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

Это прост в использовании с подготовленными операторами. – bansi

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

0

Предполагая, что ваш 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); 
    } 
} 
Смежные вопросы