ПХП скрипт интернет магазина

DeltaDIM

Новичок
ПХП скрипт интернет магазина

Привет!
Пишу на ПХП скрипт интернет магазина.
И уже который раз сталкиваюсь с проблемой импорта прайс листа в базу данных.
Есть таблица в Excel'e:

Артикул | Наимен. | Фирма | Описание | Цена |
zzz_1 | ЗЕНИТ | ЗЕНИТ | | | *
zzz_2 | ЗЕНИТ | Мебель для детей | | | **
zzz_3 | ЗЕНИТ | Детская | | | ***
zzz_4 | ЗЕНИТ | Детская МАРТИН - 3 (шт.) | 2050*3000*590 | 9960 |
zzz_5 | ЗЕНИТ | Детская СОФИЯ (шт.) | 1250*1500*300/600 | 3410 |
zzz_6 | ЗЕНИТ | Детская СОФИЯ - 2 (шт.) | 1050х1200 х580 | 1930 |
zzz_7 | ЗЕНИТ | Детская ЧЕБУРАШКА (шт.) | 1900*2600*450/350 | 7230 |
zzz_8 | ЗЕНИТ | Детская ЮНИОР - 2 (шт.) | | 9720 |
zzz_9 | ЗЕНИТ | Комод | | | ***
zzz_10 | ЗЕНИТ | Комод Елена (шт.) | 1120*1270*430 | 5070 |
zzz_11 | ЗЕНИТ | Комод с гнутым фасадом (шт.) | 850 *1000*450 | 2820 |
zzz_12 | ЗЕНИТ | Кровать | | | ***
zzz_13 | ЗЕНИТ | Кровать НОЧКА (шт.) | 650*2040*846 | 1610 |
u_1 | УЮТ | УЮТ | | | *
u_2 | УЮТ | Тумбы | | | **
u_3 | УЮТ | Тумбы под ТВ | | | ***
u_4 | УЮТ | Тумба под ТВ АКВАРИО (шт.) | 729 Х 870 Х 550 | 2130 |
u_5 | УЮТ | Тумба под ТВ АКВАРИО - 2 (шт.) | 665 Х 870 Х 550 | 1760 |
u_6 | УЮТ | Тумба под ТВ ДОМИНО (шт.) | 663 Х 600 Х 450 | 820 |
u_7 | УЮТ | Тумба под ТВ ДОМИНО - 2 (шт.) | 685 Х 600 Х 450 | 1000 |
u_8 | УЮТ | Тумба под ТВ ДЮНА (шт.) | 640 Х 1360 Х 550 | 3795 |
u_9 | УЮТ | Тумба под ТВ Н - 05 (шт.) | 605 Х 800 Х 400 (кр.3 шт.) | 880 |
u_10 | УЮТ | Тумба под ТВ НАРОДНАЯ - 1 (шт.) | 643 Х 700 Х 497 | 1060 |
u_11 | УЮТ | Тумбы общие | | | ***
u_12 | УЮТ | Тумба под ТВ НАРОДНАЯ - 1 с поворотной доской (шт.) | 665 Х 700 Х 497 | 1200 |
u_13 | УЮТ | Тумба под ТВ НАРОДНАЯ - 2 (шт.) | 685 Х 718 Х 460 | 1160 |


А мне ее нужно добавить в БД в таком виде:

Артикул | Наимен. | Фирма | Описание | Цена | | ID | parID
zzz_1 | ЗЕНИТ | ЗЕНИТ | | | * | 1 | 0
zzz_2 | ЗЕНИТ | Мебель для детей | | | ** | 2 | 1
zzz_3 | ЗЕНИТ | Детская | | | *** | 3 | 2
zzz_4 | ЗЕНИТ | Детская МАРТИН - 3 (шт.) | 2050*3000*590 | 9960 | | 1 | 3
zzz_5 | ЗЕНИТ | Детская СОФИЯ (шт.) | 1250*1500*300/600 | 3410 | | 2 | 3
zzz_6 | ЗЕНИТ | Детская СОФИЯ - 2 (шт.) | 1050х1200 х580 | 1930 | | 3 | 3
zzz_7 | ЗЕНИТ | Детская ЧЕБУРАШКА (шт.) | 1900*2600*450/350 | 7230 | | 4 | 3
zzz_8 | ЗЕНИТ | Детская ЮНИОР - 2 (шт.) | | 9720 | | 5 | 3
zzz_9 | ЗЕНИТ | Комод | | | *** | 4 | 2
zzz_10 | ЗЕНИТ | Комод Елена (шт.) | 1120*1270*430 | 5070 | | 6 | 4
zzz_11 | ЗЕНИТ | Комод с гнутым фасадом (шт.) | 850 *1000*450 | 2820 | | 7 | 4
zzz_12 | ЗЕНИТ | Кровать | | | *** | 5 | 2
zzz_13 | ЗЕНИТ | Кровать НОЧКА (шт.) | 650*2040*846 | 1610 | | 8 | 5
u_1 | УЮТ | УЮТ | | | * | 13 | 0
u_2 | УЮТ | Тумбы | | | ** | 14 | 13
u_3 | УЮТ | Тумбы под ТВ | | | *** | 15 | 14
u_4 | УЮТ | Тумба под ТВ АКВАРИО (шт.) | 729 Х 870 Х 550 | 2130 | | 44 | 15
u_5 | УЮТ | Тумба под ТВ АКВАРИО - 2 (шт.) | 665 Х 870 Х 550 | 1760 | | 45 | 15
u_6 | УЮТ | Тумба под ТВ ДОМИНО (шт.) | 663 Х 600 Х 450 | 820 | | 46 | 15
u_7 | УЮТ | Тумба под ТВ ДОМИНО - 2 (шт.) | 685 Х 600 Х 450 | 1000 | | 47 | 15
u_8 | УЮТ | Тумба под ТВ ДЮНА (шт.) | 640 Х 1360 Х 550 | 3795 | | 48 | 15
u_9 | УЮТ | Тумба под ТВ Н - 05 (шт.) | 605 Х 800 Х 400 (кр.3 шт.) | 880 | | 49 | 15
u_10 | УЮТ | Тумба под ТВ НАРОДНАЯ - 1 (шт.) | 643 Х 700 Х 497 | 1060 | | 50 | 15
u_11 | УЮТ | Тумбы общие | | | *** | 16 | 14
u_12 | УЮТ | Тумба под ТВ НАРОДНАЯ - 1 с поворотной доской (шт.) | 665 Х 700 Х 497 | 1200 | | 51 | 16
u_13 | УЮТ | Тумба под ТВ НАРОДНАЯ - 2 (шт.) | 685 Х 718 Х 460 | 1160 | | 52 | 16



Причем, все же будут созданы 2 таблици, одна для директорий, др. для товаров.

* - обозначаются директории, количество их указывает на глубину этой директории от главной
ID - номер товара или директории
parID - ID номер той директории, к которой этот товар или директория принадлежит


Еще, я где-то видел, что преобразование в конечную таблицу можно сделать прямо в Экселе, пользуясь каким-то

макросом. Этот вариант будет даже лучше!
Не подскажите, где можно взять такой макрос?
 

_RVK_

Новичок
Макросы для екселя на пхп не пишут. Если вопрос в том как загнать таблицу в MySQL то в поиск. Этот вопрос неоднократно обсуждался....
 

DeltaDIM

Новичок
Понятно что не пишутся.
Я имел в виду макрос, который и сделан на Екселе!
Или пхп скрипт, который из 1-ой таблици делает 2-ую, при чтении, например, cvs файла.
 

Djibo

Guest
в свое время я сделал это так (я и щас не мастрер пхп а тогда тем более им не был так что метод возможно извратный). Конвертнул ексель в тхт слав богу это всегда можно сделать а потом можно либо самому распарсить файлик и перегнать в БД либо есть возможность в MySQL (если не путаю) перегнать инфу из файла в БД
 

maxim

Новичок
Насколько я понял ты будешь хранить данные в 2 таблицах.
Смотришб если есть * то это каталог пишешь его в таблицу category и category_tree В первую всю инфу о каталоге во вторую id|parent_id
Товары пишешь в таблицу товаров product где есть поля id(товара), catalog_id, вся остальная инфа.

А какой файл парсить csv или xls дело твое. на форуме есть скрипты достающие инфу из xls
 

Vetal

Новичок
Код:
if ($products_items_file = @file($_FILES['products_items_file']['tmp_name'])) {
  for ($k=0;$k<sizeof($products_items_file);$k++) {
    $item = split(";", $products_items_file[$k]);
    if (($products_items_name=trim($item[2])) and ($products_items_price=trim($item[3]))) {
      $products_items_model=trim($item[0]);
      $products_items_image=trim($item[1]);
      $products_items_description=trim($item[4]);
      $sql_data_array = array('products_items_name' => tep_db_prepare_input($products_items_name),
                              'products_items_model' => tep_db_prepare_input($products_items_model),
                              'products_items_description' => tep_db_prepare_input($products_items_description),
                              'products_items_image' => tep_db_prepare_input($products_items_image),
                              'products_items_price' => tep_db_prepare_input($products_items_price));
      tep_db_perform(TABLE_PRODUCTS_ITEMS, $sql_data_array, 'insert');
    }
  }
}
 
Сверху