📄 cgiclass6.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>CGI简明教程六 </title>
</head>
<p align="center"><strong>CGI简明教程第六章
<table border="0" width="100%">
<tr>
<td width="86%"><font face="宋体"><small>对于本周的程序----选票程序,我不想多说什么。我只是想在本程序内教给大家如何使用perl语言或C语言如何处理字符串的实例。让我们先看看代码:<br>
</small></font>页面文件--pote.html<br>
<font face="8514fix"><small><HTML><br>
<TITLE>投票程序</TITLE><br>
<h1>投票程序</h1><br>
<FORM METHOD="post" ACTION="/cgi-bin/vote.pl"><br>
一.你喜欢谁?<br><br>
<input type="radio" name="idol" value="A" checked>张德陪<br><br>
<input type="radio" name="idol" value="B">阿加西<br><br>
<input type="radio" name="idol" value="C">桑普拉斯<br><br>
<input type="radio" name="idol" value="D">贝克<br><br>
<input type="radio" name="idol" value="D">顾懿<br><br>
<input type="submit" value="执行"><br>
<input type="reset" value="取消"><br>
</form><br>
查询<a href="/cgi-bin/vote.pl?command=view">选举投票结果</a><br>
</html></small></font><br>
CGI程序:--vote.pl<br>
<strong>#!perl<br>
print"Content-type:text/html\n\n";<br>
print"<titel>投票系统</title>";<br>
<br>
if($ENV{'REQUEST_METHOD'}eq"POST"){<br>
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});<br>
}elsif($ENV{'REQUEST_METHOD'}eq"GET"){<br>
$buffer=$ENV{'QUERY_STIRNG'}; <br>
}<br>
<br>
@pairs=split(/&/,$buffer);<br>
foreach $pair(@pairs){<br>
($name,$value)=split(/=/,$pair);<br>
$value=~tr/+//;<br>
$value=~s/%([a-f A-F 0-9][a-f A-f 0-9])/pack("C",hex($1))/eg;<br>
$FORM{$name}=$value;}<br>
<br>
$filename="/vote.dat";<br>
%NAME=("A","张德陪","B","阿加西","C","桑普拉斯","D","贝克","E","顾懿");<br>
<br>
if($ENV{'REQUEST_METHOD'}eq"POST"){<br>
print"Content-type:text/html\n\n";<br>
print"<titel>投票系统</title>";<br>
print"<h1>投票系统的例子</h1>";<br>
open(FILE,"<$filename")||die"不能打开文件,请和管理员联系\n";<br>
<br>
for($i=0;$i<2;$i++){<br>
$file[$i]=<FILE>;<br>
$file[$i]=~s/\n$//;<br>
}<br>
close(FILE);<br>
<br>
@item=split(/:/,$file[0]);<br>
@vote=split(/:/,$file[1]);<br>
<br>
for($i=0;$i<@item;$i++){<br>
if($FORM{'idol'}eq$item[$i]){<br>
$vote[$i]++;<br>
last;<br>
}<br>
}<br>
open(FILE,">filename")||die"Can't Open the file";<br>
$item=join(":",@item);<br>
$vote=join(":",@vote);<br>
pirnt FILE "$item\n";<br>
print FILE "$vote\n";<br>
<br>
close (FILE);<br>
<br>
print"<h2>您是投票给$NAME{$FORM{'idol'}},谢谢您的选票!<h2>";<br>
print"查询<a href=\"/cgi-bin/vote.pl?command=viem\">投票结果系统</a>";<br>
<br>
}<br>
<br>
if($FORM{'command'}eq"view"){<br>
print "HTTP/1.0 200\n";<br>
print "Content-type:text/html\n\n";<br>
print"<title>投票结果</title>";<br>
print"<h1>投票结果</h1>";<br>
open (FILE,"$filename")||die"文件打开错误";<br>
<br>
for($i=0;$i<2;$i++){<br>
$file[$i]=<FILE>;<br>
$file[$i]=~s/\n$//;<br>
}<br>
close(FILE);<br>
<br>
@item=split(/:/,$file[0]);<br>
@vote=split(/:/,$file[1]);<br>
<br>
print"<table border=1>";<br>
<br>
for($i=0;$i<@item;$i++){<br>
print"<tr><td>姓名</td><td>$NAME{$item[$i]}</td><td>票数</td>,td>$vote[$i]</td><tr>";<br>
<br>
}<br>
print "</table>";<br>
}<br>
</strong><br>
这个程序是要各位学习Perl的分解字符串的功能。在Perl中,字符串操作是非常简单的。<br>
我对几句重要语句做一个分析:<br>
if($ENV{'REQUEST_METHOD'}eq"POST"){<br>
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});<br>
}elsif($ENV{'REQUEST_METHOD'}eq"GET"){<br>
$buffer=$ENV{'QUERY_STIRNG'}; <br>
}<br>
这是一个非常常见的功能块,几乎所有的CGI程序都会用到它。它判断页面使用何种方式提交变量。如果是post,就从STDIN里把变量读出,存到变量buffer里。注意在perl里,变量是用$开头的。而$ENV{'CONTENT_LENGTH'}则是读出该变量的长度,请注意CONTENT_LENGTH<br>
是一个环境变量。第二个if则处理get情况,在get情况下,页面提交的信息是存放在环境变量QUERY_STIRNG中的。所以$buffer也就是页面提交的信息。环境变量REQUEST_METHOD表示方式,它的值是一个字符串,前面加上$ENV则表示读出该变量的值。<br>
<br>
@pairs=split(/&/,$buffer);<br>
foreach $pair(@pairs){<br>
($name,$value)=split(/=/,$pair);<br>
$value=~tr/+//;<br>
$value=~s/%([a-f A-F 0-9][a-f A-f 0-9])/pack("C",hex($1))/eg;<br>
$FORM{$name}=$value;}<br>
以上功能块是一个分解过程。页面信息的提交往往是以“名称=值”的形式,比如本例子中就是以“idol=顾懿”这样的形式提交的,所以我们要去掉字符串中的"="等等信息,但同时要保留“idol”和"顾懿"之间的对应关系。$FORM{$name}=$value做到这一点,这是一个关联数组。具体其中的语法,请各位自行查书。接下来的就是文件的操作,但那已经不是本课的重点。所以就不多说了。
<br>
</td>
</tr>
</table>
回<a href="default.html" tppabs="http://202.96.217.5/~xiaoyi/default.html">CGI教程目录</a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -