Из exel в Mysql

Diversant
На сайте с 29.03.2006
Offline
329
709

Вот здесь взял скрипт

Сам код


<?php
$connect = mysql_connect("localhost","USER","PASS");
$db = mysql_select_db("DB",$connect) or die(mysql_error());
require_once ('Excel/reader.php');
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('cp-1251');
$data->setUTFEncoder('mb');
$data->read('1.xls');
error_reporting(E_ALL);
for($j=3; $j<=$data->sheets[0]['numRows']; $j++) // Начинаем выводить данные начиная с третьей строки

{
for($i=0; $i<=$data->sheets[0]['numCols']; $i++) // Начинаем выводить данные для всех столбцов

{
if(empty($data->sheets[0]['cells'][$j][$i]))
{
$row[] = "'empty'"; // Ликвидируем ошибку undefined offset

}
else
{
$row[] = "'".$data->sheets[0]['cells'][$j][$i]."'"; // Создаём массив из значений столбцов для каждой строки

}
}
$row = implode(",", $row); // Объединяем массив в строку, для запроса mysql

$sql = "INSERT INTO `xls` VALUES ($row)"; // Создаём запрос mysql

mysql_query("SET NAMES 'cp1251'"); // Устанавливаем кодировку для mysql

if(!mysql_query($sql)) // Выполняем запрос mysql

{
echo 'Error: '.mysql_error();
}
else
{
echo 'Add success!<br>';
}
unset($row); // Удаляем переменную, чтоб массив со строкой не путался

}
?>


Вроде все работает, но в базу данных вносятся данные два раза. Уже мозг взрывается почему дублируется дважды?

---------- Добавлено 14.11.2012 в 16:07 ----------

Никто не знает ?

bay_ebook
На сайте с 28.05.2010
Offline
111
#1


for($j=3; $j<=$data->sheets[0]['numRows']; $j++)

{
for($i=0; $i<=$data->sheets[0]['numCols']; $i++)

цикл в цикле, причем абсолютно одинаковые, за исключение строки старта, вот и два раза вносят. Один цикл оставить нужно.

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
siv1987
На сайте с 02.04.2009
Offline
427
#2

bay_ebook, там один вроде читает строки, другой столбцы.

Diversant,


//$sql = "INSERT INTO `xls` VALUES ($row)"; // Создаём запрос mysql
echo "INSERT INTO `xls` VALUES ($row)";
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#3


function ref($filepath)
{
set_include_path('PhpExcel/Classes/');
require_once 'PHPExcel.php'; //подключаем наш фреймворк
$ar=array(); // инициализируем массив
$inputFileType = PHPExcel_IOFactory::identify($filepath); // узнаем тип файла
$objReader = PHPExcel_IOFactory::createReader($inputFileType); // создаем объект для чтения файла
$objPHPExcel = $objReader->load($filepath); // загружаем данные файла в объект
$ar = $objPHPExcel->getActiveSheet()->toArray(); // выгружаем данные из объекта в массив
return $ar; //возвращаем массив
}
$arr = ref('spisok.xlsx');

У меня это вот так делается

PHPExcel библиотека

В итоге имеем многомерный массив $ARR. Он содержит в себе массивы строк, которые в свою очередь содержат уже ячейки эксэля

ЗЫ, самый топорный вариант - сделать индекс, чтобы при повторном добавлении было "Dublicate entry key..."

Подпись))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий