Как обновить несколько строк в таблице - PullRequest
0 голосов
/ 30 апреля 2018

Я делаю корзину для интернет-магазина, используя PHP и MySQL. И сейчас я работаю над тележкой. По сути, до сих пор я могу получать данные из БД и показывать их в корзине так же, как это изображение:

capture

А сейчас я работаю над обновлением количества продуктов. Например, пользователь должен иметь возможность установить количество продуктов от 1 до 2, от продуктов от 2 до 3 и от продуктов от 3 до 4.

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

Итак, что я сделал, это было:

<select name='quantities[]'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
</select>

И действие этой формы выглядит так:

$cart_id = $_GET['cart_id'];
if(isset($_POST['update'])){
    foreach($_POST['quantities'] as $quantities)
    {
        $insert_qty = "UPDATE cart SET qty = '$quantities' WHERE cart_id = '$cart_id'";
        $run_qty = mysqli_query($con,$insert_qty);
        if($run_qty)
        {
            echo '<META HTTP-EQUIV="Refresh" Content="0; URL=cart.php">';    
        }else{
            die(mysqli_error($con));
        }
    }
}

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

Например, если вы установите количество последнего продукта на 5, в конечном итоге будет установлено число 5 для всех продуктов, имеющихся в этой корзине.

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

Я действительно ценю любую идею, предложение или решение этого вопроса,

Заранее спасибо ...

А также вот как я получаю данные (только для просмотра):

$get_add = "SELECT * FROM cart WHERE cart_id = '$cart_id'";
$run_add = mysqli_query($con,$get_add);
$cart_items = [];
$total_price_to_pay = 0;
while ($row_results = mysqli_fetch_array($run_add)){
    $item = array(
        'table_id' => $row_results['table_id'],
        'cart_id' => $row_results['cart_id'],
        'pro_id' => $row_results['product_id'],
        'pro_title' => $row_results['product_title'],
        'pro_price' => $row_results['product_price'],
        'pro_img' => $row_results['product_image'],
        'pro_supplier' => $row_results['product_supplier'],
        'qty' => $row_results['qty'],
        'cart_ip' => $row_results['cart_ip'],
        'pro_total' => $row_results['qty']*$row_results['product_price'],
    );
    $total_price_to_pay +=  $row_results['qty']*$row_results['product_price'];
    $cart_items[] = $item;
}
foreach ($cart_items as $cart) {
        echo $cart['pro_title'] etc ;
}

1 Ответ

0 голосов
/ 30 апреля 2018

Вам необходимо отправить product_id со всеми количествами (Пожалуйста, замените value="<?php echo $item['pro_id']; ?>" фактической переменной, которая может установить правильное значение product_id в скрытом поле каждого элемента корзины / продукта ИЛИ, если она уже есть, вы можете удалить это скрытое поле и используйте его вместо этого):

<input type="hidden" name="product_ids[]" value="<?php echo $item['pro_id']; ?>" />
<select name='quantities[]'>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='3'>3</option>
    <option value='4'>4</option>
    <option value='5'>5</option>
</select>

И затем на стороне действия используйте это product_id в вашем запросе на обновление (что также требует изменения в вашей таблице БД, если product_id уже не существует):

$cart_id = $_GET['cart_id'];
if(isset($_POST['update'])){
    foreach($_POST['quantities'] as $index => $quantities)
    {
        $insert_qty = "UPDATE cart SET qty = '$quantities' WHERE cart_id = '$cart_id' AND product_id = '".$_POST['product_ids'][$index]."'";
        $run_qty = mysqli_query($con,$insert_qty);
        if($run_qty) {
            echo '<META HTTP-EQUIV="Refresh" Content="0; URL=cart.php">';    
        } else {
            die(mysqli_error($con));
        }
    }
}

Надеюсь, это решит вашу проблему ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...