Перейти к содержимому


Неправильно создаются категории (как через импорт, так и вручную)


  • Вы не можете ответить в тему
Сообщений в теме: 8

#1 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 21 December 2016 - 08:23 PM

Сделал на хостинге копию имеющейся рабочей установки 3.1.2 Vip (файлы копировал суп хост-провайдера). Сделал копию полного "комплекта" таблиц с иным префиксом БД, в tables.inc и connect.inc заменил префиксы, проверил - все вроде работает, данные (покупатели, товары, инф. страницы) перенеслись с рабочей копии и выглядит-работает вроде все правильно.
Однако. Подготовил файл каталога для импорта, сохранил в csv по уже давно откатанной технологии. Импортирую... скрипт падает и выдает ошибку на белом странице:

Страница shop.greenfish.su не работает

Сайт shop.greenfish.su не отправил данных.
ERR_EMPTY_RESPONSE

Что за черт? Начал изгаляться с файлом импорта так и этак, выгрузил из другой установки заведомо годный, рабочий файл, заливаю в новую копию скрипта - та же картина. Ок, очищаю каталог через импорт и пробую создать категорию вручную в админке - скрипт вываливается с тем же результатом (в пользовательской части при попытке обратиться к каталогу сайт тоже падает).
Полез в phpmyadmin - логов по ошибкам в импорте не нашел (вообще никаких логов об ошибках с 13.12.16), но выяснил, что при создании категории вручную она создается с нулевым categoryID, при попытке импорта через файл картина та же. Если создать категорию вручную в админке, а потом через phpmyadmin руками прописать categoryID - она начинает без проблем отображаться в каталоге (и в админке, и в юзер-части), с ней можно работать, создавать в ней товары. То есть, сбой происходит именно при создании категорий - не задаются их ID. С чего бы вдруг такое - не могу понять, ведь все файлы, включая шаблон, копировали с заведомо рабочей копии. Повторно перезалил все php и вообще все, кроме конфигов, переписанных под новую копию - ситуация не изменилась. Не пойму, куда копать и что еще менять.
  • 0
Make love, not work!

#2 antaNT

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 33 сообщений
Репутация: 1
Начинающий

Отправлено 22 December 2016 - 12:15 AM

очень долгий запрос выполняешь, при импорте csv вот тебя сервер и выкидывает.

или разбивай csv
или меняй настройки сервера

для проверки попробуй на локальный OpenServer импортировать - там нет ограничения на время выполнения скрипта
  • 0

#3 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 22 December 2016 - 08:05 AM

очень долгий запрос выполняешь, при импорте csv вот тебя сервер и выкидывает.

или разбивай csv
или меняй настройки сервера

для проверки попробуй на локальный OpenServer импортировать - там нет ограничения на время выполнения скрипта

Я пробовал с минимальным объемом файла импорта: одна категория и один товар. И да, при создании категории вручную через админку - такой же результат.
У меня был именно такой случай, с долгим выполнением импорта, когда я заливал ок. 10000 наименований - приходилось разбивать на 2-3 файла и по частям заливать. Симптомы те же, а вот корень проблемы совершенно иной.
  • 0
Make love, not work!

#4 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 22 December 2016 - 04:31 PM

но выяснил, что при создании категории вручную она создается с нулевым categoryID

Некорректно (неправильно) созданы таблицы. Врядли только категорий (xxxx_categories), а, скорее всего, и все остальные, где есть автоинкремент.
Поле categoryID в этой таблице - автоинкрементное. Т.е. оно не заполняется каким-то значением (номером категории) в строке запроса, а при добавлении записи АВТОМАТИЧЕСКИ принимает значение на единицу больше максимального предыдущего.
Т.е. запрос INSERT INTO xxx_categories name='Тест' приведет к созданию записи, где name=Тест, а categoryID=предыдущее значение+1.
Автоинкрементное поле не может быть нулевым, оно всегда больше нуля, т.к. первое же создание записи в пустой таблице приводит к "на единицу больше предыдущего", а предыдущего нет, т.е. ноль.
Другими словами, то, что в categoryID находится ноль однозначно указывает, что это поле не имеет свойства автоинкрементности, а тот, кто создавал бэкап где-то прокололся.

Вот так выглядит структура таблицы категорий (видите там auto_increment - напротив categoryID?)
mysql> DESC shop2_categories;
+-----------------------------+--------------+------+-----+---------+----------------+
| Field					   | Type		 | Null | Key | Default | Extra		  |
+-----------------------------+--------------+------+-----+---------+----------------+
| categoryID				  | int(11)	  | NO   | PRI | NULL	| auto_increment |
| name						| varchar(255) | YES  |	 | NULL	|				|
| parent					  | int(11)	  | YES  | MUL | NULL	|				|
| products_count			  | int(11)	  | YES  |	 | NULL	|				|
| description				 | text		 | YES  |	 | NULL	|				|
| picture					 | varchar(30)  | YES  |	 | NULL	|				|
| products_count_admin		| int(11)	  | YES  |	 | NULL	|				|
| sort_order				  | int(11)	  | YES  | MUL | 0	   |				|
| viewed_times				| int(11)	  | YES  |	 | 0	   |				|
| allow_products_comparison   | int(11)	  | YES  |	 | 0	   |				|
| allow_products_search	   | int(11)	  | YES  |	 | 1	   |				|
| show_subcategories_products | int(11)	  | YES  |	 | 1	   |				|
| meta_description			| text		 | YES  |	 | NULL	|				|
| meta_keywords			   | text		 | YES  |	 | NULL	|				|
| title					   | text		 | YES  |	 | NULL	|				|
| subcount					| int(11)	  | YES  |	 | 0	   |				|
+-----------------------------+--------------+------+-----+---------+----------------+
16 rows in set (0.00 sec)
А вот так мы можем получить команду, которой была создана таблица (видите все тот же auto_increment напротив categoryID?):
mysql> SHOW CREATE TABLE shop2_categories;
+------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table			| Create Table																																																																																																																																																																																																   |
+------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| shop2_categories | CREATE TABLE `shop2_categories` (
  `categoryID` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  `parent` int(11) default NULL,
  `products_count` int(11) default NULL,
  `description` text,
  `picture` varchar(30) default NULL,
  `products_count_admin` int(11) default NULL,
  `sort_order` int(11) default '0',
  `viewed_times` int(11) default '0',
  `allow_products_comparison` int(11) default '0',
  `allow_products_search` int(11) default '1',
  `show_subcategories_products` int(11) default '1',
  `meta_description` text,
  `meta_keywords` text,
  `title` text,
  `subcount` int(11) default '0',
  PRIMARY KEY  (`categoryID`),
  KEY `IDX_CATEGORIES1` (`parent`),
  KEY `SORT_ORDER` (`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=latin1 |
+------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#5 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 23 December 2016 - 01:14 PM

Спасибо, Вы, как обычно, на высоте.
Таблицы создавал (точнее, копировал) я в phpmyadmin. Признаюсь сразу - я рукожоп, в mysql не умею. Написал письмецо в суп хостеру с просьбой помочь, но пока ждал ответа (не дождался), по привычке полезть гуглить (зачастую таким способом ответ находится быстрее, плюс в итоге сам начинаешь понимать. что делаешь). Суп же теребил по той причине, что хотел сделать сразу все правильно, как положено, через sql-запрос.
В итоге в гугле не смог найти, как правильно составить запрос для копирования "пакета" таблиц - все результаты поиска давали что-то близкое, но не совсем то или даже совсем не то, а изучать mysql "за полчаса" не было вариантов. Нашел только примерную инструкцию на похожую тему, как сделать через гуево-визуальные средства myphpadmin. Методом тыка и пристального взгляда, через "черновики" попробовал копирование таблиц с рабочей копии ShopCMS на этом же хостинге, но в другом домене (и с другим префиксом, соответственно). И вот, ничтоже сумняшеся, копирую набор таблиц с префиксом (допустим) abcd_ с присвоением им префикса dcba_ - все переносится вроде бы, корректно - состав и содержимое таблиц один-в-один (на первый взгляд профана), все работает - что еще надо? :) Конечно, армейский метод про*ба - налицо :) Ну и, как показало дальнейшее развитие событий, и как Вы сами указали, скопировались (создались новые) таблицы некорректно. Сейчас полезу в myphpadmin и буду более пристально курить, где еще что не так, как надо, скопировалось. По такой логике, понимаю, что, как Вы и написали, подобные грабли в новых таблицах должны проявиться везде, где это возможно (с автоинкрементом). Просто пока до них черед не дошел в повседневном использовании (сайт еще не запущен).
Вот что обычно и бывает, когда шаловливые ручки лезут туда, где мозги не имеют скилла :) Почему и обратился сразу в суп - ну, хоть исходные таблицы не запорол :)
  • 0
Make love, not work!

#6 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 23 December 2016 - 01:53 PM

На форуме же есть расписанная по пунктам инструкция по переносу сайта с одного хостинга на другой.
Насколько я помню, от R.Sergey.
Лично я делаю так:
1. создаю с нуля пустой сайт. Т.е. копирую файлы ShopCMS, запускаю install.php и т.д. - штатное создание сайта.
2. запоминаю, с каким префиксом я создал таблицы в базе.
3. выполняю в админке старого сайта в "Администрация БД" импорт базы данных (именно базы данных, а не каталога товаров).
4. меняю в полученном бэкапе префиксы таблиц на запомненный в п.2
5. выполняю в админке нового сайта экспорт базы данных.
6. копирую все файлы старого сайта поверх файлов нового сайта.

Писал на память, мог где-то ошибиться, так что лучше по проверенной инструкции.
Общая идея банальна: сначала создаем пустой сайт с нуля, затем меняем в нем таблицы и файлы на нужные.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#7 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 24 December 2016 - 09:52 AM

3. выполняю в админке старого сайта в "Администрация БД" импорт базы данных (именно базы данных, а не каталога товаров).
5. выполняю в админке нового сайта экспорт базы данных.

Мне кажется, или в п. 3 - экспорт, а в п.5 - импорт?
То есть, таким способом, даже если имеют место грабли с php свежее поддерживаемого 5.3 (у моего прова сейчас 5.5, по-моему, из-за чего свежая установка проходит криво), то после переноса БД и файлов со старого сайта на новый, все работает как положено?
Как-то я не подумал насчет полной инструкции. Искал по vsupport материалы, как поступить именно с таблицами в sql, а про простой готовый рецепт и не подумал. Сейчас попробую все таким образом поправить - терять уже нечего, кроме как перебирать вручную все таблицы :)

Спасибо за совет!
Перенес все за какие-то 5 минут, файлы перезаливать не понадобилось, т.к. они и так уже полностью подтянуты с рабочей копии, а префикс при установке я задал тот же, что уже прописан в конфигах этого сайта.
Буду пользоваться впредь. "Век живи - век учись", - подумал поручик Ржевский и переложил портсигар из кармана брюк в жилет :)
  • 0
Make love, not work!

#8 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 24 December 2016 - 11:50 AM

Мне кажется, или в п. 3 - экспорт, а в п.5 - импорт?

Да, конечно.

То есть, таким способом, даже если имеют место грабли с php свежее поддерживаемого 5.3 (у моего прова сейчас 5.5, по-моему, из-за чего свежая установка проходит криво), то после переноса БД и файлов со старого сайта на новый, все работает как положено?

Нет, конечно. На 5.4+ ShopCMS как положено не работает. Дальше проблему, как мне кажется, можно и не обсуждать. Если, конечно, у Вас нет инсталлятора ShopCMS, переделанного под 5.4+.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#9 SoVA

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 66 сообщений
Репутация: 0
Начинающий
  • ГородКраснодар

Отправлено 09 January 2017 - 11:01 AM

Нет, конечно. На 5.4+ ShopCMS как положено не работает. Дальше проблему, как мне кажется, можно и не обсуждать. Если, конечно, у Вас нет инсталлятора ShopCMS, переделанного под 5.4+.

Тут, наверное, я неправильно сформулировал свой вопрос, но суть я понял и главное - проблема решена.
Спасибо за подсказку! С Новым годом и "творческих узбеков" :)
  • 0
Make love, not work!