Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: kak загрузить файл Excel в таблицу MySQL
 
 автор: Elina   (21.06.2005 в 10:22)   письмо автору
 
 

В поисках выхода обратилась к форумам ... ,у меня такая проблема :
Надо ввести 2000 пользователей в тавлицу MySQL .Создала файл Excel с нужными поллями и данными ,а как загрузить в MySQL ( в уже существующую таблицу users ) не знаю
Очень прошу помочь

   
 
 автор: ms.Net   (21.06.2005 в 10:42)   письмо автору
 
   для: Elina   (21.06.2005 в 10:22)
 

Поищи в поисковиках инфу о ODBC-драйвере, всё сразу станет понятно.

   
 
 автор: cheops   (21.06.2005 в 12:47)   письмо автору
 
   для: Elina   (21.06.2005 в 10:22)
 

Можно сохранить лист с пользователями в CSV-формате (это текстовый файл, поля в котором разделены точкой с запятой ;). Можно прочитать содержимое файла при помощи функции file, которая поместит каждую строчку в элемент массива, а потом разбить каждую такую строку при помощи функции explode, что-то подобное осуществляется в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=3453 только там не точка с запятой, а просто запятая.

   
 
 автор: Elina   (21.06.2005 в 16:04)   письмо автору
 
   для: cheops   (21.06.2005 в 12:47)
 

Ниже указанный код (предположим хотим создать такую же таблицу)

<?
CREATE TABLE 'test' (
'no' INT NOT NULL ,
'1' CHAR( 100 ) NOT NULL ,
'2' CHAR( 100 ) NOT NULL ,
'3' CHAR( 100 ) NOT NULL ,
'4' CHAR( 100 ) NOT NULL ,
'5' CHAR( 100 ) NOT NULL ,
'6' CHAR( 100 ) NOT NULL ,
'7' CHAR( 100 ) NOT NULL ,
'8' CHAR( 100 ) NOT NULL ,
'9' CHAR( 100 ) NOT NULL ,
'10' CHAR( 100 ) NOT NULL ,
'11' CHAR( 100 ) NOT NULL ,
'12' CHAR( 100 ) NOT NULL ,
'13' CHAR( 100 ) NOT NULL ,
INDEX ( 'no' )
);

?>

помещаем в файл php .
В какую директорию надо поместить этот файл php + файл exel (с данными)?
Надо ли потом как то запустить файл php или это просходит автоматически?

спасибо

   
 
 автор: P@Sol   (21.06.2005 в 16:17)   письмо автору
 
   для: Elina   (21.06.2005 в 16:04)
 

это файл sql...он создает таблицу из 14 столбцов...и ничего более...его надо запустить одн раз при создании таблицы

   
 
 автор: P@Sol   (21.06.2005 в 16:33)   письмо автору
 
   для: Elina   (21.06.2005 в 16:04)
 

вам нужен код, который указан в теме http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=3453 после того, который Вы нам привили... тот код вы сохраняете в файл.php и кладети в папку, и в эту же папку файл.csv (в excel - сохранить как... - файл csv)

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

   
 
 автор: Peter   (21.06.2005 в 16:29)   письмо автору
 
   для: Elina   (21.06.2005 в 10:22)
 

я делал это так:
1. создал таблицу в excel
2. сохранил ее как users.txt (c разделитилями табуляции)
3. в готовую sql таблицу загрузил данные с помощью команды
Load data local infile 'users.txt' into table название_таблицы (параметр1, параметр2, ... параметрN) делал я это локально в MySQL Control Center.
И все...

   
 
 автор: Elina   (22.06.2005 в 09:42)   письмо автору
 
   для: Peter   (21.06.2005 в 16:29)
 

Спасибо за ответы

P@Sol ,
...и запускать его надо каждый раз, как измениться сожержание файл.csv

Вопрос : как именно его запускать (какой командой) и от куда ?


Peter ,
1 ) если в этой таблице уже есть данные ,то после команды :
Load data local infile 'users.txt'
эти данные сохраняются ?

2) Надо ли писать в файле excel название полей или достаточно только
данные ?
3) как сохранить файл txt c разделитилями табуляции (табуляцию надо
вносить вручную ) ?

   
 
 автор: P@Sol   (22.06.2005 в 10:15)   письмо автору
 
   для: Elina   (22.06.2005 в 09:42)
 

> Вопрос : как именно его запускать
>(какой командой) и от куда ?
что то типа www.вашсайт.ru/папка/update.php (update.php этот файл с кодом про который говорилось выше)
>

> 3) как сохранить файл txt c
>разделитилями табуляции (табуляцию надо
> вносить вручную ) ?
табуляция расставляеться автоматически, также как и при сохранении в csv - запятые

   
 
 автор: Elina   (22.06.2005 в 10:40)   письмо автору
 
   для: P@Sol   (22.06.2005 в 10:15)
 

P@Sol ,
сохранила файл в формате txt ,но когда его открыла запятых не видно -

И не все данныые один под другим (некоторрые смещены влево)

так и должно быть ?

   
 
 автор: cheops   (22.06.2005 в 10:48)   письмо автору
 
   для: Elina   (22.06.2005 в 10:40)
 

Да, так и должно быть, но про запятые не очень понятно... почему вы ожидаете их?

   
 
 автор: Elina   (22.06.2005 в 11:05)   письмо автору
 
   для: cheops   (22.06.2005 в 10:48)
 

cheops ,
для того чтобы знать где начинается новое поле (каждой строки)
запятые не нужны ?

   
 
 автор: P@Sol   (22.06.2005 в 11:33)   письмо автору
 
   для: Elina   (22.06.2005 в 11:05)
 

"файл txt c разделитилями табуляции" - данные разделяются символом табуляции
а новую строку видимо он автоматом определяет;)

   
 
 автор: cheops   (22.06.2005 в 10:37)   письмо автору
 
   для: Elina   (22.06.2005 в 09:42)
 

1) Да, предварительно загруженные данные сохраняются в таблице.
2) Вы можете писать названия полей, но они попадут в конечный файл и вам потребуется в ручную их удалять.

   
 
 автор: Elina   (22.06.2005 в 13:45)   письмо автору
 
   для: cheops   (22.06.2005 в 10:37)
 

Всем большое спасобо за помощь

буду пробывать

   
 
 автор: Elina   (23.06.2005 в 10:41)   письмо автору
 
   для: Elina   (22.06.2005 в 13:45)
 

Есть проблема
попыталась создать новую таблицу в б/д

<?php

include "config.php";

CREATE TABLE 'users_temp' (
'user_id' int(11) NOT NULL auto_increment,
.......
.......
'points' int(10) default '0',
PRIMARY KEY ('user_id'),
KEY 'uid' ('user_id'),
KEY 'uname' ('username'),
KEY 'user_session_time' ('user_session_time')
);

?>

Запускаю через www.сайт.ru/папка/update.php

Выдаёт ошибку -
Parse error: parse error, unexpected T_STRING
- указывает на CREATE TABLE 'nuke_users_tet' (

В чём ошибка ?

   
 
 автор: P@Sol   (23.06.2005 в 10:45)   письмо автору
 
   для: Elina   (23.06.2005 в 10:41)
 

Доброе утро, Elina..дело в том...что Вы наверно не правильно меня поняли...счас попробую объяснить сново

   
 
 автор: P@Sol   (23.06.2005 в 10:54)   письмо автору
 
   для: Elina   (23.06.2005 в 10:41)
 


CREATE TABLE 'test' (
'no' INT NOT NULL ,
'1' CHAR( 100 ) NOT NULL ,
'2' CHAR( 100 ) NOT NULL ,
'3' CHAR( 100 ) NOT NULL ,
'4' CHAR( 100 ) NOT NULL ,
'5' CHAR( 100 ) NOT NULL ,
'6' CHAR( 100 ) NOT NULL ,
'7' CHAR( 100 ) NOT NULL ,
'8' CHAR( 100 ) NOT NULL ,
'9' CHAR( 100 ) NOT NULL ,
'10' CHAR( 100 ) NOT NULL ,
'11' CHAR( 100 ) NOT NULL ,
'12' CHAR( 100 ) NOT NULL ,
'13' CHAR( 100 ) NOT NULL ,
INDEX ( 'no' )
);

этот код создания бд и его надо запустить один раз...это можно сделать двумя способами(на самом деле их больше):
1. если у вас на сервере есть phpmyadmin, то надо зайти в него, создать новую базу данных, допустим magazin. После создания базы данных ищем кнопку SQL и код, который приведен выше, вставляем в окошко...нажимаем "Пошел" и таблица создана.
2. создать файл newbd.php

<?
$host 
ваш хост;    //эти параметры
$user ваш юзер// надо узнать
$pass ваш пароль;// у админа 

$bd ваша бд (допустим magazin);

if (!
mysql_pconnect($host,$user,$pass)) echo "Нет соединения";
if (!
mysql_select_db($db))
{ echo 
"нет такой бд";
  if(!
mysql_query(create database $db)) echo "не могу создать новую бд";
 else 
"бд $bd создана";
}

$sql "CREATE TABLE 'test' (
'no' INT NOT NULL ,
'1' CHAR( 100 ) NOT NULL ,
'2' CHAR( 100 ) NOT NULL ,
'3' CHAR( 100 ) NOT NULL ,
'4' CHAR( 100 ) NOT NULL ,
'5' CHAR( 100 ) NOT NULL ,
'6' CHAR( 100 ) NOT NULL ,
'7' CHAR( 100 ) NOT NULL ,
'8' CHAR( 100 ) NOT NULL ,
'9' CHAR( 100 ) NOT NULL ,
'10' CHAR( 100 ) NOT NULL ,
'11' CHAR( 100 ) NOT NULL ,
'12' CHAR( 100 ) NOT NULL ,
'13' CHAR( 100 ) NOT NULL ,
INDEX ( 'no' )
)"
;
if (!
mysql_query($sql)) echo "Ошибка";
else 
"Новая таблица создана";
?>

   
 
 автор: Elina   (23.06.2005 в 11:08)   письмо автору
 
   для: P@Sol   (23.06.2005 в 10:54)
 

P@Sol ,
б/д уже готова мне надо добавить новую таблицу ...,а потом в неё данные .
В include "config.php" указан $host ,$user, $pass,$dbname
И при помощи -
CREATE TABLE 'users_temp' (
'user_id' int(11) NOT NULL auto_increment,
.......
.......
'points' int(10) default '0',
PRIMARY KEY ('user_id'),
KEY 'uid' ('user_id'),
KEY 'uname' ('username'),
KEY 'user_session_time' ('user_session_time')
);

?>

- пытаюсь создать новую таблицу

может что то не не правильно ?

   
 
 автор: P@Sol   (23.06.2005 в 11:18)   письмо автору
 
   для: Elina   (23.06.2005 в 11:08)
 

<? 
include "config.php";
global 
$host ,$user$pass,$dbname;

if (!
mysql_pconnect($host,$user,$pass)) echo "Нет соединения";  //соединяемся с бд
if (!mysql_select_db($dbname)) echo "нет такой бд";  //выбираем уже созданную таблицу

//формируем запрос на создание таблицы
$sql "CREATE TABLE 'test' ( 
'no' INT NOT NULL , 
'1' CHAR( 100 ) NOT NULL , 
'2' CHAR( 100 ) NOT NULL , 
'3' CHAR( 100 ) NOT NULL , 
'4' CHAR( 100 ) NOT NULL , 
'5' CHAR( 100 ) NOT NULL , 
'6' CHAR( 100 ) NOT NULL , 
'7' CHAR( 100 ) NOT NULL , 
'8' CHAR( 100 ) NOT NULL , 
'9' CHAR( 100 ) NOT NULL , 
'10' CHAR( 100 ) NOT NULL , 
'11' CHAR( 100 ) NOT NULL , 
'12' CHAR( 100 ) NOT NULL , 
'13' CHAR( 100 ) NOT NULL , 
INDEX ( 'no' ) 
)"

//создаем
if (!mysql_query($sql)) echo "Ошибка"
else 
"Новая таблица создана"
?>

тогда так

   
 
 автор: Elina   (23.06.2005 в 11:52)   письмо автору
 
   для: P@Sol   (23.06.2005 в 11:18)
 

P@Sol,
почему то выдал ошибку (упал на - if (!mysql_query($sql)) echo "Ошибка"; )
но таблицу создал (проверила в б/д)

теперь буду пытаться вносить данные

Большое спасибо

   
 
 автор: P@Sol   (23.06.2005 в 11:56)   письмо автору
 
   для: Elina   (23.06.2005 в 11:52)
 

> (проверила в б/д)
странно...что ошибка(краснея)...но раз создал....тогда ладно

а как вы проверили? у вас есть phpmyadmin?

   
 
 автор: Elina   (23.06.2005 в 11:59)   письмо автору
 
   для: P@Sol   (23.06.2005 в 11:56)
 

P@Sol,
да, phpmyadmin есть

   
 
 автор: P@Sol   (23.06.2005 в 12:01)   письмо автору
 
   для: Elina   (23.06.2005 в 11:59)
 

так там создание таблиц на много проще происходит...их можно потом редактировать и удалять:)

   
 
 автор: Elina   (23.06.2005 в 12:40)   письмо автору
 
   для: P@Sol   (23.06.2005 в 12:01)
 

P@Sol ,
скорее всего так и есть, но
я плохо знакома с phpmyadmin
есть возможность объяснить создание и удаление таблиц через phpmyadmin ?

   
 
 автор: P@Sol   (23.06.2005 в 12:48)   письмо автору
 
   для: Elina   (23.06.2005 в 12:40)
 

у вас нет книжки PHP 5. Практика создания web-сайтов? там было описание...

могу попробовать...написать доку

   
 
 автор: Elina   (23.06.2005 в 13:28)   письмо автору
 
   для: P@Sol   (23.06.2005 в 12:48)
 

P@Sol ,
книги нет ,может можно её найти в интернете
или >могу попробовать...написать доку

попыталась внести данные , но не получается...
использовала код из http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=3453

<?php
// Устанавливаем соединение с базой данных
global $dbhost ....
include "config.php";
// Помещаем содержимое файла в массив $arr
// Одна строка файла - один элемент массива
$arr = file("text.txt");
// В цикле производим разбор каждой строки
// формируем многострочный INSERT-запрос
$sql = "INSERT INTO test VALUES ";
$i = 1;
foreach($arr as $line)
{
// Разбиваем строку по запятой
$number = explode(",",$line);
// Уничтожаем последний элмемент с комментарием
// unset($number[13]); -в моём случаи не нужен
// Формируем строку многострочного INSERT (1,2,...,10)
$order = "($i,";
foreach($number as $num)
{
$order .= "$num,";
}
// Удаляем последнюю лишнюю запятую и
// добавляем закрывающую скобку
$order = substr($order,0,strlen($order) - 1).")";
$sql .= "$order,";
$i++;
}
// Удаляем последнюю лишнюю запятую и
// добавляем закрывающую скобку
$sql = substr($sql,0,strlen($sql) - 1);
// Выполняем SQL-запрос
if(!mysql_query($sql))
{
echo $sql."<br>";
echo "Ошибка - ".mysql_error();
}
?>

...запускаю и вижу на экране

INSERT INTO users_temp VALUES (1,10 NULL ..... NULL NULL 3 0 ),
(2, 12 NULL ......NULL NULL 0 0),
(3,.......
......
error in update data - You have an error in your SQL syntax

   
 
 автор: P@Sol   (23.06.2005 в 13:35)   письмо автору
 
   для: Elina   (23.06.2005 в 13:28)
 

первое что бросаеться в галаза - это надо поменять

global $dbhost ....
include "config.php";

эти две строки местами...

а второе - VALUES (1,10 NULL ..... NULL NULL 3 0 ),
в скобке должно быть все разделено запятыми...но почему это не так...я пока не знаю

   
 
 автор: P@Sol   (23.06.2005 в 13:54)   письмо автору
 
   для: Elina   (23.06.2005 в 13:28)
 

если пройти по ссылке, которую вы дали, то там похожая проблема

   
 
 автор: Elina   (23.06.2005 в 14:17)   письмо автору
 
   для: P@Sol   (23.06.2005 в 13:54)
 

P@Sol,
что то поняла
в этой сылке говорилось о данных ,уже разделённых запятой
,а у меня вместо запятой - табуляция -теперь надо изменить -
поиск по табуляции

$number = explode(",",$line); - поиск по запятой
изменила на
1) $number = explode(" ",$line); - результат -не везде ставит запятые
2) $number = explode(/t,$line); - результат -даёт ошибку

   
 
 автор: P@Sol   (23.06.2005 в 14:25)   письмо автору
 
   для: Elina   (23.06.2005 в 14:17)
 

а "\t"?

   
 
 автор: Elina   (23.06.2005 в 14:32)   письмо автору
 
   для: P@Sol   (23.06.2005 в 14:25)
 

P@Sol,
"\t" - воспринемает в буквальном смысле ... и ни чего не происходит

   
 
 автор: P@Sol   (23.06.2005 в 14:40)   письмо автору
 
   для: Elina   (23.06.2005 в 14:32)
 

тогда я сдаюсь....

   
 
 автор: Elina   (23.06.2005 в 15:08)   письмо автору
 
   для: P@Sol   (23.06.2005 в 14:40)
 

P@Sol,
всё правильно "\t" - работает
это я перепутала направление и написала "/t"

но всё равно пока не вставляет данные в таблицу.......просит Имя
вводить в 'имя' -как строку,теперь надо подумать как их (имена) туда
внести

уже пора уходить,смогу продолжить в воскресенье.....сообщу о результатах

спасибо

   
 
 автор: P@Sol   (23.06.2005 в 15:13)   письмо автору
 
   для: Elina   (23.06.2005 в 15:08)
 

присоедините файлик создания таблицы и тот которым вы пытаетесь вставлять данные

   
 
 автор: Elina   (23.06.2005 в 15:49)   письмо автору
3.4 Кб
 
   для: P@Sol   (23.06.2005 в 15:13)
 

Имеются 3 файла (не знаю как прикрепить их все вмести) - посылаю идин за другим
1) файл содаёт таблицу

   
 
 автор: Elina   (23.06.2005 в 15:52)   письмо автору
 
   для: Elina   (23.06.2005 в 15:49)
 

файл 2
вставляет данные

   
 
 автор: Elina   (23.06.2005 в 15:55)   письмо автору
 
   для: Elina   (23.06.2005 в 15:52)
 

файл 3
сами данные

спасибо

   
 
 автор: Elina   (26.06.2005 в 10:33)   письмо автору
 
   для: Elina   (23.06.2005 в 15:55)
 

Доброе утро,

напоминаю ...... что всё ещё пытаюсь загрузить данные из файла в б/д
буду сообщать о продвижениях

   
 
 автор: Elina   (26.06.2005 в 11:44)   письмо автору
 
   для: Elina   (26.06.2005 в 10:33)
 

не могу понять в чём ошибка

вношу
INSERT INTO nuke_users_tet VALUES (1,...''', '', '', '', ........., 3, '', 'NULL', 'NULL', '0 ');

получаю
error in update data - Column count doesn't match value count at row 1

   
 
 автор: cheops   (26.06.2005 в 13:00)   письмо автору
 
   для: Elina   (26.06.2005 в 11:44)
 

Это значит, что число полей в таблице nuke_users_tet и списке после ключевого слова VALUES не совпадают.

   
 
 автор: Elina   (26.06.2005 в 15:46)   письмо автору
 
   для: cheops   (26.06.2005 в 13:00)
 

исправила .... работает

спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования