Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: HDS02 en 12 Abril 2011, 20:35 pm



Título: Cargar archivo de excel para actualizar base de datos ??
Publicado por: HDS02 en 12 Abril 2011, 20:35 pm
Buen día,
Me trabe con un código php, a ver si alguien me puede ayudar, lo que ocupo es actualizar una base de datos con un archivo de Excel (.csv) encontré un script que parece ser bueno para mi caso, lo probé y parece que si envía datos a la tabla, pero no los que me interesa que envié, en mi tabla tengo un campo llamado precio y solo me interesa que actualice ese campo los demás no. Este es el código

Código:
<?php
include("connect.php");
$row = 1;
$handle = fopen("productos1.csv", "r");
$micolumna = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$db="UPDATE productos SET precio='".$data[$c]."' WHERE producto_id='".$row."'";
mysql_query($db) or die(mysql_error());
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />";
}
$micolumna[] = $data[1];
}
fclose($handle);
var_dump ($micolumna);
unset ($data);
?>

Como verán estuve jugando con las variables para tratarlas de enviar al usar el UPDATE pero no me funciona, no sé en que este mal o si es la forma correcta de hacerlo o no. 

Cualquier cosa les adjunto el archivo que me interesa agregar http://www.dissolweb.com/productos2.csv

No estoy seguro si así este bien la estructura del archivo 
Alguna sugerencia??  Gracias.


Título: Re: Cargar archivo de excel para actualizar base de datos ??
Publicado por: crazykenny en 12 Abril 2011, 21:05 pm
Bueno, lo mio no es que sea precisamente PHP; es mas, solo programo en Blitz 3D, un editor de juegos tipo Basic, pero se me ocurre que siempre puedes "cargar" la informacion del excel en memoria poniendolos todos en una matriz de dos niveles, y luego en esa matriz, pues insertar los datos nuevos que te interesen, para luego volver a guardarlo todo en el archivo excel; este seria el metodo "lento"; y, el metodo rapido, seria hacer un bucle FOR/NEXT dentro de otro bucle FOR/NEXT (vamos, la misma rutina para cargar/guardar datos que en el caso anterior) para leer el archivo excel y que, cada vez que cargue un dato cualquiera, lo guarde en un archivo diferente y, llegados a un determinado valor, puedes hacer que solo lea y luego que se limite a, en vez de guardar los datos leidos, guarde los datos que estan en memoria, hasta llegar al valor pertinente, donde se volveria al proceso de, donde cada vez que lea algo, lo escriba en el otro archivo, y, cuando termines de "volcar" todos los datos en el archivo nuevo, puedes hacer dos cosas; o eliminar el primer archivo y cambiarle el nombre al archivo nuevo para que tenga el mismo nombre que el primero desde el programa de forma automatica, o bien volver a hacer un volcado desde el archvio nuevo al viejo, para luego eliminar el segundo archivo al cual has volcado inicialmente el contenido con los valores modificados.
De todas formas, recordar que, a fin de cuentas, EXCEL trabaja con una matriz de dos niveles, o es lo que creo.
Saludos.


Título: Re: Cargar archivo de excel para actualizar base de datos ??
Publicado por: HDS02 en 13 Abril 2011, 01:21 am
Bueno, lo mio no es que sea precisamente PHP; es mas, solo programo en Blitz 3D, un editor de juegos tipo Basic, pero se me ocurre que siempre puedes "cargar" la informacion del excel en memoria poniendolos todos en una matriz de dos niveles, y luego en esa matriz, pues insertar los datos nuevos que te interesen, para luego volver a guardarlo todo en el archivo excel; este seria el metodo "lento"; y, el metodo rapido, seria hacer un bucle FOR/NEXT dentro de otro bucle FOR/NEXT (vamos, la misma rutina para cargar/guardar datos que en el caso anterior) para leer el archivo excel y que, cada vez que cargue un dato cualquiera, lo guarde en un archivo diferente y, llegados a un determinado valor, puedes hacer que solo lea y luego que se limite a, en vez de guardar los datos leidos, guarde los datos que estan en memoria, hasta llegar al valor pertinente, donde se volveria al proceso de, donde cada vez que lea algo, lo escriba en el otro archivo, y, cuando termines de "volcar" todos los datos en el archivo nuevo, puedes hacer dos cosas; o eliminar el primer archivo y cambiarle el nombre al archivo nuevo para que tenga el mismo nombre que el primero desde el programa de forma automatica, o bien volver a hacer un volcado desde el archvio nuevo al viejo, para luego eliminar el segundo archivo al cual has volcado inicialmente el contenido con los valores modificados.
De todas formas, recordar que, a fin de cuentas, EXCEL trabaja con una matriz de dos niveles, o es lo que creo.
Saludos.


Q tal compañero, gracias por contestar pero la verdad no entiendo muy bien.


Título: Re: Cargar archivo de excel para actualizar base de datos ??
Publicado por: Feedeex en 13 Abril 2011, 03:47 am
Amigo, ¿estás usando el UPDATE antes que el for o me equivoco?. Es decir cuando lo utilizás no tiene valor creo.
Podes probar con algo así:

Código:
for ($c=0; $c < $num; $c++) { 
echo $data[$c] . "<br />";
$db="UPDATE productos SET precio='".$data[$c]."' WHERE producto_id='".$row."'";
mysql_query($db) or die(mysql_error());
}

No estoy seguro de todas formas. Vi que hay un while antes, pero el UPDATE de todas formas no deja de estar antes que el for.


Título: Re: Cargar archivo de excel para actualizar base de datos ??
Publicado por: HDS02 en 14 Abril 2011, 05:04 am
Amigo, ¿estás usando el UPDATE antes que el for o me equivoco?. Es decir cuando lo utilizás no tiene valor creo.
Podes probar con algo así:

Código:
for ($c=0; $c < $num; $c++) { 
echo $data[$c] . "<br />";
$db="UPDATE productos SET precio='".$data[$c]."' WHERE producto_id='".$row."'";
mysql_query($db) or die(mysql_error());
}

No estoy seguro de todas formas. Vi que hay un while antes, pero el UPDATE de todas formas no deja de estar antes que el for.

Tenias razón, gracias.