通行证:用户名 密码 首页 - 新闻 - 免费邮箱 - 短信 - POPO - 相册 - 搜索 - 交友 - 拍卖
NetEase
新闻 | 体育 | 财经 | 娱乐 | 商业 | 科技 | 汽车 | 数码 | 女人 | 旅游 | 教育 | 文化 | 广州 | 军事 | 部落
评论 | NBA | 明星 | 证券 | 基金 | 探索 | 房产 | 手机 | 两性 | 健康 | 培训 | 电影 | 游戏 | 拍卖 | 论坛
你现在的位置是: 网易 > 网易科技 > 网易学院·教程 > 编程开发

CGI简明教程第六章

http://tech.163.com/school · 2004-11-28 17:28:33 · 来源: 网易学院

    对于本章的程序——选票程序,我不想多说什么。我只是想在本程序内教给大家如何

    使用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做到这一点,这是一个关联数组。具体其中的语法,请各位自行查书。接

    下来的就是文件的操作,但那已经不是本课的重点。所以就不多说了。

·本文关键字: CGI / 教程">教程 / 程序

网易郑兰 [返回首页]

相关文章:

推荐文章:

·赢在2007赛迪网年度企业人物榜单揭晓 ·你最需要哪种类型的视频教程 ·不用网银也网上购物 三步自助开通 ·2007年UPA用户体验大会成功闭幕 ·2007中国青年设计节暨用户体验年会在京开幕 ·User Friendly 2007现场图片 ·手机畅游互联网 空中Opera 2.0实测 ·动易软件即将全面开源和免费 ·搜图有“道” 图片达人的搜索秘籍 ·数字水墙 08年世博会亮相 ·RabbitAir MinusA2空气净化器设计 ·Oscar Bjarnason 平面设计 ·国产杀毒软件半个月内勇夺两项国际权威认证 ·美化你的博客-推荐多个博客图标下载网站 ·微软回应Vista用户遇到的网络问题“设计如此” ·eBay改进用户体验 借鉴亚马逊页面设计搜索功能 ·极点五笔6.0正式版发布 ·WPS Office 2007抢先试用 ·报告称Google Apps功能远不及微软Office ·什么是SOCK5代理,什么是HTTP代理

最新评论
  更多评论 0 条评论
网易通行证:   密码:    
参与评论
  您的发表的评论将在5分钟内被审核,请耐心等待

网易学院联系电话:020-61210163-560 合作/投稿邮箱:NeteaseSchool(at)126.com