Foros del Web » Programando para Internet » PHP »

Php y postgres

Estas en el tema de Php y postgres en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 13/03/2014, 10:49
 
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
  #2 (permalink)  
Antiguo 13/03/2014, 11:10
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Php y postgres

El problema es de permisos, el usuario que ejecuta el apache no tiene permiso de escritura en ese directorio. Si estas en un hosting de pago necesitas tratarlo con quien contrataste o ver si tu panel te da opciones para resolverlo.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 13/03/2014, 12:19
 
Fecha de Ingreso: septiembre-2008
Mensajes: 72
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Php y postgres

Muchas gracias por tu respuesta, y es posible poder realizar esto de otra forma?
  #4 (permalink)  
Antiguo 14/03/2014, 08:35
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Php y postgres

Las opciones serian acceso via ssh, a través de tu panel de control o que lo haga tu prestador de servicios.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: fecha, formulario, html, postgres, registro, sql, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:28.