Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 08.04.2011, 17:18   #1
bboyb-rock
 
Регистрация: 28.01.2011
Сообщений: 7
Репутация: 10
По умолчанию Работа с циклами, Не обнавляется кол-во товара в корзине

Здраствуйте всем! Может кто поможет или подскажет.
Переделываю чуть корзину, вот такая проблема при обновлении обнавляются все товары с одинаковым id не зависимо какой у него размер,
т.е если id=1 а размер=M и id=1 а размер=XL при изменении кол-ва первому и второму товара присваевается одно и тоже значение.
Как сделать чтобы обнавлялось как товар в целом (размер с id)
вот скрипт
Код:

if (isset($_POST["update"]))
{
   foreach ($_POST as $keys => $val)
      if (strstr($keys, "count_"))
      {
      if ($val > 0)
         {
          for ($i=0; $i<count($_SESSION["gids"]); $i++)
              {
              if ($_SESSION["gids"][$i]["id"] == str_replace("count_","",$keys))
                 {
$_SESSION["counts"][$i] = floor($val);
                  }
               }
          }
else
   {
    $i=0;
    while ($_SESSION["gids"][$i]["id"] != str_replace("count_","",$keys) && $i<count($_SESSION["gids"])) $i++;
   $_SESSION["gids"][$i]["id"] = 0;
   }
   }
}

$_SESSION["gids"] выглядит так
Код:

$_SESSION["gids"][] = array("id"=>$_GET["add2cart"], "prod_size"=>$_GET["prod_size"]);

$_SESSION["counts"] так
Код:

$_SESSION["counts"][] = 1;

bboyb-rock вне форума   Ответить с цитированием
Старый 08.04.2011, 18:16   #2
Andkorol
Профессионал
 
Регистрация: 31.05.2010
Сообщений: 3,252
Репутация: 1064
По умолчанию

Цитата:
Сообщение от bboyb-rock Посмотреть сообщение
вот такая проблема при обновлении обнавляются все товары с одинаковым id не зависимо какой у него размер,
т.е если id=1 а размер=M и id=1 а размер=XL при изменении кол-ва первому и второму товара присваевается одно и тоже значение.
Изначально неверно спроектировано - не должно быть несколько товаров "с одинаковым id".

ID - он на то и ID, чтоб быть уникальным.
Только ID должен определять сам товар - а не свойства товара, или их комбинации (размер, цвет, вес, вкус...).

Так что - или переделывать логику(желательно), или в качестве уникального идентификатора товара использовать комбинацию вашего "типа id" и размера через разделитель(если только такая комбинация действительно будет уникальной для всех товаров).

Например: 123_M или 345_XL (комбинация типа id_size)

Ну а при обработке данных в корзине - опять разделять эти данные для поиска нужной комбинации ("id" + размер) в БД.

Но лучше переделать.
Andkorol вне форума   Ответить с цитированием
Старый 08.04.2011, 18:28   #3
bboyb-rock
 
Регистрация: 28.01.2011
Сообщений: 7
Репутация: 10
По умолчанию

а если зделать номер по порядку в списке корзины и сделать кол-во.
Или вообще я планировал так, сделать условие типо такого
if ($_SESSION["gids"][$i]["id"] == str_replace("count_","",$keys) && $_SESSION["gids"][$i]["prod_size"] == str_replace("count_","",$keys))
только не знаю как правильно его написать
bboyb-rock вне форума   Ответить с цитированием
Старый 08.04.2011, 19:04   #4
Andkorol
Профессионал
 
Регистрация: 31.05.2010
Сообщений: 3,252
Репутация: 1064
По умолчанию

Цитата:
Сообщение от bboyb-rock Посмотреть сообщение
а если зделать номер по порядку в списке корзины и сделать кол-во.
Ну - можно и так, только в любом случае нужно привязывать это количество не к какому-то "номеру по порядку в списке корзины"(который может изменяться - напр. пользователь удалил 2 товара и добавил ещё 5 других) - а именно к паре "id - размер":
PHP код:
$_SESSION["gids"][] = array('id' => 123'size' => 'M''count' => 'ваше кол-во');

// добавление кол-ва опред. товара опред. размера
$add_id    'ID_товара';
$add_size 'размер';
$add_count 'сколько добавить';
if(!empty(
$_SESSION['gids'])){
    
$count count($_SESSION['gids']);
    for(
$i 0$i $count$i++){
        if((
$_SESSION['gids'][$i]['id'] == $add_id) && ($_SESSION['gids'][$i]['size'] == $add_size)){
            
$_SESSION['gids'][$i]['count'] += $add_count;
        }
    }

Andkorol вне форума   Ответить с цитированием
Старый 08.04.2011, 19:14   #5
bboyb-rock
 
Регистрация: 28.01.2011
Сообщений: 7
Репутация: 10
По умолчанию

Да я так и хотел только кол-во у меня в отдельной сессии записано параллельно и если пользователь удалил 2 товара и добавил ещё 5 других тогда те кол-ва которые были удалины принимают нулевое значение и товары принимают нулевое значение, т.е. не выводятся.
bboyb-rock вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с циклами серг Assembler 5 22.04.2010 21:34
Работа с циклами DOJ Общие вопросы C/C++ 3 27.08.2009 18:39
VBA работа с циклами melani Помощь студентам 2 28.03.2009 11:26
Работа с циклами 2. Вопрос SPQR Помощь студентам 5 27.10.2007 11:20
Работа с циклами. Надюха Помощь студентам 3 26.10.2007 09:29


07:31.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru