Как вставить данные из for / foreach в разные строки? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть следующая транзакция:

Array
(
    [item_name1] => Battleflied 3
    [item_number1] => 3
    [quantity1] => 1
    [mc_gross_1] => 29.00
    [item_name2] => PHP BOOK
    [item_number2] => 4
    [quantity2] => 1
    [mc_gross_2] => 19.00
    [num_cart_items] => 2
)

Используя for, я получаю определенные значения из Array и присваиваю их своим собственным переменным

for($i = 1;$i <= $_POST['num_cart_items'] ;$i++){

   $item_number= intval($_POST['item_number' . $i]);
   $item_quantity= intval($_POST['quantity' . $i]);
   $item_mc_gross= intval($_POST['mc_gross_' . $i]);

   printf("DEBUG: item:%d quantity:%d price:%d<br>", $item_number, $item_quantity, $item_mc_gross);

}

Печатьследующий результат:

DEBUG: item:3 quantity:1 price:29
DEBUG: item:4 quantity:1 price:19

Другой способ восстановить / получить значения из Array - использовать foreach таким образом:

$i = 1;
$cart_items = array();   
while(isset($_POST['item_number' . $i])){
  $item_number = isset($_POST['item_number' . $i]) ? $_POST['item_number' . $i] : '';   
  $item_name = isset($_POST['item_name' . $i]) ? $_POST['item_name' . $i] : '';   
  $quantity = isset($_POST['quantity' . $i]) ? $_POST['quantity' . $i] : '';  
  $mc_gross = isset($_POST['mc_gross_' . $i]) ? $_POST['mc_gross_' . $i] : 0;
  $current_item = array(
    'item_number' => $item_number,   
    'item_name' => $item_name,   
    'quantity' => $quantity, 
    'mc_gross' => $mc_gross 
  );   
  array_push($cart_items, $current_item);   
  $i++;   
}
foreach($cart_items as $item){
  echo $item['item_number'];
  echo '<br><br>';
  echo $item['item_name'];
  echo '<br><br>';
  echo $item['mc_gross'];
}

Я получаю то же самоеРезультаты, как при использовании for, так и при использовании foreach

Можете ли вы сказать мне, как я могу вставить данные, которые имеют for / foreach, в разные строки, например:

id_transaction (primary)    id_product    quantity    price
     .......                    3            1        19.00     
     .......                    4            1        29.00 

Я использую объектно-ориентированные подготовленные операторы MySQLi

 $stmt = $con->prepare("INSERT INTO transaction (id_product, quantity, price) VALUES (?,?,?)");
$stmt->bind_param("...",$...);
$stmt->execute();

1 Ответ

0 голосов
/ 03 марта 2019

Используя ваш второй подход (я думаю, что создание массива намного чище), вы можете сделать что-то вроде этого:

$stmt = $con->prepare("INSERT INTO transaction (id_product, quantity, price) VALUES (?,?,?)");
foreach($cart_items as $item){
    $stmt->bind_param("iii", $item['item_number'], $item['quantity'], $item['mc_gross']);
    $stmt->execute();
}

Используя ваш первый подход, вы можете сделать что-то вроде этого:

$stmt = $con->prepare("INSERT INTO transaction (id_product, quantity, price) VALUES (?,?,?)");
for($i = 1;$i <= $_POST['num_cart_items'] ;$i++){
    $stmt->bind_param("iii", $_POST['item_number' . $i], $_POST['quantity' . $i], $_POST['mc_gross_' . $i]);
    $stmt->execute();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...