Как передать 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>";