Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/03/2014, 10:49
tuuutooo
 
Fecha de Ingreso: septiembre-2008
Mensajes: 72
Antigüedad: 15 años, 7 meses
Puntos: 0
Pregunta Php y postgres

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
  1. <?
  2. include("session.php");
  3.  
  4. ?>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>:: Importar de Excel a la Base de Datos ::</title>
  8. </head>
  9.  
  10. <body>
  11. <!-- FORMULARIO PARA SOICITAR LA CARGA DEL EXCEL -->
  12. Selecciona el archivo a importar:
  13. <form name="importa" method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data" >
  14. <input type="file" name="excel" />
  15. <input type='submit' name='enviar'  value="Importar"  />
  16. <input type="hidden" value="upload" name="action" />
  17. </form>
  18. <!-- CARGA LA MISMA PAGINA MANDANDO LA VARIABLE upload -->
  19.  
  20. <?php
  21. extract($_POST);
  22. if ($action == "upload"){
  23. //cargamos el archivo al servidor con el mismo nombre
  24. //solo le agregue el sufijo bak_
  25.     $archivo = $_FILES['excel']['name'];
  26.     $tipo = $_FILES['excel']['type'];
  27.     $destino = "bak_".$archivo;
  28.     if (copy($_FILES['excel']['tmp_name'],$destino)) echo "Archivo Cargado Con Éxito";
  29.     else echo "Error Al Cargar el Archivo";
  30. ////////////////////////////////////////////////////////
  31. if (file_exists ("bak_".$archivo)){
  32. /** Clases necesarias */
  33. require_once('Classes/PHPExcel.php');
  34. require_once('Classes/PHPExcel/Reader/Excel2007.php');
  35.  
  36. // Cargando la hoja de cálculo
  37. $objReader = new PHPExcel_Reader_Excel2007();
  38. $objPHPExcel = $objReader->load("bak_".$archivo);
  39. $objFecha = new PHPExcel_Shared_Date();      
  40.  
  41. // Asignar hoja de excel activa
  42. $objPHPExcel->setActiveSheetIndex(0);
  43.  
  44. //conectamos con la base de datos
  45.  
  46. include("include/conn.php");
  47. // Llenamos el arreglo con los datos  del archivo xlsx
  48.     for ($i=1;$i<=1000;$i++){
  49.         $_DATOS_EXCEL[$i]['empresa_id'] = $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getCalculatedValue();
  50.         $_DATOS_EXCEL[$i]['rut'] = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getCalculatedValue();
  51.         $_DATOS_EXCEL[$i]['dv']= $objPHPExcel->getActiveSheet()->getCell('C'.$i)->getCalculatedValue();
  52.         $_DATOS_EXCEL[$i]['nombre']= $objPHPExcel->getActiveSheet()->getCell('D'.$i)->getCalculatedValue();
  53.         $_DATOS_EXCEL[$i]['ape_paterno'] = $objPHPExcel->getActiveSheet()->getCell('E'.$i)->getCalculatedValue();
  54.         $_DATOS_EXCEL[$i]['ape_materno'] = $objPHPExcel->getActiveSheet()->getCell('F'.$i)->getCalculatedValue();
  55.         $_DATOS_EXCEL[$i]['area_id'] = $objPHPExcel->getActiveSheet()->getCell('G'.$i)->getCalculatedValue();
  56.     }
  57. }
  58. //si por algo no cargo el archivo bak_
  59. else{echo "Necesitas primero importar el archivo";}
  60. $errores=0;
  61. //recorremos el arreglo multidimensional
  62. //para ir recuperando los datos obtenidos
  63. //del excel e ir insertandolos en la BD
  64. foreach($_DATOS_EXCEL as $campo => $valor){
  65.     $sql = "insert into sistema.colaboradores values (";
  66.  
  67.     foreach ($valor as $campo2 => $valor2){
  68.  
  69.     $campo2 == "area_id" ? $sql.= $valor2."');" : $sql.= $valor2."','";
  70.     }
  71.     $result=pg_query($conn, $sql);
  72.     if (!$result){ echo "Error al insertar registro ".$campo;$errores+=1;}
  73.    
  74.     }
  75. /////////////////////////////////////////////////////////////////////////
  76.  
  77. echo "<strong><center>ARCHIVO IMPORTADO CON EXITO, EN TOTAL $campo REGISTROS Y $errores ERRORES</center></strong>";
  78. //una vez terminado el proceso borramos el
  79. //archivo que esta en el servidor el bak_
  80. unlink($destino);
  81. }
  82.  
  83. ?>
  84. </body>
  85. </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