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

Форум MySQL

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

 

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

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

тема: парсер xls в базу данных
 
 автор: dirol   (06.04.2011 в 10:54)   письмо автору
17.6 Кб
 
 

помогите доделать парсер

он заносит каждую строчку по отдельности в базу а надо

чтобы был номер потом текст


    $sql2 = mysql_connect('localhost','root','');
    mysql_query("SET NAMES cp1251");
    mysql_select_db('solid', $sql2);

    include('xlsparser.php');
    $file = "01.xls";
    $sheets = parse_excel($file);
    $is=0;
    foreach($sheets as $sheet){

        print "sheet #$is\n--------\n";

        foreach($sheet as $row){
            foreach($row as $col){


                 $print= "$col|";

                 $echo= explode("|", $print);

                  print_r($echo);
                  mysql_query("INSERT INTO `stories` ( `id` , `catid` , `hometext` ) VALUES ('', '$is', '$col');", $sql2);




            }
            print"\n";
        }
        $is++;
    }



подскажите пожалуйста как сделать чтолбы номер и текст шли одной строкой и номер заносился в id базы и текст


CREATE TABLE `stories` (
  `id` int(11) NOT NULL auto_increment,
  `catid` int(11) NOT NULL default '0',
  `hometext` text,
  PRIMARY KEY  (`id`),
  KEY `catid` (`catid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

  Ответить  
 
 автор: cheops   (06.04.2011 в 11:35)   письмо автору
 
   для: dirol   (06.04.2011 в 10:54)
 

>чтобы был номер потом текст
Правильно ли я понимаю, что номер это (или что-то другое?)
print "sheet #$is\n--------\n";

а текст
print_r($echo);

PS Нужно больше подробностей, так как достаточно сложно ориентироваться не имея на руках 01.xls.

  Ответить  
 
 автор: dirol   (06.04.2011 в 12:06)   письмо автору
 
   для: cheops   (06.04.2011 в 11:35)
 

так файл лежит в архиве который я прикрепил

  Ответить  
 
 автор: cheops   (06.04.2011 в 12:36)   письмо автору
 
   для: dirol   (06.04.2011 в 12:06)
 

Ага, увидел, сейчас повожусь...

  Ответить  
 
 автор: cheops   (06.04.2011 в 13:07)   письмо автору
 
   для: dirol   (06.04.2011 в 10:54)
 

Вот что у меня получилось
<?php
  
// Настраиваем щадящий уровень тревожности интерпретатора
  
error_reporting(E_ALL & ~E_NOTICE); 
  
// Установка соединения с базой данных
  
$sql2 mysql_connect('localhost','root','');
  
mysql_query("SET NAMES cp1251");
  
mysql_select_db('solid'$sql2);

  
// Чистим таблицу от старых значений
  
$query "DELETE FROM `stories`";
  if(!
mysql_query($query)) exit("Ошибка выполнения SQL-запроса ".mysql_error());
  
// Подключаем XLS-парсер
  
include('xlsparser.php');
  
$file "01.xls";
  
$sheets parse_excel($file);
  
$is=0;
  foreach(
$sheets as $sheet)
  {
    foreach(
$sheet as $row)
    {
      
$sql = array();
      if(!empty(
$row[0]) && !empty($row[1]))
      {
        
// Формируем массив для создания многострочного INSERT-запроса
        
$sql[] = "('NULL', '$is', '".mysql_escape_string($row[1])."')";
        
// Если помещать в таблицу номер id, но нужно убирать PRIMARY KEY
        // с поля id, так как в XLS-таблице номера дублируются, в качестве
        // PRIMARY KEY лучше создать индекс на двух столбцах id и catid
        //$sql[] = "('".intval($row[0])."', '$is', '".mysql_escape_string($row[1])."')";
      
}
      
// Если есть хотя бы одна строка
      
if(!empty($sql))
      {
        
// Формируем и выполняем многострочную INSERT-вставку
        
$query "INSERT INTO `stories`
                  (`id`, `catid`, `hometext`) VALUES "
.
                  
implode(","$sql);
        if(!
mysql_query($query)) exit("Ошибка выполнения SQL-запроса ".mysql_error());
      }
    }
    
$is++;
  }
?>
Вам скорее всего придется пересмотреть первичный ключ таблицы, если вы хотите, чтобы номера были теми же, что и в XLS-листе. Иначе происходит дублирование первичного ключа (либо вообще удаляйте индекс первичного ключа, либо генерируйте его автоматически, как в скрипте выше, либо стройте его по двум столбцам).

  Ответить  
Rambler's Top100
вверх

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