PHP - Ayuda con variables Fopen Fclose y demas

   
Vista:

Ayuda con variables Fopen Fclose y demas

Publicado por Humberto (6 intervenciones) el 17/05/2016 19:29:26
Buenas gente, partiré diciendo muchas gracias por entrar al tema y dedicarme un poco de su tiempo, como verán soy una persona que esta aprendiendo php y he buscado por cielo mar y tierra pero aun no doy con la solución a mi problema...Así que (lamentablemente?) no me queda otra opcion que pedir ayuda a los sabios del tema...


A ver, no se como explicarlo bien pero trataré de explicar lo mas detallado posible.

Quise hacer una pagina simple, con un formulario que contenga un input file para cargarle un archivo .csv y un boton para enviar dicho formulario.
La idea es que al enviar el formulario mediante codigo pueda abrir este archivo .csv e importar los registros que contenga a una bd previamente creada para que posteriormente pueda mostrar con una tabla ordenadita todos aquellos campos.

El ejemplo que estoy usando es una bd llamaba "probando" con una tabla "dato" que contiene los campos: nombre, edad y profesion"


Tengo todo hecho, lo de cargar el archivo, alojarlo en alguna carpeta de mi pc y todo eso, pero al momento de manipular el archivo, es decir, abrirlo para que lo lea y lo meta a la bd no me funciona.

Adjuntare el proyecto .rar (es super mega liviano) en espera de su ayuda. MUCHISIMAS gracias

atte.

Una persona desesperada jaja
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 VRM

Ayuda con variables Fopen Fclose y demas

Publicado por VRM (171 intervenciones) el 18/05/2016 07:40:58
Hola:

Tu fichero principal hace lo siguiente:

1º Establece una conexión a la base de datos
2º Presenta un formulario para subir un archivo
3º Lee de la base de datos probando todos los datos de la tabla "dato"
4º Presenta los resultados leídos en una tabla

Hasta aquí no se presenta nada porque en la base de datos no se ha escrito nada (hasta ahora) ya que el archivo no se ha subido.

Ahora escribimos el nombre del archivo y pulsamos enviar. Se ejecuta archivo.php:

1º Establece una conexión a la base de datos
2º Traslada el archivo el archivo subido a C:\xampp\htdocs\cargamysql\carga
3º Lee el archivo subido
4º Escribe su contenido en la base de datos

Ahora no tienes la tabla en la pantalla ya que estás ejecutando archivo.php no principal.php. Si vuelves a ejecutar principal.php te debería mostrar los datos que metieras la vez anterior.

Si lo que quieres hacer es:
A) Que te pida subir un archivo
B) Que guarde su contenido en la base de datos y que te muestre su contenido

Deberías pasar la parte de mostrar la tabla (de la linea "<<table border="1">" en adelante) al final de archivo.php; y debería funcionar.

Si no te funciona puedes probar lo siguiente:
- Mirar si el archivo subido está en la ubicación deseada
- Ver si se ha grabado algo y qué en la base de datos
- Ver el contenido de la variable $data con:
echo "<pre>";print_r($data);echo "</pre>";
Coméntanos qué ocurre.

Saludos de Víctor.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ayuda con variables Fopen Fclose y demas

Publicado por Humberto (6 intervenciones) el 18/05/2016 21:13:13
Victor escribi tremendo mensaje y elegi la opcion "comentar" que salia bajo tu mensaje, no tenog idea donde se envio la respuesta pero si no la ves porfa escribe aqui para escribirlo nuevamente! Saludos y gracias por tu tiempo
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 VRM

Ayuda con variables Fopen Fclose y demas

Publicado por VRM (171 intervenciones) el 19/05/2016 06:21:44
No te comprendo.
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

Ayuda con variables Fopen Fclose y demas

Publicado por Humberto (6 intervenciones) el 20/05/2016 16:10:30
Que bajo tus mensajes hay una opcion que sale "comentar" ahí respondi mis dudas pero nunca aparecieron y no la leiste claramente, pero ya entendi como responder a la cadena de mensajes del tema...

Ya! volviendo al tema,

Si principal.php solo esta encargado de mostrar un formulario y enviarlo a archivo.php es innecesario tener la conexion a la BD en principal.php cierto? En otras palabras como no esta dialogando en ningun momento con la BD no sirve tenerlo en principal.php pero SI hay que tenerlo en archivo.php

Lo otro, no entiendo porque no me quiere mostrar la pagina, el formulario llama a archivo.php pero por algun motivo dice que la pagina no existe o esta obsoleta. Adjunto foto del error para que me guíes...

Por otra parte, hice un proyecto nuevo escribiendo exactament el mismo codigo pero en 1 solo archivo y si me funciona, por eso encuentro raro que me tire ese error. Adjuntare como tengo el proyecto ahora, que le fui quitando lineas para ir viendo errores nada mas.

Denuevo, MUCHIMAS gracias por tu tiempo

Quedo atento a tu respuesta
error
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 VRM

Ayuda con variables Fopen Fclose y demas

Publicado por VRM (171 intervenciones) el 20/05/2016 19:41:48
Hola:

Mirando en la captura de pantalla del error que te da, me ha llamado la atención la URL del destino. Si te fijas "copia" parte de la linea 12 del fichero principal.php y envía los datos por GET en vez de por POST.
1
<form action="archivo.php" method="post" enctype="multipart/form-data">
Así que copié tu proyecto en mi ordenador que arrojó el mismo error. Revisé la linea antes citada y vi que habías utilizado comillas tipográficas en vez de comillas normales, las cambié y ya no da el error. Además carga el archivo seleccionado.

Es de gran ayuda hacer las pruebas de las páginas usando la "consola web" que tienen los navegadores. Esta te indica que ficheros carga, dónde se producen los errores y otras advertencias útiles.

Para evitar errores como el de las comillas tipográficas es mejor usar una API como eclipse. Yo uso aptana studio, otros Netbins...

Comentame tus avances.

Saludos de Víctor.-
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

Ayuda con variables Fopen Fclose y demas

Publicado por Humberto (6 intervenciones) el 20/05/2016 19:55:32
Estimado Victor,

me funciono!, a fin de cuentas tenias razon, era solo el tipo de comillas que utilicé.... que error mas tonto jaja

Ahora, siguiendo con la problemática...

Efectivamente SI guarda el archivo donde deberia hacerlo, todo bien hasta ahi, pero no me quiere abrir el archivo, dice que no lo encuentra :/

En este caso seria error en la línea 7.

Warning: fopen(datos.csv): failed to open stream: No such file or directory in C:\xampp\htdocs\cargamysql\archivo.php on line 7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(isset($_POST['boton'])){
	$nombreArchivo = $_FILES['archivo']['name'];
	$nombreTmpArchivo =$_FILES['archivo']['tmp_name'];
 
	move_uploaded_file($nombreTmpArchivo, "carga/$nombreArchivo");
 
		$miArchivo = fopen("$nombreArchivo", "r");
 
			if( $miArchivo ) {
			  while (($data = fgetcsv($miArchivo, 1000, ",")) !== FALSE) {
				$consulta = "INSERT INTO $db (nombre, edad, profesion) VALUES ('$data[0]', '$data[1]', '$data[2]')";
				mysqli_query($con,$consulta) or die("No se agregaron los registros");
			  }
			fclose($miArchivo);
		}
	}

Por otra parte, me podrias explicar como funciona el "fgetcsv" no entiendo el 1000 ni la coma que le precede

Quedo atento.

Gracias!
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 VRM

Ayuda con variables Fopen Fclose y demas

Publicado por VRM (171 intervenciones) el 21/05/2016 08:38:28
Hola:

Si, en la linea 5 guardas (trasladas) el fichero "archivo.php" al directorio "carga" y en la 7 le dices que lo busque en el actual ("C:\xampp\htdocs\cargamysql\") cuando debería buscarlo en (C:\xampp\htdocs\cargamysql\carga\"). Cambia la linea 7 a
1
$miArchivo = fopen("carga/$nombreArchivo", "r");

Respecto del significado del 1000: es la longitud máxima leida en el fichero. La lectura termina cuando ocurre alguna de estas tres cosas (la que ocurra primero)
- Se han leido el número caracteres que se indica en el segundo parámetro (1000 en tu caso)
- Se llega al final de la linea
- Se llega al final del fichero

Más detalles en:
http://php.net/manual/es/function.fgets.php

Para encontrar información de funciones php: en este mismo foro:
http://php.net/docs.php

O bien en google buscar nombre_de_la_funcion php por ejemplo "fgetcsv php" generalmente el primer item te manda a la documentación de fgetcsv de este foro.

Saludos de Víctor.-
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

Ayuda con variables Fopen Fclose y demas

Publicado por Humberto (6 intervenciones) el 23/05/2016 15:50:43
aah, en esa línea hay que especificar la ruta mas completa, yo pensé que solo habia que detallar el nombre del archivo ya que este se iba a abrir! Bueno, termine esa parte y cada vez estoy mas cerca de terminar esto! :DD

Bueno, ahora el problema es que me dice que no esta definida la variable $db cuando si lo hice (ya que estoy incluyendo el archivo conexion.php donde si estan esas variables)

este vendría siendo el error:
Notice: Undefined variable: db in C:\xampp\htdocs\cargamysql\archivo.php
No se agregaron los registros

Te dejo el .rar para que le eches un vistazo. GRACIAS!
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 VRM

Ayuda con variables Fopen Fclose y demas

Publicado por VRM (171 intervenciones) el 24/05/2016 09:57:59
Hola:

$bd es una variable local de la función conectar, por lo tanto no tiene existencia fuera de la función. Además la sintaxis del comando INSERT es:

INSERT INTO tabla (campos,...) VALUES ('valores',...)

Por lo tanto la linea 19 debe ser:
1
$consulta = "INSERT INTO dato (nombre, edad, profesion) VALUES ('$data[0]', '$data[1]', '$data[2]')";

Ten en cuenta que en la variable $con ya se encuentran la información de la base de datos, así que el nombre de la base de datos ya no la tienes que volver a emplear.

Saludos de Víctor.-
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

Ayuda con variables Fopen Fclose y demas

Publicado por Humberto (6 intervenciones) el 24/05/2016 15:47:24
aaah claro! toda la razon, no me habia dado cuenta que estaba llamando a la BD y no a la tabla de esta jaja. Victor te comento que alfín me funcionó!

Aprovechare de tu ayuda y me gustaría saber que es lo correcto...

Pretendo lograr que despues de agregar los registros a la tabla los muestre (creo que recuerdas esto), ahora la consulta sería, que es lo mejor? hacer que despues de que inserte los registros muestre la tabla en el mismo archivo.php o que vuelva a principal.php

Pensaba que lo mejor seria dejar por ejemplo 1 archivo solo para la conexion, otro para el manejo de la bd y el ultimo para mostrar lo que se desea, por esto cree los 3 archivos (principal.php, conexion.php y archivo.php)

Ahora si la opcion es llevarlo todo a principal.php como puedo hacer para que cuando haga el insert redireccione a principal.php? pensaba que era con un action pero claramente me equivoque... Quedo atento!
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 Víctor

Ayuda con variables Fopen Fclose y demas

Publicado por Víctor (171 intervenciones) el 24/05/2016 17:48:08
Hola:

Depende de lo que quieras hacer. Si el programa termina en mostrar los valores guardados. Mejor ponerlo en archivo.php. Si además se quiere volver a principal.php puedes poner un link (a principal.php) al final para que, una vez leido, se regrese al principio.

Para redireccionar de forma automática se puede usar un formulario que se direccione al destino (principal.php) al terminar de cargarse.
1
2
3
echo "<form id='f' name='f' action='principal.php' method='POST'>";
echo "<script>document.f.submit();</script>";
echo "</form>";
Sin embargo, esto no deja tiempo para leer la página archivo.php.

Saludos de Víctor.-
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