PHP新手上路(六)


Posted in PHP onOctober 09, 2006

建设一个简单交互的网站(二)

5.5 计数器

让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码:

<?
/*
|| 一个简单的计数器
*/
function get_hitcount($counter_file)
{
/* 将计数器归零
这样如果计数器还未被使用,初始值将是1
你当然也可以把初始值设成20000来骗人咯
*/
$count=0;
// 如果存放计数器文件已经存在,读取其中的内容
if ( file_exists($counter_file) )  
{
$fp=fopen($counter_file,"r");
// 我们只取了前20位,希望你的站点不要太受欢迎啊
$count=0+fgets($fp,20);
// 由于函数fgets()返回字符串,我们可以通过加0的方法将其自动转换为整数
fclose($fp);
// 对文件操作完毕
}
// 增加一次计数值
$count++;
// 将新的计数值写入文件
$fp=fopen($counter_file,"w");
fputs($fp,$count);
fclose($fp);
# 返回计数值
return ($count);
}
?>

然后我们更改front.php3文件以显示这个计数器:
<?
include("include/counter.inc");
// 我把计数值放在文件counter.txt中,读出并输出
printf ("<CENTER><B>%06d</B></CENTER> <BR> n",
get_hitcount("counter.txt"));
include("include/footer.inc");
?>
看看我们的新front.php3

5.6 反馈表单

让我们再添加一个反馈表单以便你的浏览者填写并e-mail给你。举例来说我们用一种很简单的方法实现它,我们只需要两个页面:一个为浏览者提供输入表单;一个获得表单数据并处理、mail给你。

PHP中获取表单数据是很简单的。当一个表单被发送后,表单中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。
<FORM name="myform" ACTION="process_form.php3" METHOD="POST">
<INPUT TYPE="TEXT" NAME="mytext" VALUE="Some Value">
</FORM>

在process_form.php3中,变量$mytext就被赋予了输入的值--非常简单!同样的,你可以从列表框、多选框、单选框、按钮等表单元素中取得变量值。你唯一要做的就是为表单中的每一个元素取名以便将来可以引用。

根据这个方法,我们可以生成一个简单的包含三个元素的表单:姓名、e-mail地址和留言。当浏览者发送表单后,处理该表单的PHP页面(sendfdbk.php3)读取数据,检查姓名是否为空,最后将数据mail给你。

表单:form.php3
<?
include("include/common.inc");
$title = "Feedback";
include("include/header.inc");
?>
<P>
<FORM ACTION="sendfdbk.php3" METHOD="POST">
<INPUT TYPE="text" NAME="name" value="Your name" SIZE="20" MAXLENGTH="30">
<INPUT TYPE="text" MAXLENGTH="40" WIDTH="20" value="Your Email" NAME="email">
<BR>
<TEXTAREA ROWS="7" COLS="40" NAME="comment">
Your feedback on my home page.
</TEXTAREA>
<BR>
<INPUT TYPE="submit" VALUE="Send Feedback!">
</FORM>
</P>
<?
include("include/footer.inc");
?>

处理表单:sendfdbk.php3
<?
include("include/common.inc");
$title = "Feedback";
include("include/header.inc");
if ( $name == "" )  
{
// 现在我很讨厌匿名的留言!
echo "Duh ? How come you are anonymous?";
}  
elseif ($name == "Your name")  
{
// 这个浏览者真是不想透露姓名啊!
echo "Hello ? <B>Your name</B> is supposed to be replaced with
your actual name!</B>";
}  
else  
{
// 输出一段礼貌的感谢语
echo "
Hello, $name.
<BR>
Thank you for your feedback. It is greatly appreciated.
<BR>
Thanking you
<BR>
$MyName <BR>
$MyEmailLink
";
// 最后mail出去
mail($MyEmail, "Feedback.","
Name : $name
E-mail : $email
Comment : $comment  
");
}
include("include/footer.inc");
?>

注意:如果在你的测试过程中,该程序末能正常工作,请查看你的PHP配置文件(PHP3为php3.ini,PHP4为php.in)有没有设置好。因为本程序需要您的PHP配置文件作如下的设置:

首先,用NotePad打开你的php3.ini或是php.ini文件,查看一下[mail function]有没有设置好,默认的情况如下所示:
SMTP = localhost  
sendmail_from = me@localhost.com
给SMTP设置SMTP服务器,最好是你当地的SMTP服务器,我这里以21cn的SMTP服务器作为例子,然后,在sendmail_from处填上你的E-MAIL地址,例如可以改成这样:
SMTP = smtp.21cn.com
sendmail_from = pert@21cn.com  
修改后不要忘了重启Apache,IIS或PWS服务哦.  

5.7 简单的站内搜索引擎

PHP可以调用外部程序。在Unix环境下我们可以利用程序grep实现一个简单的搜索引擎。我们可以做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。

<?
include("include/common.inc");
$title = "Search";
include("include/header.inc");
?>
<P>
<FORM ACTION="<? echo "$PHP_SELF"; ?>" METHOD="POST">
<INPUT TYPE="text" NAME="searchstr" value="<? echo "$searchstr"; ?>"
SIZE="20" MAXLENGTH="30">
<INPUT TYPE="submit" VALUE="Search!">
</FORM>
</P>
<?
if ( ! empty($searchstr) )  
{
// empty()用来检查查询字串是否为空
// 如果不为空,调用grep查询
echo "<HR>n";
// 调用grep对所有文件进行大小写非敏感模式的查询
$cmdstr = "grep -i $searchstr *";
$fp = popen( $cmdstr, "r" ); // 执行命令并输出管道
$myresult = array(); // 存储查询结果
while( $buffer = fgetss ($fp, 4096))  
{
// grep返回这样格式: 文件名:匹配字串出现行数
// 因此我们利用函数split()分离处理数据
list($fname, $fline) = split(":",$buffer, 2);
// 我们只输出第一次匹配的结果
if ( !defined($myresult[$fname]))
$myresult[$fname] = $fline;
}
// 现在我们将结果存储在数组中,下面就可以处理并输出了
if ( count($myresult) )
{
echo "<OL>n";
while(list($fname,$fline) = each($myresult))
echo "<LI>
<A HREF="$fname">$fname</A> : $fline </LI>n";
echo "</OL>n";
}  
else  
{
// 如果没有查询结果
echo "Sorry. Search on <B>$searchstr</B>
returned no results.<BR>n";
}
pclose($fp);
}
?>
<?
include("include/footer.inc");
?>

注释:

PHP_SELF是PHP内建的变量。包含当前文件名。  
fgets()按行读取文件,最多4096(指定)字符长度。  
fgetss()与fgets()相似,只是解析输出的HTML标记。  
split()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略":"。  
each()是一个数组操作函数,用来更方便的遍历整个数组。  
popen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。  
请注意以上的代码并不是实现一个搜索引擎的好办法。这只是有助于我们更好学习PHP而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索。   

PHP 相关文章推荐
中篇:安装及配置PHP
Dec 13 PHP
Phpbean路由转发的php代码
Jan 10 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
php 不同编码下的字符串长度区分
Sep 26 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
php通过array_merge()函数合并两个数组的方法
Mar 18 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
Mar 18 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
Mar 15 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
PHP应用跨时区功能的实现方法
Mar 21 PHP
PHP新手上路(七)
Oct 09 #PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
Oct 09 #PHP
简单的页面缓冲技术
Oct 09 #PHP
php 之 没有mysql支持时的替代方案
Oct 09 #PHP
在PWS上安装PHP4.0正式版
Oct 09 #PHP
在IIS上安装PHP4.0正式版
Oct 09 #PHP
html中select语句读取mysql表中内容
Oct 09 #PHP
You might like
php设计模式 State (状态模式)
2011/06/26 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
详解python tkinter教程-事件绑定
2019/03/28 Python
python实现车牌识别的示例代码
2019/08/05 Python
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
传播学毕业生求职信
2013/10/11 职场文书
初中三年学生的学习自我评价
2013/11/13 职场文书
大二学生学习个人自我评价
2014/01/19 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
法制宣传标语集锦
2014/06/25 职场文书
装修施工安全责任书
2014/07/24 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
财务总监岗位职责
2015/02/03 职场文书
婚宴来宾致辞
2015/07/28 职场文书
感谢信
2019/04/11 职场文书
python可视化之颜色映射详解
2021/09/15 Python