PHP - CARGA DE ARCHIVOS CSV

 
Vista:
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por Juan Camilo (21 intervenciones) el 04/09/2016 05:03:08
Hola a todos cómo están
Resulta que tengo un formulario que por medio de POST carga el contenido de un archivo de extensión .CSV el cual con el código que tengo sólo me carga dicho archivo si y solo si lo ejecuto en el localhost, pero resulta que cuando lo subo al servidor no ejecuta y muestra error.

A continuación les muestro el codigo del formulario y del archivo que procesa los datos del formulario

importar.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
    session_start();
    include('conexion.php');
    echo '<hrml><body>';
    echo '<table align=center>';
        echo '<tr><td colspan=2 width=100 height=100>';
        echo "Bienvenido ";
        echo '<title>'.$_SESSION['name_u'].'</title>';
        echo '<br/>'.$_SESSION['nick_u'];
        echo '<br/>'.$_SESSION['doc_u'];
        echo '<br/>'.$_SESSION['name_u'];
        echo '<br/>'.$_SESSION['apellido_u'];
        echo '<br/>'.date('Y-m-d');
        echo '<br><a href=cerrar.php>Cerrar Sesi&oacute;n</a><br></td>';
        echo '<td colspan=2 width=530 height=100 align=center><h1>Administrador</h1></td>';
        echo '<td colspan=2 align=center><img src=Administrador.png width=100 height=100/></td>';
        echo '<tr><td colspan=5><hr width=1000></tr></td>';
        echo '<tr><td align=center colspan=5 height="70"><h1>Importaci&oacute;n de Datos</h1></td></tr>';
        echo '<tr><td colspan=5 align=center>Para llevar a cabo la importaci&oacute;n de Libros, es necesario tener listo el archivo de EXCEL con extensi&oacute;n .CSV y no debe tener c&oacute;digos de libros repetidos.';
                echo '<form method=post action=importar_sql.php enctype=multipart/form-data>';
                echo '<table>';
                    echo '<tr><td><br>Seleccione el Archivo:';
                    echo '<input type=file accept=.csv name=archivo size=10/>';
                    echo '<input type=hidden value=cargar name=action/>';
                    echo '<tr><td align=center colspan=2><input type=submit value=Importar Libros/></td></tr>';
                    echo '<tr><td align=center colspan=2><a href=appadmin.php>Volver al Men&uacute;</a></td></tr> ';
                echo '</table></td>';
        echo '<tr><td colspan=5><hr width=1000>';
        echo '<p align=center>Este software fue desarrollado por Juan Camilo</p></tr></td>';
    echo '</table>';
    echo '</html>';
?>

importar_sql.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
    session_start();
    include('conexion.php');
    echo '<hrml><body>';
    echo '<table align=center>';
        echo '<tr><td colspan=2 width=100 height=100>';
        echo "Bienvenido ";
        echo '<title>'.$_SESSION['name_u'].'</title>';
        echo '<br/>'.$_SESSION['nick_u'];
        echo '<br/>'.$_SESSION['doc_u'];
        echo '<br/>'.$_SESSION['name_u'];
        echo '<br/>'.$_SESSION['apellido_u'];
        echo '<br/>&Uacute;ltimo ingreso desde: <b>'.gethostname().'</b>';
        echo '<br/>'.date('Y-m-d');
        echo '<br><a href=cerrar.php>Cerrar Sesi&oacute;n</a><br></td>';
        echo '<td colspan=2 width=530 height=100 align=center><h1>Administrador</h1></td>';
        echo '<td colspan=2 align=center><img src=Administrador.png width=100 height=100/></td>';
        echo '<tr><td colspan=5><hr width=1000></td></tr>';
        echo '<tr><td colspan=5 align=center><h1>Resultados de la Importaci&oacute;n</h1></td></tr>';
 
    $row = 0;
 
 
    //el valor mil indica la cantidad de bytes del archivo
    //si el archivo es un poco grande es mejor dejarlo en 0
    //en algunos casos el ";" no es aceptado usa ","
    while ($data=fgetcsv($fp, 1000, ";"))
    {
    $num = count($data);
    print " <br>";
    $row++;
    echo '<tr><td colspan=5 align=center>'."$row- ".$data[0].' - '.$data[1].' - '.$data[2].' - '.$data[3].' - '.$data[4].'</td></tr>';
    $inser="INSERT INTO libro(id_lb,nombre_lb,autor_lb,ubicacion_lb,cantidad_lb) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";
    $rt_i=mysql_query($inser,$conexion) or die ('no se ingresaron datos');
    }
    echo '<tr><td colspan=5><hr width=1000>';
    echo '<tr><td colspan=5 align=center><h1>Archivo Cargado Exitosamente</h1></td></tr>';
    echo '<tr><td><a href=importar.php>Volver al Men&uacute;</a></td></tr></table>';
    echo '<tr><td colspan=5><hr width=1000>';
    echo '<p align=center>Este software fue desarrollado por Juan Camilo </p></tr></td>';
    fclose($fp);
?>

Muchas gracias con la ayuda que me puedan brindar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por xve (6935 intervenciones) el 04/09/2016 08:34:20
Hola Juan Camilo, exactamente que error te da?

A simple vista, no se encontrar-lo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por Juan Camilo (21 intervenciones) el 04/09/2016 20:04:12
hola xve me sale este error:

Warning: fgetcsv() expects parameter 1 to be resource, null given in /data/webs/sites/b/i/bibliotecav/web/importar_sql.php on line 27
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por kip (877 intervenciones) el 04/09/2016 20:42:10
Hola, te indica que falta un parametro, que segun veo en tu codigo es $fp, el cual deberia ser un fichero abierto con fopen(), popen(), o fsockopen().

En tu caso al final veo que haces un fclose() de dciha variable $fp pero no veo donde abres tu archivo para proceder a leerlo.

Pasate por el manual y fijate en los parametros asi mismo en el ejemplo, debes obtener los datos del fichero:
http://php.net/manual/es/function.fgetcsv.php

Nos cuentas como vas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por Juan Camilo (21 intervenciones) el 05/09/2016 06:46:04
kip hola cómo estás
Conseguí este código que me permite seleccionar un archivo y moverlo a una ubicacion
1
2
3
4
5
6
7
8
9
10
11
if($_FILES["archivo"]["size"]>1000000){
        echo "Solo se permiten archivos menores de 1MB";
    }else{
        // sacamos todas las propiedades del archivo
        $nombre_archivo = $_FILES['archivo']['name'];
        $tipo_archivo= $_FILES['archivo']['type'];
        $tamano_archivo = $_FILES["archivo"]['size'];
        $direccion_temporal = $_FILES['archivo']['tmp_name'];
        // movemos el archivo a la capeta de nuestro servidor
        move_uploaded_file($_FILES['archivo']['tmp_name'],".".$_FILES['archivo']['name']);
    }

Y tengo este otro que me permite procesar un archivo csv de un nombre específico y que este en un directorio específico
1
2
3
4
5
6
7
8
9
10
11
12
13
$fila = 1;
    if (($gestor = fopen("archivos2.csv","r"))!== FALSE) {
        while (($data = fgetcsv($gestor,1000,",")) !== FALSE) {
                $num = count($data);
                echo "<p> $num de campos en la línea $fila: <br /></p>\n";
                $fila++;
                for ($c=0; $c < $num; $c++) {
                    echo $data[$c] . "<br />\n";
 
            }
        }
        fclose($gestor);
    }

Por separado funcionan de maravilla, pero juntos funcionan parcialmente es decir, funciona el primero pero no el segundo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por xve (6935 intervenciones) el 05/09/2016 08:14:51
Hola Juan, te da algún error? la ruta del archivo es correcta?

Si están juntos, no deberías de indicar $_FILES['archivo']['name'] en vez de "archivos2.csv"?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por Juan Camilo (21 intervenciones) el 05/09/2016 08:52:54
Hola xve lo que me dijiste lo contiene la variable $nombre_archivo y la puse donde me indicaste y me funcionó pero, resulta que el fin de que esto me funcione es que dicho archivo debe cargarse en una base de datos y cuando incluyo la consulta SQL de insert me arroja un error y no logro ver cual es el problema

Mi código quedó así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if($_FILES["archivo"]["size"]>1000000){
        echo "Solo se permiten archivos menores de 1MB";
    }else{
        // sacamos todas las propiedades del archivo
        $nombre_archivo = $_FILES['archivo']['name'];
        $tipo_archivo= $_FILES['archivo']['type'];
        $tamano_archivo = $_FILES["archivo"]['size'];
        $direccion_temporal = $_FILES['archivo']['tmp_name'];
        // movemos el archivo a la capeta de nuestro servidor
        move_uploaded_file($_FILES['archivo']['tmp_name'],".".$_FILES['archivo']['name']);
    }
 
    $fila = 0;
    if (($gestor = fopen(".$nombre_archivo.","r"))!== FALSE) {
        while (($data = fgetcsv($gestor,1000,",")) !== FALSE) {
                $num = count($data);
                $fila++;
                for ($c=0; $c < $num; $c++) {
                    $inser="INSERT INTO libro(id_lb,nombre_lb,autor_lb,ubicacion_lb,cantidad_lb) VALUES('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";
                    $rt_i=mysql_query($inser,$conexion) or die ('La consulta de Registro de Datos NO fue Ejecutada');
                }
        }
        fclose($gestor);
    }

El error que me sale es este: Notice: Undefined offset: 1 in C:\xampp\htdocs\biblioteca\importar_sql.php on line 62 y dicha línea de código es esta:
1
$inser="INSERT INTO libro(id_lb,nombre_lb,autor_lb,ubicacion_lb,cantidad_lb) VALUES('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";

Que estoy haciendo mal?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por xve (6935 intervenciones) el 05/09/2016 14:26:17
Hola Juan, esta linea, la puedes dejar así sin las comillas:
1
if (($gestor = fopen($nombre_archivo,"r"))!== FALSE) {

Sobre el error que haces referencia, no es un error, es un Notice... puede ser que el array $data no tenga tantos valores?

Prueba ha hacer un
1
echo $inser;
haber que te devuelve.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por Juan Camilo (21 intervenciones) el 05/09/2016 19:13:19
xve si quito las comillas dónde me indicas, me muestra un Warning.

Si hago un echo $inser me muestra el mismo Notice.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por Juan Camilo (21 intervenciones) el 05/09/2016 20:48:21
xve hola ya por fin encontré el problema y lo solucioné, este es mi código

1
2
3
4
5
6
7
8
9
10
11
12
$fila = 1;
    if (($gestor = fopen(".$nombre_archivo.","r"))!== FALSE) {
        while (($data = fgetcsv($gestor,1000,";")) !== FALSE) {
                $num = count($data);
                echo "<p> $num de campos en la línea $fila: <br /></p>\n";
                $fila++;
                echo '<tr><td colspan=5 align=center>'."$fila- ".$data[0].' - '.$data[1].' - '.$data[2].' - '.$data[3].' - '.$data[4].'</td></tr>';
                $inser="INSERT INTO libro(id_lb,nombre_lb,autor_lb,ubicacion_lb,cantidad_lb) VALUES('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";
                $rt_i=mysql_query($inser,$conexion) or die ('La consulta de Registro de Datos NO fue Ejecutada');
        }
        fclose($gestor);
    }

Gracias a todos por ayudarme pero persiste mi problema, me funciona en el localhost pero en el servidor no.

En el servidor me muestra un warning en la línea 33 y la línea 33 es esta:

1
if (($gestor = fopen(".$nombre_archivo.","r"))!== FALSE)

El Warning que me saca es:


Warning: fopen() [function.fopen]: Unable to access archivo2.csv in /data/webs/sites/b/i/bibliotecav/web/importar_sql.php on line 33

Warning: fopen(archivo2.csv) [function.fopen]: failed to open stream: No such file or directory in /data/webs/sites/b/i/bibliotecav/web/importar_sql.php on line 33

Quedo atengo a la ayuda que me puedan brindar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por xve (6935 intervenciones) el 05/09/2016 22:22:08
El Warning que te indica, es que no tiene acceso al archivo o no existe!!!

La ruta es correcta y el archivo existe seguro?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por Juan Camilo (21 intervenciones) el 06/09/2016 09:46:55
Ya lo solucione alojando la pagina en otra parte. Ahí si copia el archivo en la ubicación del servidor pero el problema es que no procesa el archivo y como para que a uno le dé mas rabia...NO MUESTRA NINGÚN ERROR. Ahora si, sin comentarios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por Juan Camilo (21 intervenciones) el 07/09/2016 07:44:44
Problema solucionado. Para aquellos que les interese el código a continuación lo dejo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if($_FILES["archivo"]["size"]>1000000){
    echo "Solo se permiten archivos menores de 1MB";
    }else{
        // sacamos todas las propiedades del archivo
        $nombre_archivo = $_FILES['archivo']['name'];
        $tipo_archivo= $_FILES['archivo']['type'];
        $tamano_archivo = $_FILES["archivo"]['size'];
        $direccion_temporal = $_FILES['archivo']['tmp_name'];
        // movemos el archivo a la capeta de nuestro servidor
        move_uploaded_file($_FILES['archivo']['tmp_name'],".".$_FILES['archivo']['name']);
    }
 
    $fila = 1;
    if (($gestor = fopen($nombre_archivo,"r"))!== FALSE) {
        while (($data = fgetcsv($gestor,1000,";")) !== FALSE) {
                $num = count($data);
                $fila++;
                $inser="INSERT INTO libro(id_lb,nombre_lb,autor_lb,ubicacion_lb,cantidad_lb) VALUES('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";
                $rt_i=mysql_query($inser,$conexion) or die ('La consulta de Registro de Datos NO fue Ejecutada');
        }
        fclose($gestor);
    }

Explico brevemente que hace el código:
En el primer if lo que hace es que se valida el tamaño del archivo de extension CSV y si cumple con la condición se mueve dicho archivo al servidor y el resto lo que haces es leer el archivo, lo procesa e inserta cada fila en la base de datos.

XVE, mira la Línea 14 de este código que deje...Tenías Razón.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

CARGA DE ARCHIVOS CSV

Publicado por xve (6935 intervenciones) el 07/09/2016 08:56:23
Gracias por comentarlo Juan Camilo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar