Tema: FAQ's de PHP
Ver Mensaje Individual
  #91 (permalink)  
Antiguo 07/11/2003, 08:55
ACHAVARRIA
Invitado
 
Mensajes: n/a
Puntos:
Como Rotar banners con estadísticas

En esta ocasión voy a demostrarles cómo armar un rotador de banners con estadísticas de clicks e impresiones.

Para poder hacer un buen rotador de banners con sus estadísticas correspondientes, vamos a hacer una tabla en una base de datos MySQL.

ban_id es índice y se auto incrementa con cada nuevo registro añadido, contiene la id de cada banner.
ban_url es donde almacenaremos las direcciones de los sitios.
ban_img es donde almacenaremos las direcciones de los banners.
ban_click es donde pondremos la cantidad de clicks de cada banner.
ban_impre es donde pondremos la cantidad de impresiones de cada banner.

Comencemos con lo más fácil, el rotador. Para el rotador usaremos el siguiente código:

banner.php
<?
if(@mysql_connect($serv,$user,$pass)) {
mysql_select_db($dbase);
} else {
echo "Hubo un error, disculpa las molestias";
exit();
}
$qbaney = mysql_query("SELECT * FROM tabla");
mt_srand(time());
$max = mysql_num_rows($qbaney);
$rand = mt_rand(1,$max);
$sqldo = mysql_query("SELECT * FROM tabla WHERE ban_id='$rand'");
while($ban = mysql_fetch_assoc($sqldo)) {
echo "<a href='click.php?id=".$ban['ban_id']."' target=_blank>”.
“<img src='".$ban['ban_img']."' width=468 height=60 border=0></a>";
}
mysql_query("UPDATE $table15 SET ban_impre=ban_impre+1 WHERE ban_id='$rand'");
?>


Vamos a traducir el código línea por línea:

1. Si se puede establecer una conexión al motor MySQL...
2. Se selecciona una base de datos.
3. De lo contrario...
4. Se imprime “Hubo un error, disculpa las molestias”.
5. Se sale del programa.
6. Se cierra el IF.
7. Se selecciona todo de la tabla.
8. Se crea la semilla del rotador (mejorado).
9. Se cuentan todos los banners y se los guarda en $max.
10. Se genera un número aleatorio entre 1 y el máximo ($max).
11. Se selecciona un banner de la tabla donde el campo ban_id sea igual al número aleatorio.
12. Mientras $ban sea un array asociativo...
13. Imprimir en la pantalla un link a click.php?id= id elegido en la tabla.
14. La imagen desde la dirección almacenada en la tabla, cerramos link.
15. Cerramos el while.
16. Actualizamos la tabla con una impresión más de la que ya había.

Ese fue el rotador de banners con contador de impresiones. Ahora nos falta el contador de clicks y redireccionador al sitio donde pertenece el banner. Para eso, guardamos el siguiente archivo:

click.php
<?
if(@mysql_connect($serv,$user,$pass)) {
mysql_select_db($dbase);
} else {
echo "Hubo un error, disculpa las molestias";
exit();
}
mysql_query("UPDATE tabla SET ban_click=ban_click+1 WHERE ban_id='{$_GET['id']}'");
$showurl = mysql_query("SELECT * FROM tabla WHERE ban_id='{$_GET['id']}'");
while($rowed = mysql_fetch_assoc($showurl)) {
header("Location: ".$rowed['ban_url']);
}
?>


Comenzaremos a leer desde la línea siete, ya que las seis primeras son iguales a las del archivo anterior.
7. Se actualiza la cantidad de clicks en el banner contenido en $_GET[‘id’].
8. Se muestra la información como un array asociativo.
9. La página es redireccionada al sitio del banner.

Para ver sus estadísticas pueden crear una página que muestre los datos de cada campo, eso es muy fácil de hacer, y les doy el ejemplo con el campo de ban_id

admin.php
<?
if(@mysql_connect($serv,$user,$pass)) {
mysql_select_db($dbase);
} else {
echo "Hubo un error, disculpa las molestias";
exit();
}
$sel = mysql_query("SELECT * FROM tabla");
echo "<table width=100%>";
while($show=mysql_fetch_assoc($sel)) {
echo "<tr>".
"<td>".$show['ban_id']."</td>".
"</tr>";
}
echo "</table>";
?>


Lo que haría es:
7. Seleccionar todo de la tabla
8. Imprimir el tag de la tabla HTML
9. Se muestra la información como un array asociativo
10. Se abre una fila
11. Se imprime la celda con el id
12. Se cierra la fila
13. Se cierra el while
14. Se cierra la tabla HTML

NOTA 1:
Un error común que todos hacemos es usar mysql_fetch_array() en vez de mysql_fetch_assoc(). Esto nos da un gasto de procesos innecesarios, ya que con array abrimos tanto un índice numeral como el índice asociativo (nombre del campo). Usando assoc directamente, nos ahorra tiempo si solo necesitamos usar los nombres de los campos para nuestras aplicaciones.

NOTA 2:
Colocando un @ antes de una función evita (no en todas las funciones) que se muestre un mensaje de error, en caso que algo salga mal. Es por eso que cuando algo salga mal en la conexión al motor MySQL, sólo se mostrará el mensaje que he colocado.

Espero que les haya sido tan útil como a mí este pequeño script y que lo disfruten mucho Cuenten muchos clicks e impresiones!