显示的效果如下:
二. 实现BBS论坛及回复 论坛主要通过自定义类database文件夹下Httppost.php实现,其中main_right3-1.php是显示所有BBS论坛帖子的主题,而main_right3-1-content.php是对应帖子的内容,包括回复内容等。 其中main_right3-1.php的代码如下:
<?php header("Content-Type: text/html; charset=utf-8"); //注意:include一个php文件不能重复,要递归检查是否重复引用 include ("../database/httppost.php");?><!-- 需要注意在Html中“..”表示回到上一级目录 而css与main_right3-1.php同级目录 --><link rel="stylesheet" href="css/main.css" type="text/css">
doquery('2',"select * from BBS_Post;"); //解析json $dj=json_decode($result,true); $jcount=count($dj); for($i=0; $i -
-
发帖身份: | 发帖人编号:
-
提问时间:
这里需要指出HTML代码"../database/httppost.php"中".."表示返回上一级目录,该代码的目录如下图所示,源代码放在Apache中htdocs文件夹中。 其中main_right3-1-content.php代码如下:
<?php header("Content-Type: text/html; charset=utf-8"); include ("../database/human.php"); session_start(); ?><link rel="stylesheet" href="css/main.css" type="text/css">
doquery('2',"select * from BBS_Post where BP_Pid='".$_GET['bbsid']."';"); //解析json $dj=json_decode($result,true); $jcount=count($dj); for($i=0; $i
楼主 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
楼层 # 身份 回复楼层# | | |
|
doquery('1',$sql); //echo "<script>alert('恭喜你修改成功!');</script>"; header('Location:main_right3-1.php'); }?> 发帖回复显示效果如下图所示:
发帖的代码就不贴出来了,可以查看源代码。写到此处可能你会疑惑数据库访问部分的内容,下面进行简单讲解吧! 三. PHP定义类及成员函数 在PHP中我们通常课程学习时完成的网站都是基于面向过程的方法,从而忽略了它的面向对象知识,我显然也犯了这样的错误。 PS:由于该项目是《面向对象分析与开发》课程作业,所以需要用面向对象的知识去分析和实现。突然有一天我发现PHP以前用的都是HTML和PHP布局后台实现的,没用用到类、封装、继承的知识,但查阅相关资料后发现它都是有这些东西的。 后来在实现这个项目过程中我们定义了不同的类(感谢PU哥),这里仅仅举例数据库方面和Human类。 <?phpheader ("Content-Type: text/html; charset=utf-8");class HttpPostInf{ function __construct(){ //无参构造函数 } function doquery($type , $sql){ //网路通信函数 $data = array ('sqlType' => $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是两种身份的登陆用户。其中构造函数、实例化都已经在成员函数中写好。 <?phpheader ("Content-Type: text/html; charset=utf-8");include_once("httppost.php");//人类,拥有教师和学生的共同属性和方法class Human{ private $hid; //唯一编号 private $pwd; //密码 private $name; //名字 private $sex; //性别 private $email; //邮箱 function __construct(){ //无参构造函数 } //静态验证函数 static function id_vf($id,$spwd,$type){ //类静态方法 type=1为学生,2为老师 $hpi=new HttpPostInf(); if($type==1) { $result=$hpi->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; $idoquery('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; $ihid=$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; $ibir=$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; $iptitle=$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 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点 ) |