Rotador de banners con estadísticas

>> //seccion/php/ -- 1 comentario /// Agregado el 2003-11-19 @ Por MasterChowl

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 necesitariamos tener estadisticas de este banner, cuantas veces se ve, cuantos clicks se le han dado, etc. Es un principio super basico de un google ad, claro si comprobar pero es un inicio.

En este tutorial tomaremos ya en cuenta que sabes lo básico de PHP: conección a BD, agregar y sacar info de la DB
Codigo:

1
2
3
4
5
6
7
8
9
<?php
CREATE TABLE tabla 

                
ban_id int(255NOT NULL auto_increment
                
ban_url varchar(255NOT NULL 
                
ban_img varchar(255NOT NULL 
                
ban_click int(255NOT NULL default '0'
                
ban_impre int(255NOT NULL default '0'
                
PRIMARY KEY (ban_id)) TYPE=MyISAM
?>

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.

db.php
Codigo:
1
2
3
4
5
6
7
8
9
<?php
$host 
"localhost";// dejen este así 
$username "root";// Nombre de usuario de la Base de Datos 
$password "";   // Password de la base de datos    
$basedatos "mctekk"//Base de datos que vamos a usar 

$db mysql_connect($host$username$password); 
mysql_select_db($basedatos$db); 
?>

» Paso 02 - Banner


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

banner.php
Codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
include("db.php");

$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 tabla SET ban_impre = ban_impre+1 WHERE ban_id = '$rand'"); 
?>

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

1. conexión al motor MySQL...

2. Se selecciona todo de la tabla.

3. Se crea la semilla del rotador (mejorado).

4. Se cuentan todos los banners y se los guarda en $max.

5. Se genera un número aleatorio entre 1 y el máximo ($max).

6. Se selecciona un banner de la tabla donde el campo ban_id sea igual al número aleatorio.

7. Mientras $ban sea un array asociativo...

8. Imprimir en la pantalla un link a click.php?id= id elegido en la tabla.

9. La imagen desde la dirección almacenada en la tabla, cerramos link.

10. Cerramos el while.

11. Actualizamos la tabla con una impresión más de la que ya había.

» Paso 03 - Click


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
Codigo:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include("db.php");

mysql_query("UPDATE tabla SET ban_click = ban_click+1 WHERE ban_id='".addslashes($_GET['id'])."' "); 

$showurl mysql_query("SELECT * FROM tabla WHERE ban_id='".addslashes($_GET['id'])."' "); 

while(
$rowed mysql_fetch_assoc($showurl)) 
      {   
      
header("Location: ".$rowed['ban_url']);   
      } 
?>


3. Se actualiza la cantidad de clicks en el banner contenido en $_GET[‘id’].

5. Se muestra la información como un array asociativo

9. La página es redireccionada al sitio del banner.

» Paso 04 - Admin


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
Codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include("db.php");

$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

» Paso 05 - Ultimo


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!

Descargar