我還是按照這個程序的順序來講解,方便大家理解 一點,在這里得說明下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服務器時候規定的文件加。