Некорректно отрабатывает код

238
15 декабря 2019, 08:20

Пытаюсь создать PHP корзину, но он ведет себя некорректно. На этапе добавления присутствует проверка, если товар существует в $_SESSION, то просто добавить к нему единицу. Если же товар отсутствует, то полностью записать информацию. Проблема в том, что данный код, а точнее, функция set() просто добавляет в сессию id и количество предмета, а сумму игнорирует. И как бы сделать так, чтобы при добавлении товара, каждый раз создавалась отдельная строка в массиве $_SESSION? Далее код:

class Cart {
        public function init(){
                if(!isset($_SESSION)){
                        session_start();
                      }
                      if(!isset($_SESSION['card_items'])){
                        $_SESSION['card_items'] = array();
                      }
                    }
        public function set($id, $price){
          if($_SESSION['card_items']['id'] = $id)
          {
            $_SESSION['card_items']['qty']++;
          }
          else
          {
            $_SESSION['card_items']['id'] = $id;
            $_SESSION['card_items']['price'] = $price;
            $_SESSION['card_items']['qty'] = 1;
          }
        }
        public function get(){
                foreach ($_SESSION as $temp){
                        //echo $temp."<br />";
                        print_r($temp);
                }
        }
}
$cart = new Cart;
$cart->init();
$cart->set(5, 2000);
$cart->get();

Бывает. Проблема с присвоением была. Здесь я не проверял условие, а присваивал переменную.

$_SESSION['card_items']['id'] = $id

а надо

$_SESSION['card_items']['id'] === $id

Минус одна проблема. Теперь как создать присвоение каждому товару новую строку в массиве?

Answer 1
class Cart {
    public function __constructor()
    {
        if (!isset($_SESSION)) {
            session_start();
        }
        if (!isset($_SESSION['card_items'])) {
            $_SESSION['card_items'] = [];
        }
    }
    public function set($id, $price)
    {
        if (array_key_exists($id, $_SESSION['card_items'])) {
            $_SESSION['card_items'][$id]['qty']++;
        } else {
            $_SESSION['card_items'][$id] = ['price' => $price, 'qty' => 1];
        }
    }
    public function get()
    {
        foreach ($_SESSION as $temp) {
            //echo $temp."<br />";
            print_r($temp);
        }
    }
}
$cart = new Cart();
$cart->set(5, 2000);
$cart->set(5, 2000);
$cart->get();

Получаем

Array ( [5] => Array ( [price] => 2000 [qty] => 2 ) )

READ ALSO
PHP Slim Rest Api

PHP Slim Rest Api

Решил написать rest api для своего приложенияВыкидывает ошибку:

231
503 Service Unavailable при большем массиве PHP

503 Service Unavailable при большем массиве PHP

проблема в следующемПри генерации массива в цикле while получаю ошибку 503, в массив записывается около 100 000 строк

198
Как настроить .htaccess?

Как настроить .htaccess?

Есть связка Fastcgi+Apache на Win 2003

221