说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

建设一个简单交互的网站(二) -PHP初学入门教程6

HTML文档下载 WORD文档下载 PDF文档下载
介绍PHP实现计数器、表单、简单的站内搜索等功能。

 

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 withyour 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 : $nameE-mail : $emailComment : $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而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索。 

 

为何美国IaaS收购被引爆?基于IaaS的四个误解和四个猜想 Kinect SDK v1.7迎来重大更新 如何激励同事编写单元测试? 谷歌GCE vs. 亚马逊EC2:快源于谷歌本有的底蕴 不要责怪开源技术 它是无辜的 短命:微软将于2014年停止对WP8系统支持 Native和Web过时了,企业级移动开发流行用Hybrid App 与EverNote竞争?谷歌Google Keep浮出水面 又一次跨越:著名3D游戏引擎Unity版本更新 Feedly团队:自研后端平台或将开源 StackMob的诱惑:16小时,山寨一款移动App “云”筹帷幄 开发者必知的5大SaaS在线服务工具 超350个政府项目托管在GitHub 政府开源会成主流? Kinect for Windows SDK 1.7正式发布,支持3D建模 SafeNet与风河系统联手推出VxWorks嵌入式系统软件货币化方案 Windows Server 2012中的动态负载均衡 Google等互联网公司将成为创新中心? 在Hadoop的战争中 MapR获新一轮3000万美元融资 初创公司DNNresearch:谷歌科技帝国的新“基石” 创业了,我们该如何起名? 乐视网联手富士康推新盒子C1S “0+290元”新浪微博发售 吸引开发者:只要开发新应用 微软便奖100美元 PaintCode - 将矢量图转化为Objective-C代码的开发神器 苹果发布iOS 6.1.3 封杀evasi0n越狱所用漏洞 [API快讯] Google开放实时协作API 58同城开源轻量级Java Web框架 Argo 初创公司AppNeta:4轮融资,4780万美元 MongoDB释放2.4版本:692更新及8大得意之作 十年6亿美元!Amazon云计算喜获CIA大单! 国人当自强:HTML5+联盟首次筹备会成功举行 开源框架TAAE发布 快速打造iOS音频应用 interface中的uses语句和implemetation中的uses语句有何不同? XP个人单机服务器配置后访问需要帐号密码,怎么办 干得不开心,想转行,大家给点建议 如何实现“让用户自定义快捷键?” 怎么样把.aspx制作成安装的文件?? 我写了如下一个方法,但是用起来有问题,帮我看看!! 俺倒~~~~~~~~`怎么能上三星啊? 向高手求救:如何得到一张表的行数和列数!! 散分!代码解读! 使用sybase时的提示The query and the views in it exceed the limit of 16 tables. 有办法解决吗? 如何将数组的内容添加到一个文件的末尾 怎样才能打开一个489K的.DAT文件? 列表框(ClistCtrl)如何得到选中项的文本内容和选中项的索引值 为什么我登录到Oracle Management Server时老出错。(oracle 9i) 这样的sql语句怎么写呢?急啊!(还可以加分) pb中截取字符串的问题:急,在线等待 急,在VC++.Net中怎样将字符串System::String类型转换为LPSTR类型? 用PQ把NTFS转换成FAT32时,文件名全变名问号了,怎么办?!!!!!!!!!! 又是回车符的问题,急!!!!! 关于工具栏的问题 控件的DragMode为dmAutomatic,不能用鼠标点? 奇怪的电脑时钟 系统不支持本地交互式登陆 ListView的小问题 有责任感的中国人(水均益:我来谈京沪高速铁路 ),顶者有分!200分 如何给MDI窗口设置背景图? 如何使数据按我定义的顺序显示出来 请教,我有一个toolbar,上面有四个toolbutton,问题! 关于按钮的小问题 追加记录思路 TemplatePower控件谁用过,Delphi下做网页报告的,在Builder上装不上 如何在MIDP中保存小数? 关于窗口设计 有责任感的中国人(水均益:我来谈京沪高速铁路 ),顶者有分!200分! 这里没有人关心Yokun吗?还是大家都在闭门造车? XP服务器安装后访问需密码,,该如何设置? 关于dc,hdc,getdc和pchar()的问题 急~~~在线等 上传主页。错误:530 Login incorrect 数据库问题 上傳的問題,急! TemplatePower控件谁用过,Delphi下做网页报告的,在Builder上装不上 怎样在IE打开的时候用JS隐藏IE的工具条 偶MM明天过生日了,我该送点什么她呢? 在线求助ReportBulider这样的报表如何做? 注册控件的问题 框架网页之间如何传递参数 怎样用Java获取linux上的各分区磁盘剩余空间,回答者一率有分!!!! Toolbar控件的困惑。 大家说国外比较好的控件下载网站有哪些?象源码空间那样,有破解下载的那种啊 在线求助ReportBulider这样的报表如何做? 初步几何题下列说法正确的是(  )A平面和曲面相交不一定得曲线B两条线相交只能得一个交点C两个面相交只能得到一条交线 基本几何题目1.如图,∠AOB=90°,OM平分∠AOC,ON平分∠BOC,求∠MON的度数.2.如果1中,∠AOB=100°,其他条件不变,求∠MON的度数.3.若1中∠AOB=α,其他条件不变,求∠MON的度数.(上下三题有联系) 一道基础几何题SORRY...刚才有急事忘记把题发上来了...三角形ABC中,AB大于BC,哪种情况是不可能出现的AC大于ABAC等于AB角C小于角A角C等于角B我知道这道题可能根本不算几何...可能太简单了... "错错错知中改不错错错知算改不",写一句富有哲理的话 错错错知中改不 错错就知算改不 用这些字组成一句话错错错知中改不 错错就知算改不 用这些字组成一句富含哲理的话。 ∮(sinz dz)/z;|z|=1 求解复变积分 ∮(sinz dz)/z;|z|=1 如何训练自己的想象力! 葡萄糖酸钠有什么用处 怎样训练想象力?通过哪些具体的步骤可以丰富自己的想象力? 饱览的意思 一些初级几何题如图,E是平行四边形ABCD外一点,对角线AC与BD相交于点O,且OE垂直于BE,AE垂直于CE.求证:四边形ABCD是矩形. 新加坡房价调控缘何显成效中国周边外交换挡升级外国人如何申请中国绿卡伦敦金属交易所基本金属期货价格24日南宁官方回应“警察枪击抗拆村民” 称北京研究6家高尔夫球场退出水源区 名大妈跳广场舞扰民被泼粪 称嫌吵装隔音郑州多处城中村拆后复建缓慢 村民被迫落实大气防治行动计划 京津冀区域治霾揭秘张曙光“学术”路:读博士不愿写论监控全世界的美国政府公信力受质疑中国经济总体向好趋势不改 不需要出手对“壮汉行为”要鄙弃改善乡村环境 美化村容村貌30余名社会单位代表走进消防站我区首批自治区级生态乡镇建设小记农村养老实在“难死人”:有病没钱花 我区社会福利事业稳步发展春节防火曲古村堪比“桃花源”统一思想 切实认识重大意义多举措加强寺庙消防安全工作九死驯灵透视小村医仙孽尘缘史上最强气运系统绝世武魂我的未来女友超级透视娱乐贵公子最强高手在都市天眼神级仙医在都市台北动物园旅游黄金博物馆旅游西门红楼旅游大芬油画村旅游春秋阁旅游天长地久桥旅游溪头旅游台湾博物馆旅游中华黄河楼旅游东北虎林园旅游松花江索道旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘