PHP+HTML简单实现BBS论坛与回帖

        本文主要讲述如何通过PHP+HTML简单实现BBS论坛和发帖/回帖的功能,这是提取我们php项目的部分内容。主要内容包括:
        1.通过JavaScript和Iframe实现局部布局界面
        2.PHP如何定义类实现访问数据库功能
        3.实现简单的BBS论坛和发帖/回帖功能
        由于这个项目是十个人在寒假完成,所以采用了SAE搭建在线的后台数据库,其他人在通过Apache本地设计网页、访问数据库的方法实现,相当于简单的BS三端访问。
        源码下载地址:http://download.csdn.net/detail/eastmount/8501443
        访问http://localhost:8080/testphp/index.php效果如下图所示:

PHP+HTML简单实现BBS论坛与回帖_第1张图片

PHP+HTML简单实现BBS论坛与回帖_第2张图片

一. 首页布局搭建

        首先是搭建首页的布局,主要布局分为head、main_left和main_right。其中右边显示部分采用的是iframe实现的局部显示,而左边采用JavaScript实现点击隐藏和显示功能。其中index.php首页代码如下:



《分布式系统》精品课程学习




	

您还未登录! | 登录| 学生注册| 教师注册

        这里的CSS代码布局调用css文件中的mycss.css实现:
html, body {
    height: '100%';
    width: '100%';
}
/*头部布局*/
#main{
	margin-left:200px;
	width:950px;
}
/*中部布局*/
#middle{
	width:950px;
	height:500px;
	background-color:#b6effa;
}
/*中部左边*/
#index_left{
	float:left;
	margin-top:10px;
	margin-left:10px;
	width:180px;
	height:480px;
}
/*中部右边*/
#index_right{
	float:right;
	margin-top:10px;
	margin-right:20px;
	width:720px;
	height:480px;
	border-style:double;
}
/*中部右边*/
#logout_middle{
	float:right;
	margin-top:100px;
	margin-right:220px;
	width:500px;
	height:300px;
	border-style:double;
	background-color:#ffffff;
}
        在Iframe中主要的代码是,调用时“BBS论坛”声明target为rightFrame即可。同时隐藏显示设置style.display为block或none。
        其中main_left.php代码如下,此时即可实现上面的布局。








课程首页
课程概况
互动交流
BBS论坛
通知公告
        显示的效果如下:
PHP+HTML简单实现BBS论坛与回帖_第3张图片

二. 实现BBS论坛及回复

        论坛主要通过自定义类database文件夹下Httppost.php实现,其中main_right3-1.php是显示所有BBS论坛帖子的主题,而main_right3-1-content.php是对应帖子的内容,包括回复内容等。
        其中main_right3-1.php的代码如下:



当前位置: BBS论坛 返回
doquery('2',"select * from BBS_Post;"); //解析json $dj=json_decode($result,true); $jcount=count($dj); for($i=0; $i<$jcount; $i++){ ?>
  • 发帖身份:   |  发帖人编号:
  • 提问时间:
        这里需要指出HTML代码"../database/httppost.php"中".."表示返回上一级目录,该代码的目录如下图所示,源代码放在Apache中htdocs文件夹中。
PHP+HTML简单实现BBS论坛与回帖_第4张图片
        其中main_right3-1-content.php代码如下:


当前位置: BBS论坛 返回
doquery('2',"select * from BBS_Post where BP_Pid='".$_GET['bbsid']."';"); //解析json $dj=json_decode($result,true); $jcount=count($dj); for($i=0; $i<$jcount; $i++){ $_SESSION['bbsid']=$dj[$i]['BP_Pid']; ?>
[贴] 




楼主 1#

身份

doquery('2',"select * from BBS_Reply where BR_Pid='".$_GET['bbsid']."';"); //解析json $dj=json_decode($result,true); $jcount=count($dj); for($i=0; $i<$jcount; $i++){ ?>




楼层 #

身份

回复楼层#

  回复楼层


   回复   

doquery('1',$sql); //echo ""; header('Location:main_right3-1.php'); } ?>
        发帖回复显示效果如下图所示:
PHP+HTML简单实现BBS论坛与回帖_第5张图片
PHP+HTML简单实现BBS论坛与回帖_第6张图片
        发帖的代码就不贴出来了,可以查看源代码。写到此处可能你会疑惑数据库访问部分的内容,下面进行简单讲解吧!

三. PHP定义类及成员函数

        在PHP中我们通常课程学习时完成的网站都是基于面向过程的方法,从而忽略了它的面向对象知识,我显然也犯了这样的错误。
        PS:由于该项目是《面向对象分析与开发》课程作业,所以需要用面向对象的知识去分析和实现。突然有一天我发现PHP以前用的都是HTML和PHP布局后台实现的,没用用到类、封装、继承的知识,但查阅相关资料后发现它都是有这些东西的。
        后来在实现这个项目过程中我们定义了不同的类(感谢PU哥),这里仅仅举例数据库方面和Human类。
 $type , 'sqlExe' => $sql); 
			$data = http_build_query($data);  
			$opts = array ('http' => array ('method' => 'POST','header'=> 
				"Content-type: application/x-www-form-urlencoded\r\n" ."Content-Length: "
				. strlen($data) . "\r\n",'content' => $data)); 
			$context = stream_context_create($opts);
			$html = file_get_contents('http://courseweb.sinaapp.com/courseweb.php', false, $context);
			return $html;
	}	
}
?>
        同时定义Human类,而继承该类的Student和Teacher是两种身份的登陆用户。其中构造函数、实例化都已经在成员函数中写好。
doquery('2',"select * from Student_Info where Sinf_id='".$id."';");
			if($result =='error' || $result=='null'){ //返回无值
        return -1; //没有用户,返回0
			}
      else{
      	$dj=json_decode($result,true);
        $jcount=count($dj);
        for($i=0; $i<$jcount; $i++){
            //只有一个密码
            $right_pwd=$dj[$i]['SInf_Pwd'];  //学生登录密码
        }	   
        if($spwd == $right_pwd) return 1;    //验证成功,可以登陆
        else return 0;//密码错误
      }
		}
		else if($type==2)
		{
      $result=$hpi->doquery('2',"select * from Teacher_Info where TI_id='".$id."';");
			if($result =='error' || $result=='null'){ //返回无值
       	return -1; //没有用户,返回0
			}
      else{
      	$dj=json_decode($result,true);
        $jcount=count($dj);
        for($i=0; $i<$jcount; $i++){
            //只有一个密码
            $right_pwd=$dj[$i]['TI_Pwd']; //学生登录密码
        }	   
        if($spwd==$right_pwd) return 1; //验证成功,可以登陆
        else return 0;//密码错误
      }
		}
	}
}

class Student extends Human{
	private $bir; //出生日期
	private $maj; //专业
	private $eym; //入学年份
	private $score; //得分

	function __construct($sid){ //1参构造函数
		$this->hid=$sid;
		$stu=new HttpPostInf();	
		$result=$stu->doquery('2',"select * from Student_Info where Sinf_ID='".$sid."';");
        //echo 'result:'.$result;
		//解析json
		$dj=json_decode($result,true);
		$jcount=count($dj);
		for($i=0; $i<$jcount; $i++){
			//只返回1个,所以只取一个即可,jcount=1
			$this->bir=$dj[$i]['SInf_Bir'];
			$this->maj=$dj[$i]['SInf_Maj'];
			$this->eym=$dj[$i]['SInf_Eym'];
			$this->score=$dj[$i]['SInf_Score'];
            //或者写:$score=$dj->Sinf_Bir;
			$this->pwd=$dj[$i]['SInf_Pwd'];
			$this->name=$dj[$i]['SInf_Name'];
			$this->sex=$dj[$i]['SInf_Sex'];
			$this->email=$dj[$i]['SInf_Email'];	
		}   
	}
  function getname(){return $this->name;}
	function getsex(){return $this->sex;}
	function getemail(){return $this->email;}
	function getpwd(){return $this->pwd;}
	function getbir(){return $this->bir;}
	function getmaj(){return $this->maj;}
	function geteym(){return $this->eym;}
	function getscore(){return $this->score;}
}

class Teacher extends Human{
	private $ptitle; //职称
	private $res;    //成果
	private $award;  //获奖
	
	function __construct($tid){ //1参构造函数
		$this->hid=$tid;
		$stu=new HttpPostInf();	
		$result=$stu->doquery('2',"select * from Teacher_Info where TI_ID='".$tid."';");
		//echo 'result:'.$result;
		//解析json
		$dj=json_decode($result,true);
		$jcount=count($dj);
		for($i=0; $i<$jcount; $i++){
			//只返回1个,所以只取一个即可,jcount=1
			$this->ptitle=$dj[$i]['TI_Ptitle'];
			$this->res=$dj[$i]['TI_Res'];
			$this->award=$dj[$i]['TI_Award'];
      //或者写:$score=$dj->Sinf_Bir;
			$this->pwd=$dj[$i]['TI_Pwd'];
			$this->name=$dj[$i]['TI_Name'];
			$this->sex=$dj[$i]['TI_Sex'];
			$this->email=$dj[$i]['TI_Email'];				
		}	
	}
   function getname(){return $this->name;}
		function getsex(){return $this->sex;}
		function getemail(){return $this->email;}
		function getpwd(){return $this->pwd;}
		function getptitle(){return $this->ptitle;}
		function getres(){return $this->res;}
		function getaward(){return $this->award;}
}
?>
        再调用上面定义的类HttpPostInf和Human,实现访问数据库的简单代码如下所示:
                        //查询贴
                $hgi=new HttpPostInf();
                $result=$hgi->doquery('2',"select * from BBS_Post;");//SQL语句
                //解析json
                $dj=json_decode($result,true);
                $jcount=count($dj);
                for($i=0; $i<$jcount; $i++) {   
                        echo $dj[$i]['BP_Pid'];
                }
        ?>
        而当用户登录后会使用Session记录用户的id,然后通过类实例化即可实现获取该用户的所有信息,简单的代码如下:
        $h1=new Student('2220140598');
        echo $h1->getname(); echo '
';

        echo $h1->getsex(); echo '
';

        echo $h1->getemail(); echo '
';


        最后希望文章对大家有所帮助,尤其发现PHP方面搭建的文章比较少!相对多的文章是PHP关于某个细节处理,同时更希望大家学习下PHP类相关的知识。总感觉自己写博客有些问题,但自己说不出来,希望大家提出不足之处!该代码数据库是布局在SAE上的,所以直接运行可以出现上面所有图形的效果。
      (By:Eastmount 2015-3-14 下午4点  http://blog.csdn.net/eastmount/)

你可能感兴趣的:(PHP基础知识及网站开发,php,Html,BBS论坛,php类)