При оформлении заказ приходит пустой товар


Доброго времени суток!

Заметил такую проблему.
При создании очередного ресурса-товара и при его покупке на почту и в панель управления не поступает информация о заказанном товаре. Ниже прилагаю скриншот, а также логи, которые нашел в журнале ошибок:



[2012-10-22 16:10:09] (ERROR @ /index.php) Error 21S01 executing statement:
INSERT INTO `modx_ms_modOrderedGoods` (`gid`, `oid`, `num`, `price`, `weight`, `sum`, `data`) VALUES (68, 43, 1, 650, 0, 650, '[]')
Array
(
[0] => 21S01
[1] => 1136
[2] => Column count doesn't match value count at row 1
)

[2012-10-22 16:10:09] (ERROR @ /index.php) Error 42000 executing statement:
UPDATE `modx_ms_modOrders` SET `sum` = 650,`weight` = 0 WHERE `id` = 43
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '345 WHERE `id` = 43' at line 1

Где может быть косяк?
22 october 2012, 16:47    Vaha30   
0    517 0

Comments (22)

  1. Василий Наумкин 22 october 2012, 17:28 # 0
    Очевидно, что структура таблиц у вас не соответствует ожидаемой для miniShop.

    Нужно привести .modx_ms_modOrderedGoods к такому виду:

    CREATE TABLE IF NOT EXISTS `modx_ms_modOrderedGoods` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `gid` int(11) NOT NULL,
    `oid` int(11) NOT NULL,
    `num` int(11) NOT NULL DEFAULT '1',
    `price` float(10,2) NOT NULL,
    `weight` float(10,3) NOT NULL DEFAULT '0.000',
    `sum` float(10,2) NOT NULL,
    `data` text NOT NULL,
    PRIMARY KEY (`id`),
    KEY `gid` (`gid`,`oid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    1. Vaha30 23 october 2012, 11:32 # 0
      Василий, к сожалению проблема осталась. Делал все как Вы описали выше. В phpMyAdmin удалил таблицу modx_ms_modorderedgoods, затем создал её заново с теми параметрами, что Вы указали. Хотя при проверке таблицы перед заменой я не нашел каких-либо различий по структурам от той, что была изначально, и которая стала.
      1. Vaha30 23 october 2012, 12:15 # 0
        Нашел таки бяку: когда попытался указать нулевой вес либо целое значение — то все гуд, товар передается в «заказы», а вот когда указываешь с плавающей запятой, например 0.2345 кг., то возникает ошибка в базе. Может сменить тип столбца `weight` в таблице?
        1. Василий Наумкин 24 october 2012, 06:29 # 0
          У вас поди какой-нибудь Denwer?

          Разделитель чисел с плавающей точкой зависит от системы, а не магазина. Уже писали про заморочку с запятой вместо точки на windows.
          1. Vaha30 24 october 2012, 08:04 # 0
            Да, Василий, Вы правы, изначально на Денвере ваял, но потом перенес на Jino, однако результат не утешителен.
            1. Василий Наумкин 24 october 2012, 08:09 # 0
              Могу только развести руками. У меня не получается повторить.
              1. Василий Наумкин 24 october 2012, 08:13 # 0
                Зайдите на modx-minishop.ru — там почти у всех товаров вес с плавающей точкой.

                И работает.
                1. Vaha30 24 october 2012, 11:38 # 0
                  При попытке отправить SQL запрос с весовым числом с плавающей точкой в таблицу modx_ms_modorderedgoods напрямую, все добавляется без ошибок.
                  1. Vaha30 24 october 2012, 11:45 # 0
                    Из лога ошибки видно, что он пытается добавить в таблицу значение, уже с округлением, то есть целое число
      2. Алексей 23 october 2012, 20:50 # 0
        FLOAT[(M, D)]
        Параметр М задает число символов для отображения всего числа, а D — для его дробной части.

        ......`weight` float(10,3) NOT…

        Вы вбиваете 0.2345, где D = 4, а в базе — 3

        Мб тут собака зарыта? =)
        1. Vaha30 24 october 2012, 01:04 # 0
          Ан нет… Только что пробовал изменить вместо `weight` float(10,3) на `weight` float(10,10) NOT...- абсолютно никакой разницы. Только через целые значения веса…
          1. Vaha30 24 october 2012, 17:01 # 0
            Проблема так и осталась. При создании SQL запроса на запись в таблицу вручную — INSERT INTO `modx_ms_modOrderedGoods` (`gid`, `oid`, `num`, `price`, `weight`, `sum`, `data`) VALUES (63, 42, 1, 23566, 5.43, 23566, '[]'), все норм, а вот при попытке записи через скрипт — на выходе Error 21S01 и Error 42000… До сих пор ломаю голову…
            1. Василий Наумкин 24 october 2012, 17:04 # 0
              Видимо, не судьба.

              Посмотрите как все прекрасно работает на modx-test.com
              1. Vaha30 24 october 2012, 23:29 # 0
                В этом нет сомнения! :) Но в моей ситуации все сложилось иначе...:( Ладно, сайт в конечном итоге будет на другом хосте крутиться, может быть само собой все и решиться. По крайней мере все остальное работает без проблем.
        2. Vaha30 31 october 2012, 09:05 # 0
          Путем переноса сайта на другой хостинг (nic.ru) все заработало.
          1. Алексей 11 november 2012, 00:23 # 0
            Здравы будьте, коллеги!

            У меня абсолютно та же проблема на хостинге masterhost
            1. Алексей 11 november 2012, 00:24 # 0
              Error 21S01 executing statement:
              INSERT INTO `mx_ms_modOrderedGoods` (`gid`, `oid`, `num`, `price`, `weight`, `sum`, `data`) VALUES (19, 4, 1, 32000, 0, 32000, '[]')
              1. Алексей 11 november 2012, 00:27 # 0
                однако, у этого товара есть вес — 0.97, а в запросе он = 0…
                1. Алексей 11 november 2012, 00:29 # 0
                  а вот если изменить вес на 1, то всё ок
                  т.е. проблема не в БД, похоже
                  1. Игорь Зябко 30 november 2012, 14:33 # 0
                    Masterhost, такая же ошибка.

                    [2012-11-30 14:20:50] (ERROR @ /index.php) Error 21S01 executing statement:
                    INSERT INTO `interionova_ms_modOrderedGoods` (`gid`, `oid`, `num`, `price`, `weight`, `sum`, `data`) VALUES (35, 11, 1, 5700, 1, 5700, '[]')
                    Array
                    (
                        [0] => 21S01
                        [1] => 1136
                        [2] => Column count doesn't match value count at row 1
                    )
                    
                    [2012-11-30 14:20:50] (ERROR @ /index.php) Error 42000 executing statement:
                    UPDATE `interionova_ms_modOrders` SET `sum` = 5700,`weight` = 1 WHERE `id` = 11
                    Array
                    (
                        [0] => 42000
                        [1] => 1064
                        [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '617 WHERE `id` = 11' at line 1
                    )
                    
                    
                    
                    1. Игорь Зябко 30 november 2012, 14:59 # 0
                      вес: 1.617 кг → Локальная машина — debian
                      вес: 1,617 кг → MasterHost FreeBSD

                      В БД значение с точкой, похоже дело в региональных настройках
                      1. Игорь Зябко 30 november 2012, 16:37 # 0
                        Сначала поступил так

                        bezumkin.ru/blog/41/

                        setLocale
                        <?php
                        setlocale(LC_NUMERIC, "C");
                        И в начале шаблона вызов снипета — все равно с точкой, где то MODX переопределяет.

                        Потом «пропатчил» снипеты ms*
                        setlocale(LC_NUMERIC, "C");
                        Точку получл — все ок, но это какой-то костыль получился.
                    You need to login to create comments.