2013-12-20 5 views
1

Привет, ребята, после нескольких испытаний и исследований, которые еще не смогли это сделать.PDO Как вставить несколько данных в базу данных из массива?

я получил этот массив:

<td><textarea name="item[]" value=""></textarea></td> 
<td><textarea name="description[]" value=""></textarea></td> 
<td><input type="text" name="qty[]" value="" /></td> 
<td><input type="text" name="amount[]" value="" /></td> 

и мои методы здесь:

public function insertRecord($param1, $param2, $param3, $param4, $args1, $args2, $args3, $args4) { 

    $query = $this->db->prepare('INSERT INTO `request_to_purchase` (`requestedby`, `date`, `jobtitle`, `supervisor`, `notes`) VALUES (?, NOW(), ?, ?, ?)'); 

    $query->bindValue(1, $param1, PDO::PARAM_STR); 
    $query->bindValue(2, $param2, PDO::PARAM_STR); 
    $query->bindValue(3, $param3, PDO::PARAM_STR); 
    $query->bindValue(4, $param4, PDO::PARAM_STR); 

    try { 

     $query->execute(); 

     $lastIDInserted = $this->db->lastInsertId(); 

     $row = $query->rowCount(); 

     if(count($row) > 0) {    
      $this->insertItem($lastIDInserted,$args1, $args2, $args3, $args4); 
     } else {     
      return false; 
     } 

    } catch(PDOException $e) { 

     die($e->getMessage()); 

    } 

} 

public function insertItem($arg1, $arg2, $arg3, $arg4, $arg5) { 



    $query = $this->db->prepare('INSERT INTO `ordered_item` (`rtp_id`, `item`, `description`, `qty`, `amount`, `date`) VALUES (?, ?, ?, ?, ?, NOW())'); 

    $query->bindValue(1, $arg1); 
    $query->bindValue(2, $arg2); 
    $query->bindValue(3, $arg3); 
    $query->bindValue(4, $arg4); 
    $query->bindValue(5, $arg5); 

    try { 

     $query->execute(); 

     $row = $query->rowCount(); 

     if(count($row) > 0){ 
      return true; 
     }else { 
      return false; 

     } 
    } catch(PDOException $e) { 
     die($e->getMessage()); 
    } 

} 

я имел обыкновение иметь четыре петли, которые я считаю, это неправильно практика.

for($a = 0; $a < count($item); $a++) { 

    $test1 = $item[$a]; 
} 

for($b = 0; $b < count($description); $b++) { 

    $test2 = $description[$b]; 
} 

for($c = 0; $c < count($qty); $c++) { 

    $test3 = $qty[$c]; 
} 

for($d = 0; $d < count($amount); $d++) { 

$test4 = $amount[$d]; 
} 

Как вставить эти несколько данных в таблицу заказанных элементов?

ответ

1

Предположит, что $args1= $_POST['item'],$args2 = $_POST['description'],$args2 = $_POST['qty'],$args2 = $_POST['amount'] является значение массива, то измените следующую часть, как показано ниже:

if(count($row) > 0) {    
     $argsLen = sizeof($args1); 
     for($i=0;$i<$argsLen;$i++){ //loop array and insert 
      $this->insertItem($lastIDInserted,$args1[$i], $args2[$i], $args3[$i], $args4[$i]); 
     } 
    } else {     
     return false; 
    } 

Я надеюсь, что это поможет вам

+0

hi nouphal! Wow! он работает! ваш awesome !, но проблема в том, когда вхождение происходит в базу данных, я вводим два значения для четырех полей, чтобы он дал мне как item1 descp1 qty1 amount1 и пустой элемент blank desc blank qty blank amount и item2 desc2 qty2 amount2 >> >> как вы можете видеть, он вставил две данные, но он дал мне чистые данные, поэтому он вставил 3 данных, item1 blank item и item3 – user3114394

0

Чтобы решить проблему заготовки вставки после первого значения вы должны изменить цикл for для увеличения $ i до того, как он проверит его против предела, похоже, что он сравнивает его в первый раз, в то время как $ i все еще установлен в 0, поэтому попробуйте изменить его на:

for ($i = 0; $i < $argsLen; ++$i) 

Надеюсь, это поможет.

Смежные вопросы