第六章: 调查表CGI/PERL学习 数据挖掘研究院
对于本章的程序——选票程序,我不想多说什么。我只是想在本程序内教给大家如何 数据挖掘实验室
使用perl语言或C语言如何处理字符串的实例。让我们先看看代码:
数据挖掘实验室
页面文件——pote.html 数据挖掘研究院
<HTML>
<TITLE>投票程序</TITLE>
数据挖掘实验室
<h1>投票程序</h1>
<FORM METHOD="post" ACTION="/cgi-bin/vote.pl"> 数据挖掘工具
一。你喜欢谁?<br>
<input type="radio" name="idol" value="A" checked>张德陪<br>
数据挖掘研究院
<input type="radio" name="idol" value="B">阿加西<br>
数据挖掘研究院
<input type="radio" name="idol" value="C">桑普拉斯<br>
数据挖掘工具
<input type="radio" name="idol" value="D">贝克<br> 数据挖掘交友
<input type="radio" name="idol" value="D">顾懿<br> 数据挖掘交友
<input type="submit" value="执行"> 数据挖掘论坛
<input type="reset" value="取消"> 数据挖掘论坛
</form> 数据挖掘研究院
查询<a href="/cgi-bin/vote.pl?command=view">选举投票结果</a>
</html> 数据挖掘论坛
CGI程序:——vote.pl 数据挖掘实验室
#!perl 数据挖掘实验室
print"Content-type:text/htmlnn"; 数据挖掘实验室
print"<titel>投票系统</title>"; 数据挖掘实验室
if($ENV{"REQUEST_METHOD"}eq"POST"){ 数据挖掘论坛
read(STDIN,$buffer,$ENV{"CONTENT_LENGTH"}); 数据挖掘交友
}elsif($ENV{"REQUEST_METHOD"}eq"GET"){
数据挖掘实验室
$buffer=$ENV{"QUERY_STIRNG"};
} 数据挖掘研究院
@pairs=split(/&/,$buffer); 数据挖掘实验室
foreach $pair(@pairs){
数据挖掘实验室
($name,$value)=split(/=/,$pair);
$value=~tr/+//;
$value=~s/%([a-f A-F 0-9][a-f A-f 0-9])/pack("C",hex($1))/eg;
数据挖掘研究院
$FORM{$name}=$value;}
数据挖掘实验室
$filename="/vote.dat"; 数据挖掘研究院
%NAME=("A","张德陪","B","阿加西","C","桑普拉斯","D","贝克","E","顾懿");
if($ENV{"REQUEST_METHOD"}eq"POST"){
print"Content-type:text/htmlnn"; 数据挖掘研究院
print"<titel>投票系统</title>"; 数据挖掘研究院
print"<h1>投票系统的例子</h1>";
open(FILE,"<$filename")||die"不能打开文件,请和管理员联系n"; 数据挖掘交友
for($i=0;$i<2;$i++){
数据挖掘交友
$file[$i]=<FILE>;
数据挖掘交友
$file[$i]=~s/n$//;
数据挖掘论坛
}
close(FILE); 数据挖掘论坛
@item=split(/:/,$file[0]);
数据挖掘工具
@vote=split(/:/,$file[1]);
数据挖掘工具
for($i=0;$i<@item;$i++){ 数据挖掘交友
if($FORM{"idol"}eq$item[$i]){
$vote[$i]++; 数据挖掘论坛
last; 数据挖掘实验室
} 数据挖掘研究院
} 数据挖掘工具
open(FILE,">filename")||die"Can"t Open the file";
数据挖掘论坛
$item=join(":",@item); 数据挖掘研究院
$vote=join(":",@vote); 数据挖掘研究院
pirnt FILE "$itemn";
数据挖掘论坛
print FILE "$voten";
数据挖掘研究院
close (FILE);
数据挖掘工具
print"<h2>您是投票给$NAME{$FORM{"idol"}},谢谢您的选票!<h2>"; 数据挖掘交友
print"查询<a href="/cgi-bin/vote.pl?command=viem">投票结果系统</a>"; 数据挖掘交友
} 数据挖掘实验室
if($FORM{"command"}eq"view"){
print "HTTP/1.0 200n"; 数据挖掘论坛
print "Content-type:text/htmlnn"; 数据挖掘论坛
print"<title>投票结果</title>"; 数据挖掘研究院
print"<h1>投票结果</h1>"; 数据挖掘论坛
open (FILE,"$filename")||die"文件打开错误";
数据挖掘交友
for($i=0;$i<2;$i++){
$file[$i]=<FILE>;
$file[$i]=~s/n$//; 数据挖掘论坛
}
数据挖掘研究院
close(FILE); 数据挖掘工具
@item=split(/:/,$file[0]);
数据挖掘研究院
@vote=split(/:/,$file[1]); 数据挖掘交友
print"<table border=1>"; 数据挖掘交友
for($i=0;$i<@item;$i++){ 数据挖掘实验室
print"<tr><td>姓名</td><td>$NAME{$item[$i]}</td><td>票数</td>,td>$vote[$i] 数据挖掘研究院
</td><tr>"; 数据挖掘研究院
} 数据挖掘研究院
print "</table>";
数据挖掘研究院
}
数据挖掘论坛
这个程序是要各位学习Perl的分解字符串的功能。在Perl中,字符串操作
是非常简单的。 数据挖掘论坛
我对几句重要语句做一个分析:
if($ENV{"REQUEST_METHOD"}eq"POST"){ 数据挖掘工具
read(STDIN,$buffer,$ENV{"CONTENT_LENGTH"}); 数据挖掘论坛
}elsif($ENV{"REQUEST_METHOD"}eq"GET"){ 数据挖掘交友
$buffer=$ENV{"QUERY_STIRNG"}; 数据挖掘交友
} 数据挖掘交友
这是一个非常常见的功能块,几乎所有的CGI程序都会用到它。它判断 数据挖掘论坛
页面使用何种方式提交变量。如果是post,就从STDIN里把变量读出,存到
数据挖掘实验室
变量buffer里。注意在perl里,变量是用$开头的。而$ENV{"CONTENT_LENGTH"}
数据挖掘实验室
则是读出该变量的长度,请注意CONTENT_LENGTH是一个环境变量。第二个if则
数据挖掘实验室
处理get情况,在get情况下,页面提交的信息是存放在环境变量QUERY_STIRNG中
的。所以$buffer也就是页面提交的信息。环境变量REQUEST_METHOD表示方式,
它的值是一个字符串,前面加上$ENV则表示读出该变量的值。 数据挖掘论坛
@pairs=split(/&/,$buffer); 数据挖掘工具
foreach $pair(@pairs){
($name,$value)=split(/=/,$pair);
数据挖掘交友
$value=~tr/+//; 数据挖掘研究院
$value=~s/%([a-f A-F 0-9][a-f A-f 0-9])/pack("C",hex($1))/eg;
$FORM{$name}=$value;}
数据挖掘工具
以上功能块是一个分解过程。页面信息的提交往往是以“名称=值”的形式, 数据挖掘交友
比如本例子中就是以“idol=顾懿”这样的形式提交的,所以我们要去掉字符串中
数据挖掘论坛
的"="等等信息,但同时要保留“idol”和"顾懿"之间的对应关系。$FORM{$name}
数据挖掘交友
=$value做到这一点,这是一个关联数组。具体其中的语法,请各位自行查书。接 数据挖掘交友
下来的就是文件的操作,但那已经不是本课的重点。所以就不多说了。 数据挖掘交友