模仿OSO的论坛(一)


Posted in PHP onOctober 09, 2006

 
    相信每一个到过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>

PHP 相关文章推荐
使用PHP维护文件系统
Oct 09 PHP
让你的网站首页自动选择语言转跳
Dec 06 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
Jul 01 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
如何利用PHP实现上传图片功能详解
Sep 24 PHP
PHP sdk实现在线打包代码示例
Dec 09 PHP
swoole锁的机制代码实例讲解
Mar 04 PHP
几种显示数据的方法的比较
Oct 09 #PHP
用session做客户验证时的注意事项
Oct 09 #PHP
用php+mysql一个名片库程序
Oct 09 #PHP
PHP与javascript的两种交互方式
Oct 09 #PHP
用PHP和ACCESS写聊天室(六)
Oct 09 #PHP
PHP+javascript模拟Matrix画面
Oct 09 #PHP
用PHP和ACCESS写聊天室(五)
Oct 09 #PHP
You might like
一个捕获函数输出的函数
2007/02/14 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
easy_install python包安装管理工具介绍
2013/02/10 Python
Python编程入门的一些基本知识
2015/05/13 Python
浅谈python中get pass用法
2019/03/19 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python如何对链表操作
2020/10/10 Python
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
营销与策划个人求职信
2013/09/22 职场文书
品酒会策划方案
2014/05/26 职场文书
2015年党总支工作总结
2015/05/25 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫
如何利用python实现Simhash算法
2022/06/28 Python