Hola, como están, quisiera ver si me pueden ayudar con este problema que tengo. Necesito subir a través de un formulario php un Excel con datos y a la vez insertalos en la BD postgres.
Los datos que insertaré son empresa_id, rut, dc, nombre, ape_paterno, ape_materno, área_id. El ID inicial es incremental, por cada carga se incrementa.
Código PHP:
Ver original<?
include("session.php");
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>:: Importar de Excel a la Base de Datos ::</title>
</head>
<body>
<!-- FORMULARIO PARA SOICITAR LA CARGA DEL EXCEL -->
Selecciona el archivo a importar:
<form name="importa" method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data" >
<input type="file" name="excel" />
<input type='submit' name='enviar' value="Importar" />
<input type="hidden" value="upload" name="action" />
</form>
<!-- CARGA LA MISMA PAGINA MANDANDO LA VARIABLE upload -->
<?php
if ($action == "upload"){
//cargamos el archivo al servidor con el mismo nombre
//solo le agregue el sufijo bak_
$archivo = $_FILES['excel']['name'];
$tipo = $_FILES['excel']['type'];
$destino = "bak_".$archivo;
if (copy($_FILES['excel']['tmp_name'],$destino)) echo "Archivo Cargado Con Éxito"; else echo "Error Al Cargar el Archivo";
////////////////////////////////////////////////////////
/** Clases necesarias */
require_once('Classes/PHPExcel.php');
require_once('Classes/PHPExcel/Reader/Excel2007.php');
// Cargando la hoja de cálculo
$objReader = new PHPExcel_Reader_Excel2007();
$objPHPExcel = $objReader->load("bak_".$archivo);
$objFecha = new PHPExcel_Shared_Date();
// Asignar hoja de excel activa
$objPHPExcel->setActiveSheetIndex(0);
//conectamos con la base de datos
include("include/conn.php");
// Llenamos el arreglo con los datos del archivo xlsx
for ($i=1;$i<=1000;$i++){
$_DATOS_EXCEL[$i]['empresa_id'] = $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getCalculatedValue();
$_DATOS_EXCEL[$i]['rut'] = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getCalculatedValue();
$_DATOS_EXCEL[$i]['dv']= $objPHPExcel->getActiveSheet()->getCell('C'.$i)->getCalculatedValue();
$_DATOS_EXCEL[$i]['nombre']= $objPHPExcel->getActiveSheet()->getCell('D'.$i)->getCalculatedValue();
$_DATOS_EXCEL[$i]['ape_paterno'] = $objPHPExcel->getActiveSheet()->getCell('E'.$i)->getCalculatedValue();
$_DATOS_EXCEL[$i]['ape_materno'] = $objPHPExcel->getActiveSheet()->getCell('F'.$i)->getCalculatedValue();
$_DATOS_EXCEL[$i]['area_id'] = $objPHPExcel->getActiveSheet()->getCell('G'.$i)->getCalculatedValue();
}
}
//si por algo no cargo el archivo bak_
else{echo "Necesitas primero importar el archivo";}
$errores=0;
//recorremos el arreglo multidimensional
//para ir recuperando los datos obtenidos
//del excel e ir insertandolos en la BD
foreach($_DATOS_EXCEL as $campo => $valor){
$sql = "insert into sistema.colaboradores values (";
foreach ($valor as $campo2 => $valor2){
$campo2 == "area_id" ? $sql.= $valor2."');" : $sql.= $valor2."','";
}
if (!$result){ echo "Error al insertar registro ".$campo;$errores+=1;}
}
/////////////////////////////////////////////////////////////////////////
echo "<strong><center>ARCHIVO IMPORTADO CON EXITO, EN TOTAL $campo REGISTROS Y $errores ERRORES</center></strong>";
//una vez terminado el proceso borramos el
//archivo que esta en el servidor el bak_
}
?>
</body>
</html>
Estoy usando este código para poder hacerlo, pero me dice que tengo estos problemas:
copy(bak_usuario.csv): failed to open stream: Permission denied in /home/handassistant/admindev/importar.php
Invalid argument supplied for foreach() in /home/handassistant/admindev/importar.php
unlink(bak_usuario.csv): No such file or directory in /home/handassistant/admindev/importar.php
Si me pudieran ayudar a resolver mi error por favor. O que me pudieran ayudar con otro código que me permita hacer lo que necesito.
Gracias
Saludos