新闻报价汽车商家技术软件 驱动     本站短域名:珠江路.cn、zjlu.net

电脑

数码

办公

网络

汽车

招聘

经销商

珠江路论坛

购物街
首页 新闻 专题 报价库 经销商 驱动 软件 游戏 学院
三大件 主板 显卡 显示器 装机推荐 珠江路渠道特价
手机 DC/DV GPS 笔记本 平板电脑
学院首页 软件应用 编程开发 创意设计
ASP ASP.NET PHP JSP SQL MYSQL Java VB DIV+CSS JavaScript XML

您的位置:电脑学院 >> 编程开发 >> PHP >> 用PHP实现一个文本型小论坛的源码(二)

";

echo "

用PHP实现一个文本型小论坛的源码(二)



这节要谈的是如何显示文章与评论。
这部分只用了一个文件来实现show.php3,内含了一个发表评论的表单

可以接受外部调用时传来的一个参数:
$id 文件名,不含扩展名

同时本程序也可接受自身传递来的四个参数:

$id 隐含类型,就是外部传来的$id再传一遍 :)
$name 文本,评论者大名
$email 文本,评论者的email,可为空
$content 多行文本,评论内容

源程序如下:


//打开.info文件和.body文件
$r1=file("http://www.zhujiangroad.com/page/".$id.".info"); //还记得我的目录和文件结构吧。
$r2=file("http://www.zhujiangroad.com/page/".$id.".body");

//取info文件建立时间,格式化成字串
$dd=date("Y-m-j",filemtime("http://www.zhujiangroad.com/page/".$id.".info"));

//取点击数,加1,注意这里要加一个回车!!!
//因为PHP是弱类型的语言,你给它+1,它就变成数值了,所以再给个回车变 //回字串好写入文件。
$r1[4]=($r1[4]+1)."n";

//如果是自身调用,则说明有评论,那就写入吧…
if(!empty($name) and !empty($content)) {

//我说过用r0、r1…作评论的扩展名
$fn="http://www.zhujiangroad.com/reply/".$id.".r".chop($r1[5]);

$r1[5]=($r1[5]+1); //回复数加1

$c=nl2br($content);
$d=date("Y-m-j H:i:s");
$fp=fopen($fn,"w");

fputs($fp,$name."n"); fputs($fp,$emailadd."n");
fputs($fp,$d."n"); fputs($fp,$c."n");
fclose($fp);

}

//先看一下有没有相应的info文件
if(!file_exists("http://www.zhujiangroad.com/page/".$id.".info"))
{ echo "没有找到文件!";exit;}

//先把改动了的点击数与回复数写回到文件中
$fp=fopen("http://www.zhujiangroad.com/page/".$id.".info","w");
for($i=0;$i<6;$i++){
fputs($fp,$r1[$i]);
}
fclose($fp);

//打开每个评论文件,读入一个二维数组
for($i=0;$i<$r1[5];$i++){
$f="http://www.zhujiangroad.com/reply/".$id.".r".$i;
if(!file_exists($f))continue;
$r3[]=file($f);
}

?>

现在我们得到三个数组:
$r1:文章标题、作者、email、点击数、回复数
$r2:文章内容
$r3[]:这是一个二维数组:
评论数 X 每个评论的信息(作者、email、时间、内容)
$dd:这是文章发表的时间,我们取出来的,记得吧。

显示这三个数组了,应该很容易做到了,就看你想要的格式了。

显示作者及时间代码如下:

echo "[".$r1[1]." ".$dd."]
本文被阅 ".$r1[4]." 次";
?>

显示评论的代码如下:

$k=count($r3);
if($k>0){
for($i=0;$i<$k;$i++) {
echo "

".$r3[$i][0]." 于 ".$r3[$i][2]." 评论说:
";
for($j=3;$j echo $r3[$i][$j];
}
echo "

";
}
}
?>

本节开始要讨论的是这个论坛的关键了,就是如何分页显示记录

如果是数据库,又是怎样做分页显示的,不知大家对此有没有经验。这方面的文章还是比较多的,你完全可以找一个来参考一下。

我在这里所采用的方式,与用数据库的方法其实是大同小异而已。

1、两个函数


// 分页显示记录
// $item 栏目
// $offset 从哪个记录开始显示
// $number 要显示的记录个数

function view_page($item,$offset,$number){
$dire="page/";
$hd=opendir($dire);
while($fl=readdir($hd)) {
if($fl=="." or $fl=="..") continue;

if(strpos($fl,".info")){ //只找info文件
$fc=file($dire.$fl);
if(chop($fc[3])==$item){ //是不是所要的那个专栏的文章
$tmp=explode(".",$fl);
$ft=$tmp[0];
$list[$ft]=filemtime($dire.$fl); //按时间来排序
}
}
}

if(count($list)==0) return $list;
arsort($list);

for($i=0;$i<$offset;$i++) { //移指针到要显示的第一个记录上!!!
next($list);
}
for($i=0;$i<$number;$i++){ //开始读number个记录到数组中
$k=key($list);
if($k=="")break;
$v=file($dire.$k.".info");
$re_var[$k]=$v;

next($list);
}

return $re_var;

}


//计算某个栏目所发表文章篇数
//这比上一个函数简单多了,只是做个统计罢了

function count_page($item){
$dire="page/";
$hd=opendir($dire);
$re_var=0;

while($fl=readdir($hd)) {
if($fl=="." or $fl=="..") continue;
if(strpos($fl,".info")){
$fc=file($dire.$fl);
if($fc[3]!=$item)continue;
else $re_var++;
}
}

return $re_var;
}

?>

好了,这两个函数介绍完了,如何用呢?

就以“感悟生活”的页面文件life.php3为例吧。

本文件可以从外部调用,不用参数,显示就从第一条记录开始。

如果是翻页,则发生了自身的调用,那可接受参数$nr和$offset,
分别表示本栏目总文章篇数以及要从第几篇文章开始显示,回忆一下上节我介绍的那两个分页显示函数,再往下看吧。


先把这两个函数包含进来吧。

include("phtml/viewpage.php3");

//用$nr来贮存本栏目的记录数,就是有多少篇文章
//如果在参数中没有传递,则调用函数count_page()给个初始值。

if(empty($nr)){
$nr =count_page(2);
}
if( empty($offset) ) $offset=0;
//如果没有传递,给个初始值0表示从头开始显示

?>


我是用表格来显示每篇文章的标题、作者、时间、阅、评。
具体显示代码如下:




//就是这句了!! 2表示第二个栏目,从$offset开始每页显示12条记录!!
$tmp=view_page(2,$offset,12);

//先判断一下是不是有值返回,下面的代码不用解释了吧。
if(is_array($tmp)){
for($j=0;$j $i=key($tmp);
echo "
";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
next($tmp);
}
}
?>
"."".$tmp[$i][0]."".$tmp[$i][1]."".date("Y-m-j",filemtime("page/".$i.".info"))."".$tmp[$i][4]."".$tmp[$i][5]."



以下语句用来显示翻页的一些按钮:

$pages=ceil($nr/12); //页数
$cpage=$offset/12+1; //当前页
echo "
第".$cpage."页/共".$pages."页 ";

//第2页以后,允许直接翻到首页
if($cpage>=2) {
echo " 首页 "; }

//除了第1页以外,都允许往前翻一页
if($offset) {
$preoffset=$offset-12; //记录往前移12条
echo " 前一页 ";
}

//除了最后一页,都可以往后翻一页
if($pages!=0 and $cpage!=$pages){
$newoffset=$cpage*12; //记录后移12!!注意$offset=0时,$cpage=1
echo " 下一页 ";
}

//可以往后翻,当然也可以直接翻到未页了
if($pages!=0 and $cpage<$pages){
$newoffset = ($pages-1)*12;
echo " 未页 "; }

?>

在上面这些条件句中,调用自身时都给出了参数$nr and $offset。

这样就在文本论坛中,实现了翻页显示记录的功能

好了,快写完了,最后一节了。
把一些小功能也做个介绍吧。大家如果想下课了的,可以先走了。

1、搜索功能
我们只打开info文件,所以只能在标题中搜索关键字了。代码如下:


function search_key($key) {
$dire="http://www.zhujiangroad.com/page/";
$hd=opendir($dire);
while($fl=readdir($hd)) {
if($fl=="." or $fl=="..") continue;
if(strpos($fl,".info")){
$fc=file($dire.$fl);
if(strstr($fc[0],$key)==FALSE)continue;
$tmp=explode(".",$fl);
$ft=$tmp[0];
$re_var[$ft]=$fc;
}
}
return $re_var;
}

$r1=search_key($key);

?>

2、发信给我
其实就是从表单中接收一些参数,然后调用了mail()函数而已。


require("err.php3"); //还记得这两个文件吧。
require("isemail.php3");

if($name =="" or $emailadd =="" or $title ==""){
show_err("朋友,有什么不可以说的呢?请填写完整吧。");
exit;
}
else {
if(!is_valid_email_addr($emailadd)) {
show_err("别玩我了,朋友!给个真的email吧。");
exit;
}

$subject = $name."从自由岛给你发来留言";
$message = $name."提出建议=> ".$title."n 联系信箱".$emailadd."n具体内容:n ".$content;
$endmail = "From: sharetop nReply-To: ".$emailadd."nX-Mailer: PHP/".phpversion();
$r=mail("ycshowtop@263.net",$subject,$message,$endmail);
if(!$r){
show_err("不能发送邮件!");
exit;
}

}

?>

3、岛主管理
对一些不太雅观的文章,我可不想每次都用FTP连上去删除,所以也写了一个函数来在线删除文件。


if($password!="123456789"){ //就我一个人,密码干脆放在程序中了。
echo "对不起,你不是老土人,不给你这个权利。";
exit;
}

//以下找出所有info文件,读出标题
$dire="http://www.zhujiangroad.com/page/";
$hd=opendir($dire);
while($fl=readdir($hd)) {
if($fl=="." or $fl=="..") continue;
if(strpos($fl,".info")){
$tmp=explode(".",$fl);
$ft=$tmp[0];
$fc=file($dire.$fl);
$res[$ft]=$fc[0];
}
}
if(count($res)==0) {echo "现在还没有帖子,无须管理。";exit;}

?>

然后把读出的标题放入一个列表框中,值 。

while( list($key,$var)=each($res) ) {
echo "";
}
?>

对于选择的文件,删除它。


if($pw!="9111019"){echo "你无权访问本页!";exit;}

for($i=0;$iselect);$i++){
unlink("http://www.zhujiangroad.com/page/".$select[$i].".info");
unlink("http://www.zhujiangroad.com/page/".$select[$i].".body");
}

echo "已完成删除操作!";

?>

到此结束。

总算把这个论坛的源码一点点地招供出来。只是想与大家交流一下编程经验,我学PHP时间也不长,所以有什么不妥的地方(我想肯定有很多地方是可以优化的),请务必要告诉我!!!!

我的联系地址是:ycshowtop@21cn.com
OICQ = 11783627

个人主页:

http://www.sbiotech.onchina.net
生物技术快报(用PHP+文本实现动态新闻更新)

http://www.hnnubbs.onchina.net
湖南师大校友空间(用php+mysql实现的虚拟社区)

http://www.sharetop.onchina.net
自由岛(用PHP+Mysql做的)

http://sharetop.e-chome.net
自由岛II(用PHP+文本做的)

百度中 用PHP实现一个文本型小论坛的源码(二) 相关内容
Google搜索中 用PHP实现一个文本型小论坛的源码(二) 相关内容
技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·DIV+CSS
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
网络技术
·路由器 ·交换机 ·服务器
·运维管理 ·无线网络 ·布线技术
·网络安全    

相关软件 相关文章
关于使用文本域(TextArea)的一个问题
Windows 下 PHP 的安装变得容易了
用PHP实现一个文本型小论坛的源码(一)
ASP vs PHP on IIS
如何使用PHP中的日期和时间函数
Phorum 安装指南
Windows 2000下安装PHP4及MySQL
仅用PHP4 Session实现的迷你购物篮(二)

相关软件 产品库推荐
·笔记本 ·平板电脑 ·上网本
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU/硬盘/内存 ·音箱 ·主板
·键鼠套装 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

Copyright 2011 www.zhujiangroad.com All Rights Reserved.
珠江路在线版权所有 苏ICP备05016148号
 
关于我们 |  广告服务 |  付款方式 |  南京地图 | 南京公交查询 | 南京火车时刻表 | 站长工具