Код удаления из корзины не работает

Я работаю над упражнением по электронной коммерции - добавляю товары в корзину, а затем удаляю их. Элементы/корзина - это идентификатор элемента и значение количества, хранящиеся в сеансе и управляемые в функциях контроллера - из базы данных ничего не извлекается, кроме идентификатора продукта. Добавление в корзину или обновление работает, а удаление — нет.

Из того, что я могу сказать, функции добавления или удаления просты - одна должна увеличивать значение, другая уменьшать. Код ниже. Есть идеи?

Удалить из корзины:

    public function remove_from_basket($item_id)
    {
        // remove an item from a cart
        $quantity = $this->session->userdata($item_id);
        $quantity -= $this->session->post('qty');
        $this->session->set_userdata($item_id, $quantity);
        redirect('/eCommerceItems/eCommerce_basket');
    }      

Called from
    <?php 
         $total=0;
         foreach ($items as $item) 
         {
            $temp = $item['price'] * $this->session->userdata($item['id']);
            $total += $temp;
            if ($this->session->userdata($item['id']) > 0)
            {
               echo "<div class='item'>
                  <div class='description'>
                     <p>Name: {$item['name']}</p>
                     <p>Price: {$item['price']}</p>
                     <p>Quantity: {$this->session->userdata($item['id'])}</p>
                     <form action '/eCommerceItems/remove_from_basket/{$item['id']}' method='post'>
                        <select name='qty'>";
                        for($i=1;$i <= $this->session->userdata($item['id']);$i++)
                        {
                           echo "<option>{$i}</option>";
                        }
                        echo "</select>
                        <input type='submit' value='Remove'>
                        </form>
                     </div> 
                  </div>";
            }
         }

Добавить в корзину

public function add_to_basket($item_id)
{
    //Add an item to a cart
    $quantity = $this->session->userdata($item_id);
    $quantity += $this->input->post('qty');
    $this->session->set_userdata($item_id, $quantity);
    redirect('/eCommerceItems');
}

Звонил из:

<?php
                foreach($items as $item)
                {
                    echo "<div class='item'>
                        <div class='description'>
                            <p>Name: {$item['name']}</p>
                            <p>Description: {$item['description']}</p>
                            <p>Price: \${$item['price']}</p>
                            <p>Quantity Available: {$item['quantity']}</p>
                            <p>Item ID is: {$item['id']}</p> 
                            <form action='/eCommerceItems/add_to_basket/{$item['id']}' method='post'>
                                <select name='qty'>
                                    <option>1</option>
                                    <option>2</option>
                                    <option>3</option>
                                    <option>4</option>
                                    <option>5</option>
                                </select>
                                <input type='submit' value='Add to basket'>
                            </form>
                        </div>
                    </div>";
                }
            ?>

person perniciouscaffeine    schedule 24.02.2017    source источник
comment
Спасибо за все предложения. Похоже, это была проблема с сгенерированной HTML-кнопкой, которая не активировалась в Opera должным образом, а не с кодом PHP. У меня нет основной причины (возможно, пробелы или форматирование), но переписывание сегмента html с нуля исправило действие кнопки.   -  person perniciouscaffeine    schedule 28.02.2017


Ответы (2)


В вашем коде у вас есть:

$quantity -= $this->session->post('qty');

Это должно быть:

$quantity -= $this->input->post('qty');
person Chris Cousins    schedule 24.02.2017

Попробуйте... Также нужно учитывать, что значение ниже 0, как я полагаю?

public function remove_from_basket($item_id)
    {
        // remove an item from a cart
        $increment = $this->input->post('qty');
        $quantity = $this->session->userdata($item_id);

        $newQuantity = $quantity - $increment;

        if ($newQuantity > 1) {
            $this->session->set_userdata($item_id, $Quantity);
        } else {
            $this->session->unset_userdata($item_id);
        }

    }      

Если у вас все еще есть проблемы, я предлагаю print_r($variable); die; каждый шаг (или использовать функцию регистрации CI) и посмотреть, соответствуют ли ваши значения тому, что вы думаете?

Иногда проще написать все более просто, чтобы заставить его работать...

person Brian Ramsey    schedule 24.02.2017