Minishop2
Добрый день!
При создании товара в категории, товар создается с ID 0. После чего все попытки редактирования выдают что то типа «Ресурс с идентификатором ext-record-295 не найден»… Куда копать?
MODX Revolution 2.2.8-pl (traditional)
pdoTools 1.4
miniShop2 2.0.1
При создании товара в категории, товар создается с ID 0. После чего все попытки редактирования выдают что то типа «Ресурс с идентификатором ext-record-295 не найден»… Куда копать?
MODX Revolution 2.2.8-pl (traditional)
pdoTools 1.4
miniShop2 2.0.1
Комментарии: 13
Версия php?
Если ниже 5.3, то нужно обновиться.
Если ниже 5.3, то нужно обновиться.
PHP Version 5.4.13
MySQL 5.0.45
MySQL 5.0.45
PHP Version 5.4.13
MySQL 5.0.45
в логе прочитал
[2013-08-11 23:42:12] (ERROR @ /assets/components/minishop2/connector.php) Error HY000 executing statement:
INSERT INTO `ms2_products` (`id`, `price`, `old_price`, `weight`, `vendor`, `new`, `popular`, `favorite`, `source`) VALUES (7, '0', '0', '0', 0, 0, 0, 0, 1)
Array
(
[0] => HY000
[1] => 1364
[2] => Field 'made_in' doesn't have a default value
)
убрал из default значения ' ' поставил просто test
потом получил последовательно ошибки по price и weight.
INSERT INTO `ms2_products` (`id`, `article`, `price`, `old_price`, `weight`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`) VALUES (16, 0, '', '', '', 0, 'test3', 0, 0, 0, '[\"\"]', '[\"\"]', '[\"\"]', 2)
Array
(
[0] => HY000
[1] => 1366
[2] => Incorrect decimal value: '' for column 'price' at row 1
)
Поправил тип DECIMAL 13,2 и 13,3 на 10,2 и 10,3 соответственно.
Вроде после это все вставилось корректно.
MySQL 5.0.45
в логе прочитал
[2013-08-11 23:42:12] (ERROR @ /assets/components/minishop2/connector.php) Error HY000 executing statement:
INSERT INTO `ms2_products` (`id`, `price`, `old_price`, `weight`, `vendor`, `new`, `popular`, `favorite`, `source`) VALUES (7, '0', '0', '0', 0, 0, 0, 0, 1)
Array
(
[0] => HY000
[1] => 1364
[2] => Field 'made_in' doesn't have a default value
)
убрал из default значения ' ' поставил просто test
потом получил последовательно ошибки по price и weight.
INSERT INTO `ms2_products` (`id`, `article`, `price`, `old_price`, `weight`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`) VALUES (16, 0, '', '', '', 0, 'test3', 0, 0, 0, '[\"\"]', '[\"\"]', '[\"\"]', 2)
Array
(
[0] => HY000
[1] => 1366
[2] => Incorrect decimal value: '' for column 'price' at row 1
)
Поправил тип DECIMAL 13,2 и 13,3 на 10,2 и 10,3 соответственно.
Вроде после это все вставилось корректно.
Как то очень странно.
У тебя одного такие ошибки, больше никто не жаловался. Ради интереса, проверь на modx-test.com
У тебя одного такие ошибки, больше никто не жаловался. Ради интереса, проверь на modx-test.com
М.б. проблема видимо в скрипте создания таблиц при установке ms2? Он походу создает некорректные типы полей. На тестовом сайт все ок.
Еще может в настройках MySQL. Например, что указано в sql mode в PHPMyAdmin на вкладке «Переменные».
Похоже что установлен strict режим.
Похоже что установлен strict режим.
Буду вторым. Точно такая же ошибка.
PHP 5.4.0
MariaDB 10.0
Помогла правка my.ini, а точнее было:
PHP 5.4.0
MariaDB 10.0
Помогла правка my.ini, а точнее было:
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
Стало:sql_mode="NO_ENGINE_SUBSTITUTION"
Да, есть такое. Покурил мануалы на этот счет. Если мы убираем STRICT_TRANS_TABLES, то mysql начинает подставлять корявые значения переданные в виде параметров в INSERT как значения из DEFAULT, в противном случае (т.е. при выставленном STRICT_TRANS_TABLES) он проверяет тип передаваемого параметра и пытается видимо его привести к типу поля таблицы. Поскольку Минишоп при INSERTе записи в ms2_products для полей цена, цена_старая, вес (которые DECIMAL) пытается выполнить INSERT… VALUES (… '','',''...), т.е. «строка» то это не проканывает и валится по ошибки. Которую мы и видим в логах. Есть несколько вариантов решения:
1. Автору подправить INSERT на то чтобы в поля с числовыми значениями писалось не строковые константы, а именно числа. По мне так самый корректный способ.
2. Автору подправить INSERT на INSERT IGNORE, что должно решить эту проблему как если бы был выключен STRICT_TRANS_TABLES.
3. Ручками отключать(как правильно заметил F Sergey) в конфигах mysql директиву sql-mode. (что мне кажется не правильным, потому как м.б. нужно STRICT_TRANS_TABLES в других случаях на этом сервере. Тут и контроль правильности даты и прочая, на что mysql будет возбуждаться.
ИМХО.
1. Автору подправить INSERT на то чтобы в поля с числовыми значениями писалось не строковые константы, а именно числа. По мне так самый корректный способ.
2. Автору подправить INSERT на INSERT IGNORE, что должно решить эту проблему как если бы был выключен STRICT_TRANS_TABLES.
3. Ручками отключать(как правильно заметил F Sergey) в конфигах mysql директиву sql-mode. (что мне кажется не правильным, потому как м.б. нужно STRICT_TRANS_TABLES в других случаях на этом сервере. Тут и контроль правильности даты и прочая, на что mysql будет возбуждаться.
ИМХО.
Там везде работает xPDO, я не вмешиваюсь.
[2017-11-27 16:11:09] (ERROR @ /public_html/core/xpdo/om/xpdoobject.class.php : 1452) Error 22007 executing statement:
INSERT INTO `modx_ms2_products` (`id`, `article`, `price`, `old_price`, `weight`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`) VALUES (22, '0293', '7700', '', '', 1, '', 0, 0, 0, '[\"\"]', '[\"\"]', '[\"\"]', 3)
Array
(
[0] => 22007
[1] => 1366
[2] => Incorrect decimal value: '' for column 'old_price' at row 1
)
PHP 7.1.12
mysql Ver 15.1 Distrib 10.2.10-MariaDB
MODX 2.6.0pl
minishop2 2.4.11-pl
Ошибка возникает при создании товара. При открытии уже созданного товара в полях цена, старая цена подставляются нули.
На mariadb 10.0 — всё работает.
Эту ошибку исправляет приведение к типу полей old_price, price и weight:
Вот в этот github.com/bezumkin/miniShop2/blob/master/core/components/minishop2/processors/mgr/product/create.class.php#L64 метод добавить это:
Вот в этот github.com/bezumkin/miniShop2/blob/master/core/components/minishop2/processors/mgr/product/create.class.php#L64 метод добавить это:
$this->object->set('old_price', (float)$this->object->get('old_price'));
$this->object->set('price', (float)$this->object->get('price'));
$this->object->set('weight', (float)$this->object->get('weight'));
Уважаемый, Василий!
Та же проблема, долго разбирался, даже тему создал.
Решение — из поста выше, Роман Садоян.
Вопрос — при обновлении, create.class.php — перезапишется.
Как этого избежать?
Просьба, при очередном обновлении версии miniShop2, по возможности исправить «Incorrect decimal value».
Спасибо.
Та же проблема, долго разбирался, даже тему создал.
Решение — из поста выше, Роман Садоян.
Вопрос — при обновлении, create.class.php — перезапишется.
Как этого избежать?
Просьба, при очередном обновлении версии miniShop2, по возможности исправить «Incorrect decimal value».
Спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.