Foros del Web » Programando para Internet » PHP »

Download de tabla con formato

Estas en el tema de Download de tabla con formato en el foro de PHP en Foros del Web. Hola a todos Tengo un pequeño script para bajar automáticamente las tablas de mi bd y poder abrirlas en Excel. Es esto y funciona: Código ...
  #1 (permalink)  
Antiguo 28/04/2005, 18:30
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 7 meses
Puntos: 1
Download de tabla con formato

Hola a todos
Tengo un pequeño script para bajar automáticamente las tablas de mi bd y poder abrirlas en Excel.
Es esto y funciona:
Código PHP:
<?php
require('sqlconfig.php');
$tabla $HTTP_POST_VARS["tabla"];
$select "SELECT * FROM $tabla"
$export mysql_query($select) or die( "<strong><font color=red>La tabla $tabla no existe !!!<br>Table $tabla doesn't exist !!!<br>Retroceda a la página anterior para reintentar</strong></font>" ); 
$count mysql_num_fields($export);
for (
$i 0$i $count$i++) {
$header .= mysql_field_name($export$i)."\t";
}
while(
$row mysql_fetch_row($export)) {
$line '';
foreach(
$row as $value) { 
if ((!isset(
$value)) OR ($value == "")) {
$value "\t";
} else {
$value str_replace('"''""'$value);
$value '"' $value '"' "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data str_replace("\r"""$data);
if (
$data == "") {
$data "\n(0) Records Found!\n"
}
...luego sigue la parte de download automático.

Mi problema es que algunas de las tablas tienen un campo "time" que me llega como "2005040150406" y yo quiero que llegue a Excel como
aaaa/mm/dd-hh:mm:ss
y no hay caso cada línea que intento deja de funcionar todo el resto.
Por favor alguna idea para lograrlo... es de vida o muerte
Muchas gracias y cariños.

--- EStoy editando para ver si ahora me explico mejor.
Intento agregar esto para formatear el time() de mi tabla:
Código PHP:
<?php
//
$select "SELECT * FROM $tabla";
$select.= " DATE_FORMAT(time,'%d/%m/%Y %T') AS fecha";
$export mysql_query($select) or die( "<strong><font color=red>La tabla $tabla no existe !!!<br>Table $tabla doesn't exist !!!<br>Puede volver a la página anterior para reintentar</strong></font>" ); 
Y no hay forma... o me baja la tabla vacía o me dice que no existe.
Alguien tiene idea ?

Última edición por Cluster; 29/04/2005 a las 09:25
  #2 (permalink)  
Antiguo 29/04/2005, 09:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero el campo de tu tabla que guarda tu fecha de que tipo o formato es?

Es un "INT" que guardas ahí un time() (UNIX) .. o que guardas exactamente?

Para aplicar la función DATE_FORMAT de Mysql (SQL) ese campo ha de ser tipo DATE o DATETIME .. no un "INT" con una fecha en formato UNIX (lo que devuelve time()) ..

No sé si tendrás oportunidad de alterar ese campo de tu tabla (si corresponde) y tu lógica de tu aplicación (script) que genera esos datos .. pero lo ideal es que trabajes con fechas en campos DATE o DATETIME .. por ejemplo para insertar la fecha/hora actual usas NOW() de Msyql .. sin tener que tener una variable por ahí que deje lo que dá PHP con su time() ... De esa forma podrás aplicar con comodidad tu DATE_FORMAT() sin problemas.

Por si no puedes hacer esto .. en Mysql tienes funciones para trabajar con fechas en TIMESTAMP de UNIX .. como UNIX_TIMESTAMP() si mal no recuerdo .. Revisa el manual oficial de Msyql por su SQL concreto:
www.mysql.com

Un saludo,
  #3 (permalink)  
Antiguo 29/04/2005, 14:22
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 7 meses
Puntos: 1
Ahhh Cluster...

Muchas gracias por tu respuesta
Recién me doy cuenta que ahí tengo un campo "INT" que guarda un timestamp()... es decir lo que veo ahí es "20050401052241".
Es un tabla de logs que genera un script que yo no puedo cambiar.
Entonces... con esto traigo ese campo con el formato que quiero:
<?php
//
if ($row= mysql_fetch_array($result))
{
$anio=substr($row[time],0,4);
$mes=substr($row[time],4,2);
$dia=substr($row[time],6,2);
$hora=substr($row[time],8,2);
$min=substr($row[time],10,2);
$seg=substr($row[time],12,2);
$fec = "$dia|$mes|$anio $hora:$min:$seg";
//
Pero (no me retes)... no sé cómo hacer el SELECT a partir de esto.
Como hago mi query y que al mismo tiempo me lo traiga con la apariencia que quiero para después poder seguir con el tema de bajar la tabla.
Tengo un rompecabezas... y no sé cómo armarlo
Gracias de nuevo y cariños.
  #4 (permalink)  
Antiguo 30/04/2005, 04:25
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
¿cómo????... cómo qué "lo traiga con la apriencia que quieres"??... osea, extraer tu campo para emplear lo que tienes (el script quemuestras)???.. simplemente consltalo com está, no necesitas hacerle cambios.

Segura es un campo int?.. Cluster ya te mencionó algunas funciones (y recomendaciones) para poder trabajar...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 30/04/2005, 13:58
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 7 meses
Puntos: 1
Muchas gracias, en parte lo tengo...

Muchas gracias a los dos
He logrado con DATE_FORMAT y un alias traer el campo "time" en el formato y con el nombre que quiero (me refería a eso jam1138... es que no me supe explicar).
El campo es INT y guarda un timestamp() pero puedo usar DATE_FORMAT porque en realidad no contiene un timestamp()... ahí hay "20050401201541" por ej.

Bueno, la cosa es que quedó pero... lo que no puedo lograr es "meter" los distintos if... es decir... para el caso que la tabla no tenga ese campo "time"... tengo que arrancar desde distintos forms que apunten a cada caso (tengo tablas para bajar en bruto, otras para formatear campo "time" y otras para formatear campo "time" y "amount" por ej.)
Si armo con if en un solo script me dice que la tabla no existe.
Gracias de nuevo a mis queridos genios

Última edición por Suyta; 30/04/2005 a las 14:10
  #6 (permalink)  
Antiguo 30/04/2005, 15:10
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Podrías tomar el nombre del campo. Si el campo se llama "time" entonces lo formateas, si no, haces el resto igual:
Código PHP:
while($row mysql_fetch_row($export)) {
    
$line '';
    foreach(
$row as $key=>$value) {
        if ((!isset(
$value)) OR ($value == "")) {
            
$value "\t";
        } elseif (
$key == 'time'){
            
// formateas el campo time.
            
$anio    substr($value],0,4);
            
$mes    substr($value,4,2);
            
$dia    substr($value,6,2);
            
$hora    substr($value,8,2);
            
$min    substr($value,10,2);
            
$seg    substr($value,12,2);
            
$value     "$dia|$mes|$anio $hora:$min:$seg \t";
        } else{
            
$value str_replace('"''""'$value);
            
$value '"' $value '"' "\t";
        }
        
$line .= $value;
    }
    
$data .= trim($line)."\n";

Saludos
  #7 (permalink)  
Antiguo 01/05/2005, 16:27
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 7 meses
Puntos: 1
Gracias jpinedo

Si, eso lo entiendo jpinedo pero tengo diferentes tablas con diferentes consultas sobre cada una de ellas. Estoy usando:

Código PHP:
<?php
$select
=("SELECT transid AS ORDEN, DATE_FORMAT(time,'%d/%m/%Y %T') AS FECHA, username AS USUARIO, description AS DESCRIPCION, TRUNCATE(amount/10000000,3) AS IMPORTE, type AS TIPO FROM $tabla WHERE amount>0 OR amount<0 ORDER BY username,time");
Y otros "select" de este tipo para otras tantas tablas.
Entonces, estoy pensando que lo que estoy haciendo es intentar redefinir el select por eso me tira error... debo trabajar primero sobre $tabla... si es = "accounting" por ej. sigo un camino... si no es = sigo otro.
Sería así, no ?
Cariños

Última edición por Suyta; 01/05/2005 a las 17:27
  #8 (permalink)  
Antiguo 01/05/2005, 18:27
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Bueno... creo que no se va a terminar de entender hasta que no pongas lo que estás intentando hacer (el códifgo que utilizas) y los mensajes de error exactos (mensaje y línea).

Saludos
  #9 (permalink)  
Antiguo 02/05/2005, 13:28
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 7 meses
Puntos: 1
OK, esto es lo que tengo

Aquí va jpinedo:

Código PHP:
<?php
require('sqlconfig.php');
$tabla $HTTP_POST_VARS["tabla"];
$select=("SELECT transid AS TRANSID, DATE_FORMAT(time,'%d/%m/%Y %T') AS FECHA, username AS USERNAME, description AS DESCRIPTION, TRUNCATE(amount/10000000,3) AS AMOUNT, type AS TYPE FROM $tabla WHERE amount>0 OR amount<0 ORDER BY username,time");
$export mysql_query($select) or die( "<strong><font color=red>La tabla $tabla no existe !!!<br>Table $tabla doesn't exist !!!<br>Puede volver a la página anterior para reintentar</strong></font>" ); 
//
$count mysql_num_fields($export);
for (
$i 0$i $count$i++) {
$header .= mysql_field_name($export$i)."\t";
}
/*************************************************
Extracto datos, formateo y lo guardo en una
variable $data
/*************************************************/
while($row mysql_fetch_row($export)) {
$line '';
foreach(
$row as $value) { 
if ((!isset(
$value)) OR ($value == "")) {
$value "\t";
} else {
$value str_replace('"''""'$value);
$value '"' $value '"' "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data str_replace("\r"""$data);
/********************************************/
if ($data == "") {
$data "\n(0) Records Found!\n"
}
/********************************************
Sección para el download automático
/********************************************/
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$bus$tabla$now.xls");
header("Pragma: no-cache");
header("Expires: 0");
print 
"$header\n$data";
?>
Pero tengo 30 tablas con diferente estructura... entonces tengo otro script donde la linea del select es:

Código PHP:
<?php
//
<?php 
$select
=("SELECT transid AS ORDEN, DATE_FORMAT(time,'%d/%m/%Y %T') AS FECHA, username AS USUARIO, description AS DESCRIPCION, TRUNCATE(amount/10000000,3) AS IMPORTE, type AS TIPO FROM $tabla WHERE amount>0 OR amount<0 ORDER BY username,time"); 
//
?>
Y otro donde es:
Código PHP:
<?php
//el resto es igual al código "1"
$select=("SELECT rid AS RID, uid AS UID, TRUNCATE(amount/10000000,2) AS MONTO, DATE_FORMAT(time,'%d/%m/%Y %T') AS FECHA, payed AS '1 PAG. / 0 PEND.' FROM $tabla ORDER BY payed DESC");
//
?>
Y así tengo un script por cada tabla... porque no logro "meter" todos en uno único... los "if" me desarman el payaso y no sale y es porque no sé cómo hacer para preguntar si existe un campo y según eso seguir un camino u otro.
Se entendió ?
Muchas gracias y saludos
  #10 (permalink)  
Antiguo 02/05/2005, 15:47
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Jajaja, ahora veo lo que quieres.
Lo que dices es cierto.
Código PHP:
require('sqlconfig.php');
switch(
$_POST["tabla"]){
    case 
'nombre_tabla_1':
            
$select 'SELECT .... FROM nombre_tabla_1 ....'// el select correspondiente a esa tabla 1
            
break;
    case: 
'nombre_tabla_2':
            
$select 'SELECT .... FROM nombre_tabla_2 ....'// el select correspondiente a esa tabla 2
            
break;
    
//... y así para cada tabla
}

$export mysql_query($select) or die( "<strong><font color=red>La tabla $tabla no existe !!!<br>Table $tabla doesn't exist !!!<br>Puede volver a la página anterior para reintentar</strong></font>" );
//
$count mysql_num_fields($export);
for (
$i 0$i $count$i++) {
    
$header .= mysql_field_name($export$i)."\t";
}
/*************************************************
Extracto datos, formateo y lo guardo en una
variable $data
/*************************************************/

while($row mysql_fetch_row($export)) {
    
$line '';
    foreach(
$row as $value) {
    
//y el resto igual 
Si además quieres hacer una discriminación por campo, haces lo que te puse anteriormente.

Saludos
  #11 (permalink)  
Antiguo 03/05/2005, 17:21
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 7 meses
Puntos: 1
Ehhhhhhhhhhh

Que grande SEÑOR JPINEDO !!!!!!!!!!
No me alcanzan los graciassssssssssss
Cariños.
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 22:48.