在线竞拍系统的PHP实现框架(一)


Posted in PHP onOctober 09, 2006

前面我给了一个分页显示mysql记录的类,却没给出使用的例子,现在,我整理了我刚写的一个在线竞拍系统框架程序,来说明这个类的使用方法,而且也就在线竞拍的实现方法与大家一起来讨论一下。

首先声明,我不是高手,也不是行家,只是一个fans,所以这个程序肯定有不少漏洞,但我之所以敢拿出来,是因为我很希望能自由地与大家分享PHP带给我们的快乐。(其实是想多加点分好弄个支持mysql的空间^_^)

我觉得竞拍系统与一般的供求信息发布系统相比,最大的不同有两点,一点是出价者开的新价要及时地反映在商品的价格上,另一点是有时间的限制,在竞标结束后,就要停止出价。并且给出最后中标者。

其它的我还没想到呢,有行家给点介绍吧。

所以,我想把一个供求信息发布系统做成一个竞拍系统应是不困难的事吧。

下面先把新版的TViewPage类和数据库结构给出来吧。

<?php
/*********************************************
TViewPage v 1.2

分页显示Mysql数据库记录的类

作者:sharetop
E-mail:ycshowtop@21cn.com
时间:2000-8-31

[2000-9-6] 1.2
修正了readlist()的一个bug,将验证offset放入类中。
增加add() delete() modify()三个基本操作函数。

本类没有提供连接数据库的功能,所以需在外部打开相应的数据库。

本类也没有提供显示记录的功能,只是分页读取记录至 Result二维数组中。

需在外部自定义数据显示格式。
***********************************************/
class TViewPage {

var $Table; //表名
var $MaxLine; //每页显示行数

var $Offset; //记录偏移量
var $Total; //记录总数
var $Number; //本页读取的记录数
var $Result; //读出的结果

var $TPages; //总页数
var $CPages; //当前页数

var $Condition; //显示条件 如:where id='$id' order by id desc
var $PageQuery; //分页显示要传递的参数

//******构造函数*************
//参数:表名、最大行数、偏移量

function TViewPage($TB,$ML){
global $offset;

$this->Table=$TB;
$this->MaxLine=$ML;
if(isset($offset)) $this->Offset=$offset;
else $this->Offset=0;
$this->Condition="";
}

//********设置显示条件*********
//如:where id='$id' order by id desc
//要求是字串,符合SQL语法(本字串将加在SQL语句后)

function SetCondition($s){
$this->Condition=$s;
}

//******设置传递参数************
// key参数名 value参数值
// 如:setpagequery("id",$id);如有多个参数要传递,可多次调用本函数。

function SetPageQuery($key,$value){
$tmp[key]=$key; $tmp[value]=$value;
$this->PageQuery[]=$tmp;
}

//********读取记录***************
// 主要工作函数,根据所给的条件从表中读取相应的记录
// 返回值是一个二维数组,Result[记录号][字段名]

function ReadList() {
$SQL="SELECT Count(*) AS total FROM ".$this->Table." ".$this->Condition;

$result=mysql_query($SQL) or die(mysql_error());
$row=mysql_fetch_Array($result);
$this->Total=$row[total];

if($this->Total>0) { //根据条件 Condition
$SQL="SELECT * FROM ".$this->Table." ".$this->Condition.
" LIMIT ".$this->Offset." , ".$this->MaxLine;

$result=mysql_query($SQL) or die(mysql_error());
$this->Number=mysql_num_rows($result);

$i=0;
while($row=mysql_fetch_Array($result)){
$this->Result[$i]=$row;
$i++;
}
}
return $this->Result;
}

//*******加入新记录**********
//$str为加入的值,如 "'$id','$name','$class'"等

function Add($str){

$SQL="INSERT INTO ".$this->Table." VALUES(".$str.")";
mysql_query($SQL) or die(mysql_error());

}

//*********删除记录**********
//先调用SetCondition()来确定条件。

function Delete(){
$SQL="DELETE FROM ".$this->Table." ".$this->Condition;
mysql_query($SQL) or die(mysql_error());
}

//********修改记录************
//$field 字段名 $value新值
//如要修改多个字段可重复调用来函数。

function Modify($field,$value){
$SQL="UPDATE FROM ".$this->Table." SET ".$field."=".$value." ".$this->Condition;
mysql_query($SQL) or die(mysql_error());
}

//**********显示页数*************
//显示当前页及总页数

function ThePage() {
$this->TPages=ceil($this->Total/$this->MaxLine);
$this->CPages=$this->Offset/$this->MaxLine+1;
echo "第".$this->CPages."页/共".$this->TPages."页";
}

//**********显示翻页按钮*************
//此函数要在ThePage()函数之后调用!!!
//显示首页、下页、上页、未页,并加上要传递的参数

function Page() {
$first=0;
$next=$this->Offset+$this->MaxLine;
$prev=$this->Offset-$this->MaxLine;
$last=($this->TPages-1)*$this->MaxLine;

$k=count($this->PageQuery);
$strQuery=""; //生成一个要传递参数字串
for($i=0;$i<$k;$i++){
$strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];
}

if($this->Offset>=$this->MaxLine)
echo "<A href=$PHP_SELF?offset=".$first.$strQuery.">首页</A>|";
if($prev>=0)
echo "<A href=$PHP_SELF?offset=".$prev.$strQuery.">上一页</A>|";
if($next<$this->Total)
echo "<A href=$PHP_SELF?offset=".$next.$strQuery.">下一页</A>|";
if($this->TPages!=0 && $this->CPages<$this->TPages)
echo "<A href=$PHP_SELF?offset=".$last.$strQuery.">末页</A>";
}

//******end class
}

?>

//************************
ebid.sql文件(我是用phpmyadmin导出的)

# phpMyAdmin MySQL-Dump
# http://www.htmlwizard.net/phpMyAdmin/
#
# Host: localhost Database : ebid

# --------------------------------------------------------
# Table structure for table 'reply'
# id,商品id,出价人,出价人的email,出价。

CREATE TABLE reply (
id varchar(16) NOT NULL,
parentid varchar(16) NOT NULL,
buyer varchar(12) NOT NULL,
email varchar(32) NOT NULL,
price float(10,2) DEFAULT '0.00' NOT NULL,
PRIMARY KEY (id, price)
);

# --------------------------------------------------------
# Table structure for table 'shop'
# id,商品名,介绍,原始价,加价单位,结束时间,竞标数,当前价,是否有照片

CREATE TABLE shop (
id varchar(16) NOT NULL,
name varchar(50) NOT NULL,
description text,
price float(10,2) DEFAULT '0.00' NOT NULL,
unit tinyint(2) unsigned NOT NULL,
endtime varchar(16) DEFAULT '0000-00-00 00:00' NOT NULL,
reply int(4) unsigned NOT NULL,
curprice float(10,2) DEFAULT '0.00' NOT NULL,
photo tinyint(1) unsigned NOT NULL,
PRIMARY KEY (id),
KEY kreply (reply)
);

配置文件如下:
//**************
//config.inc.php

<?php

$HOST="localhost"; //主机名
$DATABASE="ebid"; //数据库名
$WARE_TABLE="shop"; //商品表
$BID_TABLE="reply"; //回应表
$USER="root"; //用户
$PASSWD="9999"; //密码

$PAGE_MAX_LINE=20; //每页显示行数

//打开数据库
$LinkID=mysql_connect($HOST,$USER,$PASSWD);
mysql_select_db($DATABASE,$LinkID) or die(mysql_error());

?>

以下是显示商品及TOP10商品的函数
//*****************
//
<?php
include "config.inc.php";
include "tview.class.php"; //类文件

//*****显示商品列表********
function PrintList(){
global $view;

$ct=time();

//设置条件的句子!要满足SQL语法哦。只显示没有结束竞标的商品
$view->SetCondition("where endtime>'$ct' order by id desc");

//调用成员函数来读记录
//结果$result[记录号][字段名] 是二维数组。
$result=$view->ReadList();

if($view->Number==0) {echo "<tr><td colspan=4> </td></tr>"; return;}

for($i=0;$i<$view->Number;$i++){
if(ceil($i/2)*2==$i) $bgc="#ffffff";
else $bgc="#f3f3f3";
echo "<tr bgcolor=$bgc><td width=60% >";
echo "<a href="javascript:showdetail('detail.php?id=".$result[$i][id]."')">".$result[$i][name]."</a>";
echo "</td><td width=15% >";
echo date("Y-m-j 24:00:00",$result[$i][endtime]);
echo "</td><td width=15% align=right>¥";
echo $result[$i][curprice];
echo "</td><td width=10% align=right>";
echo $result[$i][reply];
echo "</td></tr>";
}
}

//*********显示最热的10条记录**********
function ListTopHot(){
global $view;

//同样先设置条件
$view->SetCondition("order by reply desc");
//读记录
$result=$view->ReadList();

$k=(count($result)>10)? '10':(count($result));

for($i=0;$i<$k;$i++){
echo "<tr><td>";
echo "<a href="javascript:showdetail('detail.php?id=".$result[$i][id]."')">".$result[$i][name]."</a>";
echo "</td></tr>";
}

}

//*********显示最新10条记录***********
function ListTopNew(){
global $view;

$view->SetCondition("order by id desc");
$result=$view->ReadList();

$k=(count($result)>10)? '10':(count($result));

for($i=0;$i<$k;$i++){
echo "<tr><td>";
echo "<a href="javascript:showdetail('detail.php?id=".$result[$i][id]."')">".$result[$i][name]."</a>";
echo "</td></tr>";
}
}

//**********<结束函数定义,主程序体*************
//构造这个viewpage类,给出商品表及每页显示行数

$view=new TViewPage($WARE_TABLE,$PAGE_MAX_LINE);

?>

下面给出用到的一个js函数吧,很简单,就是打开一个新窗口:
<script>
function showdetail(str){
window.open(str,"newwin","top=20,left=20,width=600,height=400,
location=no,toolbar=no,status=no,resizable=no,scrollbars=yes");
}
</script>

PHP 相关文章推荐
判“新”函数:得到今天与明天的秒数
Oct 09 PHP
基于mysql的bbs设计(五)
Oct 09 PHP
第七节--类的静态成员
Nov 16 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
PHP代码优化技巧小结
Sep 29 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 PHP
用在PHP里的JS打印函数
Oct 09 #PHP
在PHP的图形函数中显示汉字
Oct 09 #PHP
PHP中在数据库中保存Checkbox数据(2)
Oct 09 #PHP
PHP中显示格式化的用户输入
Oct 09 #PHP
提升PHP执行速度全攻略(下)
Oct 09 #PHP
PHP的面向对象编程
Oct 09 #PHP
PHP文本数据库的搜索方法
Oct 09 #PHP
You might like
怎样在UNIX系统下安装php3
2006/10/09 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
php批量修改表结构实例
2017/05/24 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
python 中random模块的常用方法总结
2017/07/08 Python
python放大图片和画方格实现算法
2018/03/30 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
海淘母婴商城:国际妈咪
2016/07/23 全球购物
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
火山动力Java笔试题
2014/06/26 面试题
村官学习十八大感想
2014/01/15 职场文书
户外活动总结范文
2014/04/30 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
保安2014年终工作总结
2014/12/06 职场文书
个人收入证明范本
2015/06/12 职场文书
教师节获奖感言
2015/07/31 职场文书
感恩教师主题班会
2015/08/12 职场文书
深入理解python多线程编程
2021/04/18 Python
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python