2015-02-07 2 views
0

Я пытаюсь загрузить файл excel в мою базу данных mysql с помощью php, но у меня есть две проблемы: первая, я получаю «Уведомление: Неопределенное смещение: «предупреждение для каждой строки файла .csv, а вторая проблема заключается в том, что он импортирует все три столбца файла .csv в один из db.Excel в MySQL с использованием импорта PHP в один столбец

Мой код выглядит следующим образом:

<?php 
if(isset($_POST["Import"])) 
{ 

    $conexion=mysql_connect("localhost","root","") or die("Problemas en la conexion"); 
    mysql_select_db("kontor",$conexion) or die("Problemas en la seleccion de la base de datos"); 

    echo $filename=$_FILES["file"]["tmp_name"]; 
    if($_FILES["file"]["size"] > 0) 
    { 
     $file = fopen($filename, "r"); 
     $count = 0; 
     while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) 
     { 
      $count++; 
      if($count>1){ 
      mysql_query("INSERT into stock (nombre,prneto,descr) values ('$emapData[0]','$emapData[1]','$emapData[2]')", $conexion) 
or die("Problemas en el select".mysql_error()); 

      }  
     } 
     fclose($file); 
     echo 'Archivo importado'; 
     //header('Location: index.php'); 
    } 
    else 
     echo 'Formato de archivo incorrecto'; 
} 
?> 

ответ

0

Просто взгляните на CSV-файл ... что разделитель и Корпус используется?

Excel часто использует; и "для сепаратора и корпуса

большую часть времени один из них будет делать эту работу:.

while (($emapData = fgetcsv($file, 10000, ";", '"')) !== FALSE) 

// or 

while (($emapData = fgetcsv($file, 10000, ",", '"')) !== FALSE) 
0

Excel обычно не любит последовательно процитировать значения столбцов CSV; он делает это только тогда, когда он считает необходимым (по крайней мере, с некоторыми версиями excel). По этой причине я обычно не рекомендую использовать CSV сгенерированный Excel и выбрать только читать файл первенствовать в своем родном формате с PHPExcel

// this is the older version of excel for .xls 
// if the file is xlsx you would use PHPExcel_Reader_Excel2007() 
$objReader = new PHPExcel_Reader_Excel5(); 

$objPHPExcel = $objReader->load($_FILES["file"]["tmp_name"]); 
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); 

// you should also be using PDO or mysqli for your db interactions 
// NOT mysql - this example will use pdo 

$db = new PDO($dsn, $user, $pass, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
)); 



try { 
    // presumebaly you want this operation to be atomic 
    // ie. if any one row fails don't insert any of the rows 
    // so we will use a transaction 
    $db->beginTransaction(); 

    // prepare the query 
    $stmt = $db->prepare('INSERT into stock (nombre,prneto,descr) values (?,?,?)'); 

foreach ($sheetData as $row) { 
    // execute the insert for a row of csv 
    $stmt->execute(array_values($row)); 
} 

// attempt to commit the transaction 
$db->commit(); 


} catch (Exception $e) { 
    // we had an error somewhere, roll back the transaction 
    $db->rollBack(); 

    // retrhow the error 
    throw $e; 
} 
Смежные вопросы