登录模块加载中...
会员投稿 投稿指南 今天是:
打印本页 | 关闭窗口 | 双击滚屏 您的位置首页>>网页制作学习园地>>CGI教程>>CGI脚本编码>>选票程序
选票程序
来源:网页制作学习园地 ‖ 作者:网页制作学习园地 ‖ 点击: ‖ 时间:07-12-19 14:55:06 ‖ 【 】‖ 我要投稿

    对于本周的程序----选票程序,我不想多说什么。我只是想在本程序内教给大家如何使用perl语言或C语言如何处理字符串的实例。让我们先看看代码:
页面文件--pote.html

投票程序

投票程序



一.你喜欢谁?

张德陪

阿加西

桑普拉斯

贝克

顾懿




查询选举投票结果

CGI程序:--vote.pl
#!perl
print"Content-type:text/html\n\n";
print"投票系统";


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/html\n\n";
print"投票系统";
print"

投票系统的例子

";
open(FILE,"<$filename")||die"不能打开文件,请和管理员联系\n";


for($i=0;$i<2;$i++){
$file[$i]=;
$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 "$item\n";
print FILE "$vote\n";


close (FILE);


print"

您是投票给$NAME{$FORM{'idol'}},谢谢您的选票!

";
print"查询投票结果系统";


}


if($FORM{'command'}eq"view"){
print "HTTP/1.0 200\n";
print "Content-type:text/html\n\n";
print"投票结果";
print"

投票结果

";
open (FILE,"$filename")||die"文件打开错误";


for($i=0;$i<2;$i++){
$file[$i]=;
$file[$i]=~s/\n$//;
}
close(FILE);


@item=split(/:/,$file[0]);
@vote=split(/:/,$file[1]);


print"

";


for($i=0;$i<@item;$i++){
print"

,td>$vote[$i]";


}
print "

姓名$NAME{$item[$i]}票数
";
}


这个程序是要各位学习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做到这一点,这是一个关联数组。具体其中的语法,请各位自行查书。接下来的就是文件的操作,但那已经不是本课的重点。所以就不多说了。

加入收藏:  加入收藏夹  | 发送给好友:  发送给好友
责任编辑:0
  • 上一篇:无
  • 下一篇:CGI留言薄
  • 请文明参与讨论,禁止漫骂攻击。  
    网友评论