### 用 PHP 实现小型站点广告管理

图片链接广告大概是最为常用的网络广告模式，但是多条广告的动态随机显示可不是那么简单的事情。PHP 的文件上传函数提供了在这块 468x60 像素的区域（网页广告的标准尺寸）实现能够根据权值大小而随机显示广告的解决方案，从而避免了开发 FTP 程序或是 ASP 和 Perl CAI 中需要外挂扩展才能实现此项功能的弊端。
本例在 PHP4+MySQL+Apache for Win9x/2000 下调试通过，共包括两部分：用来增加新广告的程序 AddNewAd.php3 以及显示广告的程序 ShowAd.php3，都存放在服务器 PHP 文件目录下的“test/guanggao/”目录中。在 guanggao 目录中建立一个存放广告链接图片的子目录“adbanner/”。下面我们按步骤进行分析。
1.首先，建立 MySQL 数据库:guanggao
在 Windows 环境下，建立一个 MySQL 空数据库很简单，因为每个数据库都是存在于 mysql/data/目录下的一个子目录，所以只要在该目录下新建子目录 guanggao 就可以了，这时数据库内还没有任何表和数据。
2.建立新增广告程序：AddNewAd.php3
设计思路：其中先用表单得到用户的新广告信息；然后用 PHP 函数 copy()将链接图片（banner）文件上传到服务器 adbanner 目录下；最后将图片文件名、广告网址、说明、加权信息等写入建立的 MySQL 数据表 ad 中。该程序代码如下：
# AddNewAd.php3——增添新的广告 #
<center><h1>增添新广告</h1></center>
//表单用来输入新增广告信息，并交给下面的 PHP 程序处理；
//其中，加权值 priority 数字愈大，载入页面图片出现的机率就愈高，默认为 1。
<FORM ENCTYPE="multipart/form-data" ACTION="AddNewAd.php3" METHOD=POST>
广告 Banner: <input name=banner TYPE="file"><br>
广告网址 URL: <input name=url type=text size=30><br>
图片链接说明 ALT: <input name=alt type=text size=30><br>
显示加权: <input name=priority type=text size=5 value=1><br>
<input type="submit" VALUE="提交">
</FORM>
//处理表单数据的 PHP 程序；
<?php
//图片 banner 名和链接地址不能为空；
if (( banner!="") & ( url!="")) {
//若广告链接和图片名已被使用，必须另选；
if (file_exists("adbanner/". banner_name)) {
echo "广告图片. banner_name.已被使用,请另选！";
exit;
};
//上传链接图片文件名到 adbanner 目录；
copy( banner,"adbanner/". banner_name);
//连接 MySQL 数据库；
connection = mysql_connect();
//选择数据源 guanggao，执行查询；;
mysql_select_db("guanggao", );
query="SELECT * FROM ad";
result=mysql_query( query);
//如果数据表 ad 不存在,则按以下结构创建新数据表 ad;
if(!result){
mysql_query("
create table ad(
url varchar(100) not null,
banner varchar(150) not null,
alt varchar(100) null,
priority tinyint(4) default 1 not null
)") or die(mysql_error());
}
//向数据表 ad 中插入来自于表单的新数据；
query="insert into ad(url, banner, alt, priority) values( url, banner_name,
alt, priority)";
//插入成功则显示以下信息；
try=mysql_query( query);
if( try){
echo "一条广告新增完成，详细信息：
";
echo "<a href=" url"><img src="adbanner/ banner_name" alt=". alt." border=0></a><br>";
echo "广告网址: url<br>广告链接说明: alt<br>显示加权: priority ";
}
}
?>
3.建立显示广告程序：ShowAd.php3
设计思路：得到数据库表中所有各列信息分别存到相应的一维数组中，将所有广告的权值相加得到一个最大随机数，每次载入页面用 srand() 产生一个随机树种子，再用 rand()函数产生一个从 1 到最大随机数之间的一个随机数，然后按照一定的规则随机显示不同广告条，权值越大被显示的机会越大。
# ShowAd.php3——随机显示广告 #
<?php
//连接选择数据库；
connection = mysql_connect();
mysql_select_db("guanggao", connection);
//执行查询得到广告条数；
query="SELECT url, banner, alt, priority FROM ad where priority > 0";
result=mysql_db_query("guanggao", query);
numrows=mysql_num_rows( result);
//使用 mysql_fetch_object()函数获取有用的列信息并存到相应数组中；
while( row = mysql_fetch_object( result)) {
adurl[]= row->url;
adbanner[]= row->banner;
adalt[]= row->alt;
adpriority[]= row->priority;
}
//初始化中间变量；
numcheck= numrows;
i= pricount=0;
//得到最大随机数；
while( numcheck) {
pricount+= adpriority[ i];
i++; numcheck--;
}
//程序执行时的百万分之一秒产生随机数种子；
srand((double)microtime()*1000000);
//得到 1 到最大随机数之间的一个随机数；
pri = rand(1, pricount);
//中间变量清零；
pricount=0;
//按加权值不同，产生用来显示广告的、元素为字串的数组；
for( i=0; i< numrows-1; i++) {
pricount += adpriority[ i];
if ( pri <= pricount) {
ad[]="<a href=" adurl[ i]" target=new></a>";
}
}
//显示广告，权值越大，显示机会越大；
echo ad[0];
?>