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

Форум PHP

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

 

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

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

тема: не импортируется csv
 
 автор: ШИМ   (21.03.2007 в 20:57)   письмо автору
 
 


// Осуществляем соединение с базой данных
  require_once("../config.php");
  if(empty($_FILES['csv']['tmp_name']))
      puterror("Ошибка при отправке csv-файла");
  if(!($fp = fopen($_FILES['csv']['tmp_name'],"rb"))) 
      puterror("Ошибка при открытии отправленного файла");
    // Читаем содержимое файла
    $buffer = fread($fp,filesize($_FILES['csv']['tmp_name']));
    // Закрываем файл
    fclose($fp);
    // Удаляем файл
    unlink($_FILES['csv']['tmp_name']);
    // Присваиваем по умолчанию 
    $separator = ";";
    // Если передан параметр separator изменяем значение переменной $separator
    $separator = $_POST['separator'];
    // Если имеются пустые позиции забиваем их прочерком -
    $buffer = str_replace($separator.$separator, $separator."-".$separator,$buffer);
    $buffer = str_replace("\n".$separator, "\n-".$separator,$buffer);
    $buffer = str_replace($separator."\n", $separator."-\n",$buffer);
    // Разбиваем файл по строкам, каждую из которых заносим
    // в отдельный элемент массива $strtmp
    $tok = strtok($buffer,"\n");
    while($tok)
    {
      $tok = strtok("\n");
      $strtmp[] = $tok;
    }
    // Начало формирования SQL-запроса на вставку данных из
    // csv-файла
    $insert_query = "insert into test values ";
    // Разбиваем строку по отдельным словам, используя
    // разделитель $separator
    foreach($strtmp as $value)
    {
      // Если строка пуста - выходим из цикла. Пустые строки могут появится,
      // если в конце csv-файла находятся пустые строки.
      if(empty($value)) break;
      // Определяем район
      // Имя
      $name = strtok($value,$separator);
      $price=strtok(substr($value,strlen($name),strlen($value)),$separator);
      
      // Формируем и выполняем SQL-запрос на добавление позиции
      $insert_query .= "(NULL,
                        '$name',
                        $price),";
    }
    // Из запроса $insert_query удаляем последнюю запятую
    $insert_query = substr($insert_query,0,strlen($insert_query)-1);
     // Выполняем SQL-запросы
    if(mysql_query($insert_query))
    {
      echo "Успешно";
    }
    else
    {
      echo $insert_query;
      echo "<br>";
    }
?>

вобщем в конце если запрос выполнен удачно, то - УСПЕШНО,
если с ошибкой выводит сам запрос!
Так вот что не так в запросе?

insert into test values (NULL, 'first', 100 ),(NULL, 'third', 300 ),(NULL, 'second', 200 )

   
 
 автор: Trianon   (21.03.2007 в 21:12)   письмо автору
 
   для: ШИМ   (21.03.2007 в 20:57)
 

если запрос выполнен неудачно, помимо текста запроса имеет смысл вывести диагностику
echo mysql_error();
чтобы понять, в чем именно ошибка.

   
 
 автор: ШИМ   (21.03.2007 в 21:27)   письмо автору
 
   для: Trianon   (21.03.2007 в 21:12)
 

Спасибо, с этим разобрался!
Только теперь непойму!
Если в форме разделитель указываеш - ;
то работает, а елси просто ЗАПЯТАЯ, то не работает!!!
Ведь в csv разделителями идут ЗАПЯТЫЕ , а не ТОЧКА С ЗАПЯТОЙ

   
 
 автор: Trianon   (21.03.2007 в 22:32)   письмо автору
 
   для: ШИМ   (21.03.2007 в 21:27)
 

А Вы создайте csv-файл тем же excel-ем, и разглядите его получше.

Они разные бывают.

   
 
 автор: ШИМ   (21.03.2007 в 23:20)   письмо автору
 
   для: Trianon   (21.03.2007 в 22:32)
 

Странно ВОТ ВЫБИРАЕШ СОХРАНИТЬ КАК -> СSV(разделители ЗАПЯТЫЕ) !
cохранил, открыл в блокноте а разделитель не ЗАПЯТАЯ, А ТОЧКА С ЗАПЯТОЙ

   
 
 автор: cheops   (22.03.2007 в 01:10)   письмо автору
 
   для: ШИМ   (21.03.2007 в 23:20)
 

Так надо, это же Excel, причём переведённый на русский язык нашими умельцами... просто знайте, что на самом деле это точка с запятой.

   
 
 автор: ШИМ   (22.03.2007 в 01:17)   письмо автору
 
   для: cheops   (22.03.2007 в 01:10)
 

Понятно , а я то думал

   
 
 автор: Trianon   (22.03.2007 в 09:40)   письмо автору
 
   для: cheops   (22.03.2007 в 01:10)
 

Я полагаю, тут если и наши постарались, то вовсе не "умельцы", а скорее традиции.

В панели управления, раздел "языки и стандарты", на вкладке "числа" есть параметр "Разделитель элементов списка".
В американском стандарте это запятая.
У нас это точка с запятой, поскольку запятая -традиционный разделитель целой и дробной части.
CSV-разделитель excel'ем берется именно оттуда.

   
Rambler's Top100
вверх

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