模仿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 引用文件技巧
Mar 02 PHP
PHP If Else(elsefi) 语句
Apr 07 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
[原创]php实现 data url的图片生成与保存
Dec 04 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
js实现筛选功能
2020/11/24 Javascript
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
小学母亲节活动方案
2014/03/14 职场文书
无毒社区工作方案
2014/05/23 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
党支部综合考察意见
2015/06/01 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
公司考勤管理制度
2015/08/04 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python