嵌入式CGI开发之旅——3

对于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%cn","Content-Type:text/html;charset=iso-8859-1",13,10);

//打印HTML

printf("n");

printf("

data=getenv("QUERY_STRING");

//取得环境变量

if(data==NULL)

printf("

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的代码打印出来的!天啦这样的话如果返回页面一复杂那还得了啊?而且想返回一个漂亮的界面都几乎是不可能的呢!应该有解决办法的!慢慢深入!

Error!Error in passing data to script

");

Multiplication results

n");
Multiplicand 2:
Multiplicand 1:
[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24790158/viewspace-1041682/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24790158/viewspace-1041682/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值