我还是按照这个程序的顺序来讲解,方便大家理解 一点,在这里得说明下boa服务器只是一个平台,只要搭建好了就可以不用去管它,我们只需要写cgi-bin和html文件,我们在上一篇文章中网页已经做好了,当我们点击提交按钮的时候,程序会去执行/etc/boa/cgi-bin目录下的login.cgi脚本文件,(为什么是这个文件,我们在上篇文章已经制定了这个脚本来处理数据),下面我们就来写这个脚本程序。
login.c文件:
~~~
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *str_len=NULL;
int len=0;
char buf[100]="";
char user[20]="";
char passwd[20]="";
~~~
printf("%s\r\n\r\n","Content-Type:text/html"); / * 固定格式,不用去管他,但是注意这条语句前后要空两行 * /
printf("<html>\n<head>\n<title>CGI3:登录结果</title></head><br>\n"); / * 可以用printf打印网页,但是要按照 html格式打印,也可以网页保存在一个数组中来打印,后面文章中将会讲解,这里是打印新网页的标题 * /
str_len = getenv("CONTENT_LENGTH");/ * 这个很重要获取环境变量,是获取我们开始登陆信息 * /
if( (str_len==NULL) || (sscanf(str_len, "%d", &len)!=1) || (len>80) ) / * 这里注意下sscanf的用法 * /
printf("sorry!error!");
fgets(buf, len+1, stdin);
sscanf(buf, "name=%[^&]&password=%s", user,passwd); / * 把用户名保存在user中,把账户保存在passwd,观察这里的name,password。这里不是和网页里面设置的变量对应起来了么,这里只是提取出来吧了 * /
if( (strncmp(user,"root",4)==0) && (strncmp(passwd, "111111", 6)==0) )/* 比较登陆用户是否正确 * /
{
printf("<script language=\"JavaScript\">self.location='main.cgi';</script>");/ * 调用一个新的main.cgi脚本 * /
}
else
printf("Sorry! 用户名或密码错误!");
return 0;
}
编译: # arm-linux-gcc login.c -o login.cgi (后面我会统一写进一个Makefile中)
在这一章可以这样测试,你在if( (strncmp(user,"root",4)==0) && (strncmp(passwd, "111111", 6)==0) )下面添加打印语句密码正确,和密码错误测试。注释掉打印脚本的那条语句,因为你都还没有写这个脚本,你怎么跳转呢。一定要把脚本文件复制到/etc/boa/cgi-bin目录下面,这是我们之前搭建boa服务器时候规定的文件加。