分享
 
 
 

CGI做的一个投票程序的例子

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

使用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/html\n\n";

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/html\n\n";

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 "$item\n";

print FILE "$vote\n";

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 200\n";

print "Content-type:text/html\n\n";

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有