当前位置: 首页 > 图文教程 > 网络编程 > PHP > 模仿OSO的论坛(一)

PHP
PHP 执行系统外部命令 system() exec() passthru()
最新的php 文件上传模型,支持多文件上传
php 静态页面中显示动态内容
数据库查询记录php 多行多列显示
谈PHP生成静态页面分析 模板+缓存+写文件
PHP 各种排序算法实现代码
PHP nl2br函数 将换行字符转成 <br>
php 分页原理详解
Discuz 模板语句分析及知识技巧
php win下Socket方式发邮件类
怎样去阅读一份php源代码
建站常用13种PHP开源CMS比较
php xml留言板 xml存储数据的简单例子
PHP 开源AJAX框架14种
PHP 替换模板变量实现步骤
PHP has encountered an Access Violation at 7C94BD02解决方法
php 正则匹配函数体
php 文件夹删除、php清除缓存程序
php download.php实现代码 跳转到下载文件(response.redirect)
PHP类(Class)入门教程

PHP 中的 模仿OSO的论坛(一)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 286 ::
收藏到网摘: n/a


相信每一个到过OSO的人都会对OSO的论坛留下极深的印象,这个论坛无论从那一方面来说都是比较出色的。你想不想你的主页也有这么一个漂亮的论坛呢,其实并不太复杂的,下面我们仅从一些基本的部分来实现对OSO论坛的模仿。
由于我仅仅是使用这个论坛作为我的留言板,所以我的论坛可以算是OSO论坛的简配。1、在我的论坛中只有在用户登录后才能发言,用户的ID是存在一个叫“cookie_user”的cookie变量中的,2、我的论坛没有子论坛,3、我没有统计一个主题的点击数,4、在OSO论坛中每一个主题前面的表示有没有新贴子的图标我也没设计,5、对于OSO论坛所提供的可选择的主题排列方式以及显示时间段我也没考虑,6、没有会员发贴积分的统计,7、没有版主管理论坛的功能,8、没有贴子编辑的功能。我们将在最后提到如何在我的程序基础上扩充这八项功能。
首先是一个数据库的设计,事实上一个论坛牵涉到两个数据表,我们暂且将其命名为user、guestbook,在user表中存储的是注册用户的信息。其创建语句如下:
create table my_user(
user_id char(12) not null,/*用户名*/
user_password varchar(8) not null,/*用户密码*/
PRIMARY KEY (user_id)
)
guestbook中储存的是贴子内容。其创建内容如下:
CREATE TABLE guestbook (
id bigint DEFAULT '0' NOT NULL auto_increment,/*发言id,自增字段*/
name varchar(12) NOT NULL,/*主题创建人*/
type tinyint NOT NULL,/*类型0-回复;1-主贴*/
theme varchar(50) NULL,/*主题*/
content blob NOT NULL,/*内容*/
icon tinyint NOT NULL,/*表情图标*/
time_open datetime not NULL,/*主题创建时间*/
time_close datetime not NULL,/*最后回复时间*/
answer_count int not null,/*回复数*/
answer_name varchar(12) not null,/*最后回复人*/
main_id bigint null,/*主贴id*/
PRIMARY KEY (id)/**/
);
程序包含五个php源代码:分别是connect.inc.php,faq.php,read.php,post.php,reply.php,post_end.php
connect.inc.php:(用来连接数据库)
<?
$dbhostname = "localhost";
$dbusername = "";
$dbpassword = "";
$dbName = "";
MYSQL_CONNECT($dbhostname, $dbusername, $dbpassword) OR DIE("Unable to connect to database");
@mysql_select_db( "$dbName") or die( "Unable to select database");
?>

faq.php:(用来显示主题列表)
<HTML><HEAD><TITLE>疑难问题</TITLE>
<LINK href="mypic/style.css" rel=STYLESHEET type=text/css></HEAD>
<BODY bgColor=#cccc99 bottomMargin=0 leftMargin=0 topMargin=0 marginwidth="0" marginheight="0">
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<SCRIPT language=JavaScript
src="mypic/x.js"></SCRIPT>
<TR>
<TD vAlign=top>只有会员才能在此发言<BR>
<TABLE align=center border=0 cellPadding=4 cellSpacing=1 width=100% class=body_br >
<TBODY>
<TD width=45%></FONT> 主题数: <FONT
color=#0772b1>
<?php
include "connect.inc.php";
$query = "select count(*) from guestbook where type=1";
$res = mysql_query($query);
$row = mysql_fetch_row($res);
$total=$row[0];
$totalpage=floor($total/20)+1;
echo $total;
?>
</FONT></td><TD width=19%>帖子数: </TD>
<td width=1%><FONT color=#0772b1>
<?php
$query = "select count(*) from guestbook";
$res = mysql_query($query);
$row = mysql_fetch_row($res);
echo $row[0];
?>
</FONT></td><td width=1%></td><TD align=middle width=23%><A
href="post.php"><IMG
border=0
src="mypic/post.gif"></A></TD></TR>
<TR>
<TD align=middle bgColor=#6f6f6f><FONT color=#ffffff>主
题</FONT></TD>
<TD align=middle bgColor=#6f6f6f><FONT
color=#ffffff>创建人</FONT></TD>
<TD align=middle bgColor=#6f6f6f><FONT
color=#ffffff>回复</FONT></TD>
<TD align=middle bgColor=#6f6f6f><FONT
color=#ffffff>回复人</FONT></TD>
<TD align=middle bgColor=#6f6f6f><FONT
color=#ffffff>最后回复时间</FONT></TD></TR>
<?php
function TdBackColor() {
static $ColorStr;
if ($ColorStr=="#ededed") {
$ColorStr="#dedede";
} else {
$ColorStr="#ededed";
}
return($ColorStr);
}
if (!$page) $page=1;
$ysylimit=($page-1)*20;
$query = "select theme,answer_count,id,name,answer_name,DATE_FORMAT(time_close,'%Y-%m-%d') as mydate from guestbook where type=1 order by time_close DESC limit ".$ysylimit.",20 ";
$res = mysql_query($query);
for ($i=0; $i<20; $i++) {
$row = @mysql_fetch_array($res);
if(!$row) break;
$ColorStr=TdBackColor();
echo "<tr><td bgcolor=".$ColorStr." class=mid><A class=title href='read.php?theme_id=".$row['id']."&page=1'>".$row['theme'];
echo "</A>";
if ($row['answer_count']>5)
{echo "<FONT ";
echo "class=small color=#666666> <B>分页</B>:";
for ($j=1;$j<=($row['answer_count']-1)/5+1;$j++) echo "<A href='read.php?theme_id=".$row['id']."&page=".$j."'[".$j."][1]</A>";
}
echo "</td>";
echo "<TD align=middle bgColor=".$ColorStr.">";
echo $row['name']."</TD>";
$ii=$row['answer_count']-1;
echo "<TD align=middle bgColor=".$ColorStr." class=mid>".$ii."</TD>";
echo "<TD align=middle bgColor=".$ColorStr.">";
echo $row['answer_name']."</TD>";
echo "<TD align=middle bgColor=".$ColorStr."><FONT color=#ff8800>".$row['mydate']."</FONT></TD></TR>";}
?>
</TBODY></TABLE>
<HR SIZE=1 width=100%>
<B>分页</B>:
<?php
$page1=$page-1;
$page2=$page+1;
if ($page==1) echo "<FONT color=#999999>首页 前页</FONT> ";
else echo "<A href='faq.php?page=1'>首页</A> <A href='faq.php?page=".$page1."'>前页</A> ";
if ($page==$totalpage) echo "<FONT color=#999999>后页 尾页</FONT> ";
else echo "<A href='faq.php?page=".$page2."'>后页</A> <A href='faq.php?page=".$totalpage."'>尾页</A> ";
?>
<FORM action=faq.php method=post><FONT class=mid>当前页:<B><?php echo $page."/".$totalpage ?></B> 转到第<SELECT name=page onchange=javascript:location.href=this.options[this.selectedIndex].value>
<OPTION selected
<?php
$k=1;
echo "value=faq.php?page=".$k.">".$k."</OPTION>";
for ($k=2;$k<=totalpage;$k++)
echo "<OPTION value=faq.php?page=".$k.">".$k."</OPTION>";
?>
</SELECT> 页</FONT>
</FORM></TD></TR></TBODY></TABLE>
</html>