模仿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的ob_start();控制您的浏览器cache!
Nov 25 PHP
php数组去重的函数代码
Feb 03 PHP
php引用传值实例详解学习
Nov 06 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
php实现singleton()单例模式实例
Nov 06 PHP
PHP时间和日期函数详解
May 08 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
PHP基于工厂模式实现的计算器实例
Jul 16 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
Yii2 queue的队列使用详解
Jul 19 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
一篇不错的PHP基础学习笔记
2007/03/18 PHP
discuz安全提问算法
2007/06/06 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
javascript 多级checkbox选择效果
2009/08/20 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
python二叉树的实现实例
2013/11/21 Python
Python中的闭包实例详解
2014/08/29 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
django admin 添加自定义链接方式
2020/03/11 Python
python中rc1什么意思
2020/06/19 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
2014年基层党组织公开承诺书
2014/03/29 职场文书
尊师重教演讲稿
2014/09/04 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
办理护照工作证明
2014/10/10 职场文书
婚前财产协议书范本
2014/10/19 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
Python中tqdm的使用和例子
2022/09/23 Python