Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Внесение данных из Excel в базу данных MySQL с помощью PHP

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Old Rocker



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос следующий:
Имеем базу данных MySQL. Человек забивает файл (формат любой, главное, чтобы под Excel легко редактировался) информацией, скажем в первый столбец название товара, во второй артикул, в третий цену.  
Заходит на админ-страницу своего сайта и там нажимает обзор, выбирает только что созданный файл и жмет обновить.
 
Произойти должно вот что:  
Данные из файла замещают определенные 3 столбца (ну скажем product, price, art), т.е. первый столбец файла заменяет все в product, второй в price, третий в art.
 
Так вот очень интересно, как это организовать технически на PHP. Буду очень признателен, если у кого-то есть исходники этого дела, примеры и т.п.      

Всего записей: 451 | Зарегистр. 24-07-2001 | Отправлено: 19:30 20-12-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Old Rocker
Интересно.. а зачем дублировать свои же старые темы??  
http://forum.ru-board.com/topic.cgi?forum=31&topic=3376#1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:32 20-12-2003
Old Rocker



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пардон, подзабыл…подзабыл…
Ну, собственно тогда я ответа судя по всему не получил, возможно, иначе сформулированная задача как-то поможет?  

Всего записей: 451 | Зарегистр. 24-07-2001 | Отправлено: 20:41 20-12-2003
Mbus



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне бы тоже было интерсно, так как ответа не нашла.

Всего записей: 655 | Зарегистр. 04-06-2003 | Отправлено: 22:56 20-12-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Млин.. ну сохраняете в CSV и потом все элементарно делается..


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:03 20-12-2003
Old Rocker



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Млин.. ну сохраняете в CSV и потом все элементарно делается..  
А если конкретно?

Всего записей: 451 | Зарегистр. 24-07-2001 | Отправлено: 00:48 21-12-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Old Rocker

Цитата:
А если конкретно?  

А что конкретно.. в Excel есть возможность сохранить файл в CSV формате (данные разделены запятой или чем выберешь).
Затем все просто..
<?
$data=file('file.csv');
$count=-1;
foreach($data as $line)
   {
   $count++;
   $finaldata[$count]=split(',',$line); //можно использовать другой разделитель. но лучше всего потом юзать preg_split составив удобное regexp выражение.. так как в тексте тоже могут быть запятые.
   }
?>
вот и будет в массиве $finaldata[номер_строки][номер_столбца]

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:53 21-12-2003 | Исправлено: Cheery, 02:30 21-12-2003
KVCH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
а если у меня в какой то ячейке будет
 
Cheery, который сидит на этом форуме - Silver Member
 
?
 
Добавлено
т.е. примерчик  с  
 

Цитата:
можно использовать другой разделитель. но лучше всего потом юзать preg_split составив удобное regexp выражение.. так как в тексте тоже могут быть запятые.  



----------
FreeBSD лучше Linux !

Всего записей: 1741 | Зарегистр. 03-03-2002 | Отправлено: 05:58 21-12-2003 | Исправлено: KVCH, 05:58 21-12-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KVCH

Цитата:
а если у меня в какой то ячейке будет

А если попробовать и посмотреть, что он будет вставлять ячейку в кавычки??  
Я же говорю, что для этого нужно будет использовать preg_split.. и я уже обсуждал эту тему.. нужно только поискать.
Вот
http://forum.ru-board.com/topic.cgi?forum=31&topic=3655#1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:06 21-12-2003
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
Затем все просто..  
<?  
$data=file('file.csv');  
$count=-1;  
foreach($data as $line)  
   {  
   $count++;  
   $finaldata[$count]=split(',',$line); //можно использовать другой разделитель. но лучше всего потом юзать preg_split составив удобное regexp выражение.. так как в тексте тоже могут быть запятые.  
   }  
?>  
вот и будет в массиве $finaldata[номер_строки][номер_столбца]

 
Зачем парсить csv самому, когда мускул сам все сделает

Код:
 
LOAD DATA INFILE 'file.csv' INTO TABLE 'blabla' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
 

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 07:13 21-12-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
batva

Цитата:
Зачем парсить csv самому, когда мускул сам все сделает  

Это было в последней моей ссылке но кто знает, что он еще хочет сделать  
Вопрос же был не как перегнать данные из Excel в MySQL, а через PHP..
зы: я делал так для того, чтобы можно было отредактировать что нужно сразу.. до того, как это загоняется в базу.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:26 21-12-2003 | Исправлено: Cheery, 07:34 21-12-2003
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
я делал так для того, чтобы можно было отредактировать что нужно сразу..  

согласен.
 
Раз проблема решена, то можно себе позволить небольшой оффтоп:
 
А вот в perl легко можно работать прямо с xls файлом.
 
Например вот так.
 
А можно и даже так, что намного более интересно.
 
А в php слабо?
 
 
 
 
 
 
 

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 08:30 21-12-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
batva

Цитата:
А в php слабо?  

К сожалению в php такие вещи коммерческие..  Вот пример.
http://www.zakkis.ca/products/abc_lightparser/
Можно сделать через COM:
http://hurring.com/code/php/excel_class/
но.. во первых только под Win.. во вторых есть некоторые неприятности (столкнулся с тем, что Excel не выгружался из памяти после обработки), после которых, собственно, и перешел к CSV

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 08:43 21-12-2003
KVCH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
batva
 
второй вариант
 

Цитата:
use DBI;
    $hDb = DBI->connect("DBI:Excel:file=test.xls")
        or die "Cannot connect: " . $DBI::errstr;
    $hSt = $hDb->prepare("CREATE TABLE a (id INTEGER, name CHAR(10))")
        or die "Cannot prepare: " . $hDb->errstr();
    $hSt->execute() or die "Cannot execute: " . $hSt->errstr();
    $hSt->finish();
    $hDb->disconnect();
 

 
а для чего этот запрос ?
и как именно происходи конвертация данных ?
модуль сам создаёт таблицу, сам переносит данные ?
или этим запросом я как бы и должен сделать табличку сначала чтоли ?
 
---
и чуть не по теме но,  
 
не подскажешь http://theoryx5.uwinnipeg.ca/CPAN/data/ все эти доки одним архивчиком или по архивчикам качнуть можно где ?

----------
FreeBSD лучше Linux !

Всего записей: 1741 | Зарегистр. 03-03-2002 | Отправлено: 09:00 21-12-2003
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KVCH

Цитата:
CREATE TABLE a (id INTEGER, name CHAR(10))  


Цитата:
а для чего этот запрос ?  

 
Этот запрос создает таблицу, с двумя полями id и name.
 
Это просто пример, не более того.
 

Цитата:
и как именно происходи конвертация данных ?  
модуль сам создаёт таблицу, сам переносит данные ?  
или этим запросом я как бы и должен сделать табличку сначала чтоли ?  

Никакой конвертации не происходит, ты напрямую работаешь с xls файлом, как будто работаешь с базой данных, например, MySQL.
Тоесть работаешь через стандартные DBI драйвера, используя стандартный язык SQL
 

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 09:02 21-12-2003
KVCH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
batva
протупил, раздуплился, понял, спасибо

----------
FreeBSD лучше Linux !

Всего записей: 1741 | Зарегистр. 03-03-2002 | Отправлено: 09:10 21-12-2003
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
и чуть не по теме но,  
 
не подскажешь http://theoryx5.uwinnipeg.ca/CPAN/data/  все эти доки одним архивчиком или по архивчикам качнуть можно где ?

 
зайди на ftp.cpan.org и сливай что твоей душе угодно, хоть доки, хоть модули, все бесплатно.
 
Аааа... тебе в зипе надо? Хм.. попробуй поискать в гугле.

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 09:13 21-12-2003
KVCH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
batva
а  
 
DBD::Excel  
 
в виде ппд гдето найти можно ?
 
Добавлено
а то  
 
ppm> search DBD::Excel
 
в
 
[2] ActiveState Package Repository
[3] ActiveState PPM2 Repository
 
сказал
 
No matches for 'DBD::Excel'; see 'help search'.
 
Добавлено

Цитата:
use DBI;  
    $hDb = DBI->connect("DBI:Excel:file=test.xls")  
        or die "Cannot connect: " . $DBI::errstr;  
    $hSt = $hDb->prepare("CREATE TABLE a (id INTEGER, name CHAR(10))")  
        or die "Cannot prepare: " . $hDb->errstr();  
    $hSt->execute() or die "Cannot execute: " . $hSt->errstr();  
    $hSt->finish();  
    $hDb->disconnect();  

 
а что есть таблица "а" в ексель файле ? книга чтоли ?
 
---
и ещё
 
скачал http://search.cpan.org/CPAN/authors/id/K/KW/KWITKNR/DBD-Excel-0.06.tar.gz
 
распоковал, зашёл в папку, запустил perl makefile.pl
 
попросило
SQL::Statement
Spreadsheet::ParseExcel 0.22
Spreadsheet::WriteExcel 0.31
 
нашёл 2е последние полее поздние версии только 0.2602 и 0.42 соответственно
 
Spreadsheet::ParseExcel поставил с собой  
IO-stringy
OLE-Storage_Lite
 
а
 
Spreadsheet::WriteExcel 0.31 поставил с собой
Parse-RecDescent
 
всё енто поставил
и опять запустил  
 
perl makefile.pl
 
написало  
 
Checking if your kit is complete...
Looks good
*** Warning: Colons in the current directory path (D:/Install/3/Server/Perl/1/DBD-Excel-0.06) may cause problems
*** Warning: Colons in the current directory path (D:/Install/3/Server/Perl/1/DBD-Excel-0.06) may cause problems
Using DBI 1.38 installed in S:/Usr/site/lib/auto/DBI
Writing Makefile for DBD::Excel
 
пробывал в D:/DBD
 
тоже ругнулост на путь
 
*** Warning: Colons in the current directory path (D:/DBD) may cause problems
*** Warning: Colons in the current directory path (D:/DBD) may cause problems
 
чем её путь не погравился ?
 
вообщем затем сделал nmake
 
получил папку blib вот... а что теперь с ней делать ? (я тупо покопировал в папку s:/usr/site/lib/DBD)
 


----------
FreeBSD лучше Linux !

Всего записей: 1741 | Зарегистр. 03-03-2002 | Отправлено: 11:20 21-12-2003
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KVCH

Цитата:
а  
 
DBD::Excel  
 
в виде ппд гдето найти можно ?  
 
Добавлено  
а то  
 
ppm> search DBD::Excel  
 
в  
 
[2] ActiveState Package Repository  
[3] ActiveState PPM2 Repository  
 
сказал  
 
No matches for 'DBD::Excel'; see 'help search'.  

 
А у тебя какая версия активперла?
Вот тут (для ActivePerl 6xx ) он есть.
 

Цитата:
а что есть таблица "а" в ексель файле ? книга чтоли ?  

да, книга, тебя это смущает?
 

Цитата:
и ещё....  

Хм.. мне даже и проверить не на чем.
У меня Linux и там я для установки модулей юзаю модуль CPAN
Это что-то типа ppm, только лучше, и безглючнее, кстати при установке чего-либо, все необходимые модули он сам доставляет..
 
Ok, жди, поставлю сейчас ActivePerl раскажу..
 
 
 
Добавлено
Ок.
 
Делаем так:
 
Через ppm ставим все необходимые модули. Все, кроме DBD::Excel, его в репозитарии нет, и его поставим руками.
 

Код:
 
ppm>install DBI
***
ppm>install SQL-Statement
***
ppm>install Spreadsheet-ParseExcel
***
ppm>install Spreadsheet-WriteExcel
 
exit
>
 

 
Теперь скачиваем  DBD-Excel-0.06.tar.gz распаковываем в темповую папку, берем оттуда Excel.pm и просто ложим в C:\Perl\site\lib\DBD
 
Это все.
Протестировать можно так:
 
Берем файл tex.pl и dbdtest.xls (они лежат в DBD-Excel-0.06.tar.gz в папке sample) и ложим куда нибудь..
 
Далее смотрим:
 

Код:
 
C:\Perl>perl tex.pl
#--------------------------------------------------------------
# 1. SELECT(with no params)
DATA:1,Kawai,Takanori,OpenDept.,37,GCD00051@nifty.ne.jp
DATA:2,Kabaya-Two thousand,Hippo2000 and Co.,2001,
DATA:3,Hippo2000,Hippo2000 and Co.,37,kawait@nippon-rad.co.jp
#--------------------------------------------------------------
# 2. SELECT(with params)
DATA:3,Hippo2000,Hippo2000 and Co.,37,kawait@nippon-rad.co.jp
#--------------------------------------------------------------
# 3. INSERT(with params)
#--------------------------------------------------------------
# 4. DELETE(with params)
#--------------------------------------------------------------
# 5. UPDATE(with params)
#--------------------------------------------------------------
# 6. SELECT(again)
DATA:2,Kabaya-Two thousand,Hippo2000 and Co.,2001,Mail Upd
DATA:4,Newman 4,New Dept,30,newman4@hippo2000.net
DATA:5,Newman 5,New Dept,32,newman5@hippo2000.net
#--------------------------------------------------------------
# 7. CREATE TABLE, DROP TABLE
#--------------------------------------------------------------
# 1. SELECT(with no params): VTBL
DATA:1,Kawai,Takanori,OpenDept.,37
DATA:2,Kabaya-Two thousand,Hippo2000 and Co.,2001
DATA:3,Hippo2000,Hippo2000 and Co.,37
#--------------------------------------------------------------
# 2. SELECT(with params)
DATA:2,Kabaya-Two thousand,Hippo2000 and Co.,2001
DATA:3,Hippo2000,Hippo2000 and Co.,37
#--------------------------------------------------------------
# 3. UPDATE(with params)
#--------------------------------------------------------------
# 4. DELETE(with params)
#--------------------------------------------------------------
# 5. INSERT(with params)
#--------------------------------------------------------------
# 6. SELECT(again)
DATA:1,Kawai,Takanori,OpenDept.,37
DATA:3,Hippo2000,Hippo2000 and Co.,50
DATA:4,Newman 4,New Dept,30
DATA:5,Newman 5,New Dept,32
#--------------------------------------------------------------
# 7. List tables, data sources
TABLE: TEST_V
TABLE: TEST
TABLE: DEL_TEST
TABLE: NEW_TBL
TABLE: TEST_JAPAN
TABLE: TESTV
DSN: DBI:Excel:file=./dbdtest.xls
DSN: DBI:Excel:file=./newxl.xls
#--------------------------------------------------------------
# 8. Save this Excel file
 
C:\Perl>
 

 
Должен быть создан новый newxl.xls.
Все работает, идем пить пиво..

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 01:11 22-12-2003
Old Rocker



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хорошо ушли в Перл...
 
Но вот новый вопрос назрел, чтобы логично все связать.
Хочется сделать так, чтобы file.csv создавался из имеющейся базы, скачивался -> затем правился -> снова заливался -> тем самым вносил изменения в базу данных.
Создавался file.csv - это значит выхватывал инормацию из нужных столбцов.
Как это организовать на PHP?

Всего записей: 451 | Зарегистр. 24-07-2001 | Отправлено: 07:22 22-12-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Внесение данных из Excel в базу данных MySQL с помощью PHP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru