Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316177
  • 博文数量: 101
  • 博客积分: 2428
  • 博客等级: 大尉
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-24 13:16
文章分类

全部博文(101)

文章存档

2012年(3)

2011年(90)

2010年(8)

分类: Delphi

2011-05-21 14:48:56

对于CGI来说,处理表单是它的重头戏,今天我们来看看CGI如何处理HTML的表单。

处理表单(GET

现在大多数的CGI脚本用来处理表单输入,处理表单的过程和上面直接在URL中调用CGI脚本的情况有些不同。一个表单通常分为两个部分:HTML表单格式和处理数据的脚本,处理程序由

标签的ACTION属性指定,每个输入区都有一个NAME属性用来称呼表单元素,当表单数据被递交给ACTION中定义的处理程序时,NAME和其输入内容被以数字或字符的形式保存在环境变量中,脚本程序再通过读取环境变量的方式获得用户输入,根据编程语言的不同获取环境变量的方式也不同,C语言中可以通过stdlib库函数getenv来获得环境变量。

表单从浏览器发给服务器有两种方法(METHOD属性):GETPOSTGET方法将数据打包放在环境变量QUERY_STRING中作为URL整体的一部分传递给服务器。POST做很多类型GET的事情,但是它分离地传递数据给脚本的,程序要通过标准输入或得数据,POST方式不会改变数据,也就是说同样的数据可以多次提交而不必重新输入。当数据量超过1024时只能使用POST来传递,由于GET将数据直接放到URL中,数据的传输也就变得很不安全了。

表单输入的数据通过URL编码后传输到服务器端,我们有必要了解一下URL的编码规则:

1、  每个name/valuename=valu的形式配对出现,每对name/valu之间用&分隔

2、  若用户没有对某个name赋值,则以“name=”的形式出现

3、  任何特殊字符以百分号%用十六进制编码。

4、  输入区的空格将以“ ”显示

要想得到用户输入的数据就必须对传递进来的URL编码进行解码,解码有很多工具可用,比如CGIC库中就已经对解码进行了包装,常用的工具还有uncgi

我们以简单的乘法为例说明表单的提交

         先建立一个乘法表单,有两个输入区,分别是乘数和被乘数,一个提交按钮,当点击提交按钮时,显示结果

         multiple.html

然后在/var/www/cgi-bin目录下建立mult.c文件并编译成mult.cgi

mult.c

#include

#include

int main(){

 char *data;

 long m,n;

 printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10);

//打印HTML

 printf("Multiplication results\n");

 printf("

Multiplication results

\n");

 data=getenv("QUERY_STRING");

//取得环境变量

 if(data==NULL)

   printf("

Error!Error in passing data to script

");

 else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2)

   printf("

Error! Invalid data. Data must be numeric.");

 else

   printf("

The product of %ld and %ld is %ld.",m,n,m*n);

 return 0;

}

可见CGI反馈给用户的信息要显示出来是一行一行的将HTML的代码打印出来的!天啦这样的话如果返回页面一复杂那还得了啊?而且想返回一个漂亮的界面都几乎是不可能的呢!应该有解决办法的!慢慢深入!
阅读(1240) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~