Как передать 3 аргумента в array_combine, это возможно?

У меня есть три переменные ($product_id, $size_id, $ amount), которые берутся из "form" и вставляют в таблицу pending_order. Поэтому я использовал функцию array_combine, чтобы объединить три переменные, а затем использовать для каждого цикла для вставки нескольких записей. но это показывает ошибку

Msgstr "Предупреждение: array_combine() ожидает ровно 2 параметра, 3 заданных".

Так что я полностью застрял в том, что любой другой способ передать эти три переменные в массиве, чем использовать для каждого цикла для вставки записи.

<form method="post" action="">

<input type="hidden" name="ip_address" value="<?php echo $ip_address; ?>">   
<input type="hidden" name="product_id[]" value="<?php echo $product_id; ?>">   
<input type="hidden" name="size_id[]" value="<?php echo $size_id; ?>"> 
<input type="hidden" name="quantity[]" value="<?php echo $quantity; ?>" >
<input type="submit"  name="submit" value="Confirm Your Order"> 

</form>

<?php
if (isset($_POST['submit'])) {
$product_id = $_POST['product_id'];
$size_id = $_POST['size_id'];
$ip_address = $_POST['ip_address'];
$quantity = $_POST['quantity'];

$array = array_combine($product_id, $size_id, $quantity);

foreach ($array as $h => $v) {

$insert_pending = "INSERT INTO pending_orders 
(cus_id,product_id,size_id,quantity,ip_address) VALUES 
('$cus_id','$h','$v','$quantity','$ip_address')";

 $run2 = mysqli_query($con, $insert_pending);

 }

if($run2===true){

 echo "<script>window.open('thanku.php','_self')</script>";
  }else{
 echo "<script>alert('Sorry, Try Again')</script>";

 }


 }

1 ответ

Решение

Вы можете просто перебрать один из массивов, используя индекс из этого массива для доступа к соответствующим значениям из других массивов:

foreach ($product_id as $index => $h) {
    $v = $size_id[$index];
    $q = $quantity[$index];
    $insert_pending = "INSERT INTO pending_orders 
                            (cus_id,product_id,size_id,quantity,ip_address) VALUES 
                            ('$cus_id','$h','$v','$q','$ip_address')";
    $run2 = mysqli_query($con, $insert_pending);
}

Обратите внимание, что $run2 будет иметь статус только последнего INSERT запрос. Так что, если все они потерпят неудачу, но последний вы не будете знать. Вы можете попробовать добавить это в цикл после запроса:

if (!$run2) break;

а затем в сообщении об ошибке вы можете указать, какая вставка не удалась, например,

echo "<script>alert('Insert failed for id $cus_id on data $h, $v, $q')</script>";
Другие вопросы по тегам