ФорумПрограммированиеPHP для идиотов → Корзина(интернет-магазина) на Cookie

Корзина(интернет-магазина) на Cookie

  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 22 августа 2007 г. 9:37, спустя 11 минут 12 секунд

    ты не обращай внимание, он курит бамбук =)
    ты понял чо как делать?
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 22 августа 2007 г. 12:59, спустя 3 часа 22 минуты 14 секунд

       1.

    foreach ($_SESSION['cart'] as $pkey => $pgoods)

    2.

    {

    3.

    // $del_id — id записи, который мы передаём, чтобы удалить её

    4.

    if ($pgoods['id'] == $del_if)

    5.

    {

    6.

    $_SESSION['cart'] = delArrayElementByKey($_SESSION['cart'], $pkey);

    7.

    break;

    8.

    }

    9.

    }



    Я так понял по этому мы удаляем один из товаров?
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 22 августа 2007 г. 14:34, спустя 1 час 34 минуты 22 секунды

    Просто решил потестить


    <?php
    @session_start();
    include "db.php";
    $db = new DB("localhost","root","","medical");
    if(!$db->open())
    {
    die($db->error());
    }
    if(!$db->query("SELECT * FROM wares"))
    {
    die($db->error());
    }

    switch(@$_GET['action'])
    { //start switch GET ID
    case "add_basket":
    $_SESSION['cart'][] = array("'id' => '{$_GET['wares_id']}','count' => '2'");
    break;

    default:
    print "<a href=\"?action=basket\">Ваша корзина</a> | <a href=\"?action=clean_basket\">Очистить корзину</a><br /><br />";
    while($row = $db->fetchArray())
    {
    print "{$row['name']} - {$row['price']} руб. - <a href=\"?action=add_basket&wares_id=".$row['id']."\">Добавить в корзину</a><br />";
    }
    break;

    case "basket":
    if($_SESSION['cart'])
    {
    print $_SESSION['cart']['0']['id'];
    }
    else
    {
    print "Пуста";
    }
    break;

    case "clean_basket":
    $_SESSION['cart'] = array();
    break;
    } //end switch GET ID
    $db->freeResult();
    $db->close();
    ?>


    Добавляю в корзину,нажимаю просмотреть корзину…ошибка…

    31 .
    print $_SESSION['cart']['0']['id'];


    Undefined index: id in z:\home\light.p\www\index.php on line 31


    Поидее должно же правильно выводить значение 0-ль в массиве.
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 22 августа 2007 г. 15:32, спустя 58 минут 17 секунд

    @session_start();

    зачхэм сабак ставыш, э?

    выведи просто
    print_r($_SESSION['cart']);

    посмотри, что там

    ты почаще выводи переменные и отслеживай, что в них на каждом этапе работы скрипта
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 25 августа 2007 г. 13:09, спустя 2 дня 21 час 36 минут

        case "basket":
    if($_SESSION['cart'])
    {
    foreach ($_SESSION['cart'] as $key => $value )
    {
    foreach ($value as $a => $b)
    {
    print $b.'<br />';
    }
    }
    print "<br />";
    print_r($_SESSION['cart']);
    }
    else
    {
    print "Пуста";
    }
    break;


    Собственно код для разбора вот такого массива

    Array
    (
    [0] => Array
    (
    [0] => 'id' => '1','count' => '2'
    )

    [1] => Array
    (
    [0] => 'id' => '2','count' => '2'
    )

    )


    Код выводит следующее

    'id' => '1','count' => '2'
    'id' => '2','count' => '2'


    Что то всбрело в голову сделать так -

     print $b['9'].'<br />';


    Гы…извлек ID'ы но наркоманский способ какойто…

    Собственно надо id извлечь

    'id' => '1','count' => '2'
    'id' => '2','count' => '2'
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 26 августа 2007 г. 3:40, спустя 14 часов 31 минуту 18 секунд

    пример вывода товаров корзины построчно:

    массив у нас такой:

    $_SESSION['cart'] = array(
    0 => array('id' => 1, 'count' => 2),
    1 => array('id' => 2, 'count' => 2)
    );



    а выводить будем так:

    foreach ($_SESSION['cart'] as $key => $item)
    {
    // так вот массив $item тут и есть отдельный товар
    print 'ID товара: <b>' . $item['id'] . '</b>; его количество: <b>' . $item['count'] . '</b><br />';
    }
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 26 августа 2007 г. 11:42, спустя 8 часов 1 минуту 40 секунд

    Эм…может кто подскажет как вывести кол-во элементов в массиве…допустим…

    Array
    (
    [0] => Array
    (
    [id] => 1
    [count] => 2
    )

    [1] => Array
    (
    [id] => 2
    [count] => 2
    )

    )

    Кол-во элементов в массиве - 2

    Поюзал функцию array_count_values()
    Вроде не то…
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 26 августа 2007 г. 12:55, спустя 1 час 13 минут 43 секунды

    тебе надо вывести общее кол-во товаров в корзине?

    я ж тебе сказал, при добавлении/удалении товаров - обновляй переменную $_SESSION['cart_count']
    в ней и храни кол-во

    также можно завести $_SESSION['cart_summ'], где хранить общую сумму

    это оградит тебя от пересчитывания при каждой загрузке
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 26 августа 2007 г. 13:56, спустя 1 час 17 секунд

    thanks

    зы…уберите карму =)
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 26 августа 2007 г. 14:12, спустя 16 минут 57 секунд


    зы…уберите карму =)

    почему?
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 26 августа 2007 г. 14:29, спустя 16 минут 31 секунду



    зы…уберите карму =)

    почему?

    Кто то тупо…добавляет,захочет убавит(причем без причины).
    Лучше уж совсем её не иметь.
    Или ставить когда и кем + можно и за что
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 августа 2007 г. 14:40, спустя 10 минут 32 секунды


    Или ставить когда и кем + можно и за что


    Паш это уже есть в планах :) и скоро будет
    adw/0
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 31 августа 2007 г. 5:33, спустя 4 дня 14 часов 53 минуты


    тебе надо вывести общее кол-во товаров в корзине?

    я ж тебе сказал, при добавлении/удалении товаров - обновляй переменную $_SESSION['cart_count']
    в ней и храни кол-во

    также можно завести $_SESSION['cart_summ'], где хранить общую сумму

    это оградит тебя от пересчитывания при каждой загрузке

    md5,а как быть если магазин работает со скидками?
    Вечно деребить $_SESSION['cart_summ'] и $_SESSION['cart_count']?

    Допустим в магазине акция - купи 4-е карандаша и получи 20% скидку.
    Каждый карандаш стоит 5-ть рублей.

    Положили карандаш в корзину - Итог:5 рублей.
    массив так выглядит

    $_SESSION['cart'] = array(
    0 => array('id' => Карандаш, 'count' => 1)
    );


    Второй положили…нужно думаю перезаписать массив

    $_SESSION['cart'] = array(
    0 => array('id' => Карандаш, 'count' => 2)
    );


    Поправка!Переписывать count поверх буду с помощью array_key_exists();?
    А то будет создаваться новый массив в таком вид,что в принципе не хочется.

    $_SESSION['cart'] = array(
    0 => array('id' => Карандаш, 'count' => 1),
    1 => array('id' => Карандаш, 'count' => 1)
    );


    Продолжаем.Так,заказал я 4-е карандаша.Поидее должна скидочка 20%.Но как сказал md5 держи все в отдельной сессии.

    Как дальше то быть?
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 31 августа 2007 г. 6:34, спустя 1 час 27 секунд

    Поправка!Переписывать count поверх буду с помощью array_key_exists();?
    А то будет создаваться новый массив в таком вид,что в принципе не хочется.

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

    Продолжаем.Так,заказал я 4-е карандаша.Поидее должна скидочка 20%.Но как сказал md5 держи все в отдельной сессии.

    Как дальше то быть?

    в твоей ситуации просто:
    if ($_SESSION['cart_count'] > 4)
    $order_summ = $_SESSION['cart_summ'] * 0.8;


    математика была в школе? =)



    ps. у меня такое чувство, что из этого простого примера ты хочешь сделать полноценнейшый инет магазин со всеми возможными мульками!
    все умрут, а я изумруд
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 31 августа 2007 г. 7:21, спустя 47 минут 14 секунд

    Один магазин делает, лругой в соседнем топике игрушку браузерную :)
    Что будет следующим? )))
    from TRIAL with LOVE

Пожалуйста, авторизуйтесь, чтобы написать комментарий!