Qualche anno fa mi sono creato un codice PHP per la creazione di un banner rotation per effettuare uno scambio banner con più siti affiliati. Il codice che seguirà è ridotto all’osso, è molto basilare in quanto avevo codificato tutto di fretta e solo per quello che mi era necessario; di conseguenza il codice è largamente migliorabile (ed implementabile visto che non è presente la gestione del backend).

Lo script si appoggia ad un database, nel mio caso MySql, per gestire la configurazione e l’aggiornamento delle varie campagne. Di seguito il codice della tabella adv utilizzata per la memorizzazione delle impostazioni.

Ad ogni modo il meccanismo è abbastanza semplice, il codice posto su di una pagina php estrae in maniera random una campagna banner dal database, selezionando tra quelle attive, cioè le cui visualizzazioni non hanno ancora superato le impression pattuite, e la data di inizio sia stata raggiunta.

[cc lang=”Sql”]
CREATE TABLE IF NOT EXISTS `adv` (
`id` int(6) unsigned zerofill NOT NULL auto_increment,
`user` varbinary(16) NOT NULL default ”,
`password` varbinary(16) default NULL,
`impression` int(7) unsigned zerofill NOT NULL default ‘0000000’,
`views` int(7) unsigned zerofill NOT NULL default ‘0000000’,
`hit` int(7) unsigned zerofill NOT NULL default ‘0000000’,
`destination` varchar(128) NOT NULL default ‘http://’,
`banner` varchar(128) NOT NULL default ‘http://’,
`startdate` date NOT NULL default ‘2000-01-01’,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;[/cc]

[adrotate banner=”2″]

La parte che segue la potete inserire in un file esterno, ad esempio chiamandolo banner.php, che poi andrete ad includere con il comando php include(“banner.php”); nelle pagine in cui vorrete far visualizzare il vostro banner (inserite il file nello stesso percorso del file php che mostrerà il banner, altrimenti ricordate di passare alla funzione inlcude anche il path).

[cc lang=”php”]
<?
$today = date(“Y-m-d”);
$query=mysql_query(“SELECT * FROM adv WHERE views=0){
$random=rand(0,$n);
mysql_data_seek($query,$random);
$result=mysql_fetch_row($query);
$id=$result[0];
$query_update_views=”UPDATE adv SET views=views+1 WHERE id=$id”;
echo “<a href=\”advertisement.php?id=”.$id.”\” target=\”_blank\”><img src=\””.$result[7].”\” border=\”0\” alt=\”\”></a><br><br>”;
mysql_query($query_update_views);
}
?>[/cc]

Come forse avrete già notato, il codice precedente fa uso di un altro file, advertisement.php al quale viene passato come parametro l’id della campagna pubblicitaria estratta.

Il file non fa altro che effettuare l’update delle eventuali hit sul banner, aggiornando il contatore delle click rate, per poi reindirizzare l’utente nel link di destinazione del banner.

Per ultimo vediamo il file delle statistiche, da dare ai partner dello scambio banner per visualizzare le statistiche di rendimento della campagna pattuita.
[cc lang=”php”]
mysql_connect($dbserver,$dbusername,$dbpassword);
mysql_selectdb($dbname);
if(isset($_POST[‘user’])) {
$user = $_POST[‘user’];
$pass = $_POST[‘pass’];
$query = mysql_query(“SELECT * FROM adv WHERE user like ‘$user’ AND password like ‘$pass'”);
$n=mysql_num_rows($query);
if($n==1){
$result = mysql_fetch_row($query);
echo ”
<caption><h1>Statistiche Account</h1></caption>
<tr><td class=\”statshead\”>Campagna</td><td class=\”statsbody\”>$result[0]</td></tr>
<tr><td class=\”statshead\”>Username</td><td class=\”statsbody\”>$result[1]</td></tr>
<tr><td class=\”statshead\”>Password</td><td class=\”statsbody\”>$result[2]</td></tr>
<tr><td class=\”statshead\”>Impression</td><td class=\”statsbody\”>$result[3]</td></tr>
<tr><td class=\”statshead\”>Views</td><td class=\”statsbody\”>$result[4]</td></tr>
<tr><td class=\”statshead\”>Click</td><td class=\”statsbody\”>$result[5]</td></tr>
<tr><td class=\”statshead\”>Destinazione</td><td class=\”statsbody\”>$result[6]</td></tr>
<tr><td class=\”statshead\”>Banner</td><td class=\”statsbody\”>$result[7]</td></tr>
<tr><td class=\”statshead\”>Start Date</td><td class=\”statsbody\”>$result[8]</td></tr>
</table>”;
}
else echo “<br><h1>Username o Password errati!</h1><br><br>”;
}
else{
?>
<br><br>
<h1>Statistiche Account</h1><br>
<table border=”0″ cellspacing=”3″ cellpadding=”3″>
<form action=”advstats.php” method=”post”>
<tr><td align=”right”>Username:</td><td><input type=”text” name=”user”></td></tr>
<tr><td align=”right”>Password:</td><td><input type=”password” name=”pass”></td></tr>
<tr><td colspan=”2″ align=”center”><br><input type=”submit” value=”Accedi”>&nbsp;<input type=”reset”></td></tr>
<form>
</table>
<?
}
?>
<br><br><br><br>
<input onclick=”history.back()” type=”button” value=”indietro”>
</CENTER>
</BODY>
</HTML>
[/cc]

Questo è tutto quello che mi è servito per implementare la banner rotation.

[adrotate banner=”1″]