Reporte en excel con php

Trato de mostrar mi consulta en pantalla y de allí dar clic en un botón para que me haga un reporte en excel pero que me mande solo esos datos que están en pantalla y a mi me manda todos los de la tabla de mi base de datos, hago esto para para mandar a excel:
<?php
$Reporte= $_REQUEST['Reporte'];
if (isset($Reporte))
{
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename=miarchivo.xls");
    header("Content-Transfer-Encoding: binary");
    header("Cache-Control: private");    
    echo $tabla;
}
?>
En el echo esto metiendo los datos de mi tabla para que los amnde a excel al momento de presionar el botón de reporte y aquí esta mi consulta:
if(isset($_POST["textfield2"]) && isset($_POST["textfield22"])){
//hace la consulta como está ahora
$consulta = mysql_query("SELECT * FROM perfil_prueba WHERE CARRERA_EGRESO LIKE '%$CARRERA_EGRESO%' and ESPECIALIDAD LIKE '%$ESPECIALIDAD%' and SEMESTRE_EGRESO LIKE '%$SEMESTRE%' and ANO_EGRESO >= $ANO_EGRESO_INI and ANO_EGRESO <= $ANO_EGRESO_FIN and TITULADO LIKE '%$TITULADO%'", $enlace);
}
else{
$consulta = mysql_query("SELECT * FROM perfil_prueba WHERE CARRERA_EGRESO LIKE '%$CARRERA_EGRESO%' and ESPECIALIDAD LIKE '%$ESPECIALIDAD%' and SEMESTRE_EGRESO LIKE '%$SEMESTRE%'  and TITULADO LIKE '%$TITULADO%'",$enlace);
}
while($row = mysql_fetch_array($consulta))
//$row= mysql_fetch_array($consulta) or die( "Error en query: $consulta, el error  es: " . Mysql_error() );
//while($row)
{
$NUMERO_CONTROL= $row["NUMERO_CONTROL"];
$APELLIDO_PATERNO= $row["APELLIDO_PATERNO"];
$APELLIDO_MATERNO= $row["APELLIDO_MATERNO"];
$NOMBRE_S= $row["NOMBRE_S"];
$CARRERA_EGRESO= $row["CARRERA_EGRESO"];
$ESPECIALIDAD= $row["ESPECIALIDAD"];
$SEMESTRE_EGRESO= $row["SEMESTRE_EGRESO"];
$ANO_EGRESO_INI= $row["ANO_EGRESO"];
$ANO_EGRESO_FIN= $row["ANO_EGRESO"];
$TITULADO= $row["TITULADO"];
$tabla.="
<table width='100%' border='7' cellspacing='1' callpadding='1'>
\n";
$tabla.="
<tr>
\n";
$tabla.="
<td width='10%'>$NUMERO_CONTROL</a></td>
\n";
$tabla.="
<td width='15%'>$APELLIDO_PATERNO</a></td>
\n";
$tabla.="
<td width='15%'>$APELLIDO_MATERNO</a></td>
\n";
$tabla.="
<td width='20%'>$NOMBRE_S</a></td>
\n";
$tabla.="
<td width='30%'>$CARRERA_EGRESO</a></td>
\n";
$tabla.="
<td width='30%'>$ESPECIALIDAD</a></td>
\n";
$tabla.="
<td width='20%'>$SEMESTRE_EGRESO</a></td>
\n";
$tabla.="
<td width='8%'>$ANO_EGRESO</a></td>
\n";
$tabla.="
<td width='5%'>$TITULADO</a></td>
\n";
$tabla.="
</tr>
\n";
$tabla.="
</table>
\n";
$tabla.="
<hr size = 2color =ffffff width = 100% align = left>
";
}
?>
<form action="buscasemestre.php" method="post">
<input type=submit name="Reporte" value="Reporte">
</form>
A la variable $tabla le asigno el valor de cada uno de los datos el problema es que si busco no me manda nada no muestra nada en pantalla por lo mismo creo yo que no le pongo el echo y si le doy reporte pues en excel no me manda nada igual que en pantalla pero si debería mandarme datos en la pantalla y no muestra nada, si pongo echo antes de la variable $tabla me manda muchas veces los datos pero si le doy clic en el botón reporte si me manda los datos tal cual esta en pantalla pero esta mal la consulta como le hago para acomodar todo esto espero me puedas ayudar
Respuesta
1
El problema esta aquí:
<?php
$Reporte= $_REQUEST['Reporte'];
if (isset($Reporte))
{
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename=miarchivo.xls");
    header("Content-Transfer-Encoding: binary");
    header("Cache-Control: private");    
    echo $tabla;
}
?>
Haces bien las cabeceras para descargar el excel... pero $tabla no tiene nada.
Para descargar deberías poner toda la creación de la cadena de $tabla antes de hacer el echo table (es decir, volver a generarla.
¿Gracias por contestar y osea como? ¿Es poner la consulta dentro del código para el excel? La verdad no entendí espero me puedas explicar un poco más
Saludos
Seria algo como esto:
Generar la tabla antes de enviar el xls.
$Reporte= $_REQUEST['Reporte'];
if (isset($Reporte))
{
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename=miarchivo.xls");
    header("Content-Transfer-Encoding: binary");
    header("Cache-Control: private");    

$consulta = mysql_query("SELECT * FROM perfil_prueba WHERE CARRERA_EGRESO LIKE '%$CARRERA_EGRESO%' and ESPECIALIDAD LIKE '%$ESPECIALIDAD%' and SEMESTRE_EGRESO LIKE '%$SEMESTRE%' and ANO_EGRESO >= $ANO_EGRESO_INI and ANO_EGRESO <= $ANO_EGRESO_FIN and TITULADO LIKE '%$TITULADO%'", $enlace);
}
else{
$consulta = mysql_query("SELECT * FROM perfil_prueba WHERE CARRERA_EGRESO LIKE '%$CARRERA_EGRESO%' and ESPECIALIDAD LIKE '%$ESPECIALIDAD%' and SEMESTRE_EGRESO LIKE '%$SEMESTRE%'  and TITULADO LIKE '%$TITULADO%'",$enlace);
}
while($row = mysql_fetch_array($consulta))
//$row= mysql_fetch_array($consulta) or die( "Error en query: $consulta, el error  es: " . mysql_error() );
//while($row)
{
$NUMERO_CONTROL= $row["NUMERO_CONTROL"];
$APELLIDO_PATERNO= $row["APELLIDO_PATERNO"];
$APELLIDO_MATERNO= $row["APELLIDO_MATERNO"];
$NOMBRE_S= $row["NOMBRE_S"];
$CARRERA_EGRESO= $row["CARRERA_EGRESO"];
$ESPECIALIDAD= $row["ESPECIALIDAD"];
$SEMESTRE_EGRESO= $row["SEMESTRE_EGRESO"];
$ANO_EGRESO_INI= $row["ANO_EGRESO"];
$ANO_EGRESO_FIN= $row["ANO_EGRESO"];
$TITULADO= $row["TITULADO"];
$tabla.="
<table width='100%' border='7' cellspacing='1' callpadding='1'>
\n";
$tabla.="
<tr>
\n";
$tabla.="
<td width='10%'>$NUMERO_CONTROL</a></td>
\n";
$tabla.="
<td width='15%'>$APELLIDO_PATERNO</a></td>
\n";
$tabla.="
<td width='15%'>$APELLIDO_MATERNO</a></td>
\n";
$tabla.="
<td width='20%'>$NOMBRE_S</a></td>
\n";
$tabla.="
<td width='30%'>$CARRERA_EGRESO</a></td>
\n";
$tabla.="
<td width='30%'>$ESPECIALIDAD</a></td>
\n";
$tabla.="
<td width='20%'>$SEMESTRE_EGRESO</a></td>
\n";
$tabla.="
<td width='8%'>$ANO_EGRESO</a></td>
\n";
$tabla.="
<td width='5%'>$TITULADO</a></td>
\n";
$tabla.="
</tr>
\n";
$tabla.="
</table>
\n";
$tabla.="
<hr size = 2color =ffffff width = 100% align = left>
";
}
echo $tabla;
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas