模仿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 相关文章推荐
在普通HTTP上安全地传输密码
Jul 21 PHP
实用函数4
Nov 08 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
PHP 函数学习简单小结
Jul 08 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
php结合ajax实现赞、顶、踩功能实例
May 12 PHP
php发送邮件的问题详解
Jun 22 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 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自动判断字符集并转码的详解
2013/06/26 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
Python生成随机数的方法
2014/01/14 Python
python实现sublime3的less编译插件示例
2014/04/27 Python
Python中实现对list做减法操作介绍
2015/01/09 Python
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
python实现员工管理系统
2018/01/11 Python
Django rest framework实现分页的示例
2018/05/24 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
详解Python3 pandas.merge用法
2019/09/05 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
python判断是空的实例分享
2020/07/06 Python
python如何绘制疫情图
2020/09/16 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
Oracle快照(snapshot)
2015/03/13 面试题
2014年药店工作总结
2014/11/20 职场文书
教学质量月活动总结
2015/05/11 职场文书
离婚起诉书范本
2015/05/18 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
妇产科护理心得体会
2016/01/22 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python