模仿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 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
Jan 10 PHP
php db类库进行数据库操作
Mar 19 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
smarty中js的调用方法示例
Oct 27 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
PHP模板解析类实例
Jul 09 PHP
Symfony2函数用法实例分析
Mar 18 PHP
php支付宝在线支付接口开发教程
Sep 19 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
php抽象方法和普通方法的区别点总结
Oct 13 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
Yii使用Captcha验证码的方法
2015/12/28 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
Python标准库shutil用法实例详解
2018/08/13 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
物流经理自我评价
2013/09/23 职场文书
好邻里事迹材料
2014/01/16 职场文书
献爱心活动总结
2014/05/07 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
文明社区申报材料
2014/08/21 职场文书
庆七一宣传标语
2014/10/08 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
入党函调证明材料
2014/12/24 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
新店开张宣传语
2015/07/13 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
导游词之河北野三坡
2019/12/11 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby