martes, 16 de agosto de 2011

Exportar a excel con PHP y Mysql


Muchas veces nos hemos encontrado con la necesidad de exportar información de una tabla en nuestra base de datos a una hoja de Excel para generar informes o hacer cálculos extra, a continuación veremos cómo podemos exportar la consulta de una base de datos a un archivo Excel.
Que necesitamos?
  • Necesitamos un script php el cual va a generar la consulta a la base de datos y luego va a generar un archivo .xls
  • Necesitamos tener la tabla que queremos exportar en nuestra base de datos.
  • Servidor WEB para correr el script PHP.
Proceso
El proceso es muy sencillo, vamos a darle un criterio a nuestra consulta para no exportar toda la información de la tabla. Para efectos de este tutorial utilizaremos la fecha.
Base de Datos.
Vamos a crear una base de datos en donde tendremos una tabla llamada ventas con los siguientes campos.
IDVentas_diaFecha
Sera el identificador del registro, nuestra llave primaria y se autoincrementara. Formato INTSupongamos que de otro script se está guardando esta información , con cada una de las ventas del día, el formato es DOUBLE para poder guardar decimalesSupongamos que dicho script esta guardando la fecha a la que pertenece el registro de ventas. El formato es DATE

SQL para la creación de la tabla
CREATE TABLE  `ventas` (
`id` INT NOT NULL AUTO_INCREMENT ,
`Ventas_dia` DOUBLE NOT NULL ,
`fecha` DATE NOT NULL ,
PRIMARY KEY (  `id` )
) ENGINE = MYISAM ;

Una vez tenemos la tabla creada vamos a insertar algunos valores para poder probar nuestro script.
INSERT INTO `ventas` (`id`, `Ventas_dia`, `fecha`) VALUES (NULL, ’234500′, ’2011-04-09′), (NULL, ’530890′, ’2011-04-09′);
Ahora que ya tenemos datos en nuestra tabla para poder probar nuestro script, vamos a crear 2 archivos PHP:
Fecha.phpReporte.php
Este archivo será el encargado de mostrar las fechas disponibles en los registros de la base de datos para escoger el día del cual queremos exportar la información.Este archivo recogerá el criterio fecha y lo utilizara para limitar la consulta a solo los registros que tengan esa fecha y luego generara el archivo Excel con la información recuperada.

Fecha.php
Creamos un formulario para enviar la información a reporte.php
<form action=”reporte.php” method=”post”>
<label>Escoja la fecha</label><br /><br />
<select name=”date”>
<?php
//hacemos una conexión a nuestro servidor MySQL para poder recuperar las fechas disponibles, cambie los datos de la conexión de acuerdo a los que se acomoden a su servidor.
$conexio = mysql_connect(“localhost”,”usuariotest”,”123456″);
//realizamos la consulta
// Noten que estoy escribiendo select distinct que lo que hace es buscar un valor en la base de datos pero no trae los que se repiten en el caso de la fecha sabes que se repite porque hay varios registros en la tabla, pero no queremos traer cada uno de los registros con esa fecha, solo me interesa traer la fecha 1 vez ya que será nuestro criterio de búsqueda.
$sql = mysql_query(“select distinct fecha from tutoriales.ventas order by fecha DESC”,$conexio);
//una vez tenemos loa resultados vamos a colocarlos en un array y vamos a hacer un loop para imprimir cada resultado en la opción
while($row = mysql_fetch_array($sql)){
echo “<option>$row[fecha]</option>”;
}
?>
</select>
<input name=”" type=”submit” value=”Enviar” />
</form>

Reporte.php
<?php
//insertamos los headers que van a generar el archivo excel
header(‘Content-type: application/vnd.ms-excel’);
//en filename vamos a colocar el nombre con el que el archivo xls sera generado
header(“Content-Disposition: attachment; filename=ventas.xls”);
header(“Pragma: no-cache”);
header(“Expires: 0″);
//recogemos la variable de fecha con la que limitaremos la cinsulta.
$fecha = $_POST['date'];
//hacemos la conexion al servidor MySql
$conexio = mysql_connect(“localhost”,”usuariotest”,”123456″);
//realizamos la consulta
$sql = mysql_query(“select * from tutoriales.ventas where fecha = ‘$fecha’”,$conexio);
?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Reporte de ventas</title>
</head>

<body><!–Vamos a crear una tabla que será impresa en el archivo excel –>
<table width=”600″ border=”0″>
<tr>
<th width=”600″>
<!–Imprimimos un titulo –>
<div style=”color:#003; text-align:center; text-shadow:#666;”><font size=”+2″>Reporte de Ventas <br /><?php echo $fecha ?></font></div></th>
</tr>
</table>
<!–creamos la tabla de el reporte con border 1 y los títulos–>
<table width=”641″ border=”1″>
<tr>
<th width=”50%” style=”background-color:#006; text-align:center; color:#FFF”><strong>Ventas</strong></th>
<th width=”50%” style=”background-color:#006; text-align:center; color:#FFF”><strong>Fecha</strong></th>
</tr>
<?php
// Un proceso repetitivo para imprimir cada uno de los registros.
while($row = mysql_fetch_array($sql)){
echo ”
<tr>
<td bgcolor=\”#ededed\” align=\”center\”>$row[Ventas_dia]</td>
<td bgcolor=\”#ededed\” align=\”center\”>$row[fecha]</td>
</tr>”;
}
?>
</table>
</body>
</html>

Ahora que ya tenemos los scripts que necesitamos corremos los archivos en nuestro servidor web y obtenemos el archivo excel

domingo, 24 de julio de 2011

Cargar contenido usando Jquery

Jquery 

Una herramienta Open Source muy útil para nosotros los desarrolladores web, ya que nos permite entre muchas otras cosas, cargar contenido en nuestra web sin tener que cargar todo el sitio nuevamente.

Lo primero que necesitamos es incluir la librería en el header de nuestra pagina web, en mi caso, yo guardo la librería en una carpeta llamada js en el servidor.


<script src="js/jquery.js" type="text/javascript"></script>


Ahora escribiremos una función javascript que hará lo siguiente:
1. Esconderá un Div en donde colocaremos un aviso o gift animado que diga loading... o cargando..., esto lo utilizaremos para dejarle saber al usuario que un contenido esta siendo cargado en la pagina.
2. Una vez se ejecute la función, el script mostrara el div que contiene el gif animado de loading... y cargara la nueva pagina o script en un div, al finalizar la carga nuevamente esconderá el div donde tenemos el gif de loading...


<script type="text/javascript">
$(document).ready(function(){
  $('#loadingbar').hide();
})  
     function cargarcontenido(){
       $('#loadingbar').show();
       $('#content').load('myscript.php',function(){
       $('#loadingbar').hide();
       });
     }
</script>


Ahora colocaremos en nuestra pagina los div en donde tendremos el gif de loading y donde se cargara el contenido


<div id="loadingbar">Loading...</div>
<div id="content" style="padding: 10px;">
</div>


Ahora el botón que ejecutara la función.

<input name="" onclick="cargarcontenido()" type="submit" value="Cargar Contenido" />

Espero que con esto tengan una idea de como podemos cargar contenido en nuestra pagina sin necesidad de refrescar todo el sitio, desde luego esto es solo un punto de partida, cada quien puede utilizar estas funciones de la forma como mejor se acomode a sus necesidades!

Un feliz día y gracias por leer esta entrada!.

Bienvenidos!

En este espacio deseo publicar notas importantes y muy utiles para todos aquellos desarrolladores web que como yo, a diario se enfrentan a nuevos retos.

Espero poder ser de gran ayuda para aquellos que la necesiten asi como poder recibir ayuda en el momento de ser necesario.


Gracias!