ARM11 boa服务器用户登录验证

来源:互联网 发布:网络社交 人肉搜索 编辑:程序博客网 时间:2024/06/05 07:54

本文改自:http://3633188.blog.51cto.com/3623188/826594

ARM板:Tiny6410

开发环境:UBUNTU10.10

数据库版本:Sqlite3.3.7.13

BOA版本:Tiny6410自带

1.网页设计,网页设计是直接从网上下载的一个登录界面,再稍加修改而成。效果如下所示:

下载链接:http://www.mobanwang.com/mb/201008/8390.html

2. CGI代码实现

新建login.c文件,如下:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include "sqlite3.h" char* getcgidata(FILE* fp, char* requestmethod); int main() {         char *input; char *req_method;char sqlStatement[512];char *zErrMsg;int nrow = 0, ncolumn = 0;char **azResult;//二维数组存放结果int rc;char userName[20]; char userPasswd[20]; int i = 0; int j = 0;                     printf("Content-type: text/html\n\n");                 req_method = getenv("REQUEST_METHOD");         input = getcgidata(stdin, req_method); // 我们获取的input字符串可能像如下的形式 // userName="admin"&userPasswd="aaaaa" // 其中"Username="和"&Password="都是固定的 // 而"admin"和"aaaaa"都是变化的,也是我们要获取的 // 前面9个字符是userName= // 在"userName="和"&"之间的是我们要取出来的用户名 for ( i = 9; i < (int)strlen(input); i++ ) { if ( input[i] == '&' ) { userName[j] = '\0'; break; }                                    userName[j++] = input[i]; } // 前面9个字符 + "&userPasswd="12个字符 + userName的字符数 // 是我们不要的,故省略掉,不拷贝 for ( i = 21 + strlen(userName), j = 0; i < (int)strlen(input); i++ ) { if(input[i] == '&'){userPasswd[j] = '\0';break;}userPasswd[j++] = input[i]; }     sqlite3 *db=NULL; rc = sqlite3_open("info.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 if(rc){fprintf(stderr,"Can't open database:%s\n",sqlite3_errmsg(db));sqlite3_close(db);}strcpy(sqlStatement, "SELECT userPasswd FROM user_table WHERE userName='"); strcat(sqlStatement, userName);strcat(sqlStatement, "'");rc = sqlite3_get_table(db, sqlStatement, &azResult, &nrow, &ncolumn, &zErrMsg);if(rc != SQLITE_OK){fprintf(stderr, "SQL error:%s\n",zErrMsg);}if(nrow == 1){if(strcmp(userPasswd, azResult[1]) == 0){printf("<html>\n") ; printf("<head><title>welcome</title></head>\n") ; printf("<body>\n") ; printf("<h1>welcome home!!</h1>\n") ; printf("</body>\n") ; printf("</html>\n") ; }else{printf("<html>\n") ;     printf("<head><title>welcome</title></head>\n") ;     printf("<body>\n") ;     printf("<h1>sorry,you need the key!</h1>\n") ;     printf("</body>\n") ;     printf("</html>\n") ;}}else if(nrow == 0){printf("<html>\n") ;         printf("<head><title>welcome</title></head>\n") ;         printf("<body>\n") ;         printf("<h1>sorry,you need the key!</h1>\n") ;         printf("</body>\n") ;         printf("</html>\n") ;}sqlite3_free_table(azResult);sqlite3_close(db); //关闭数据库 return 0;          } char* getcgidata(FILE* fp, char* requestmethod) { char* input; int len; int size = 1024; int i = 0;             if (!strcmp(requestmethod, "GET")) { input = getenv("QUERY_STRING"); return input; } else if (!strcmp(requestmethod, "POST"))         { len = atoi(getenv("CONTENT_LENGTH")); //得到字符长度input = (char*)malloc(sizeof(char)*(size + 1)); if (len == 0) { input[0] = '\0'; return input; } while(1) { input[i] = (char)fgetc(fp); if (i == size) { input[i+1] = '\0'; return input; } --len; if (feof(fp) || (!(len))) { i++; input[i] = '\0'; return input; } i++; }     } return NULL; }
3.交叉编译该代码:arm-linux-gcc -o login.cgi login.c -I /key_C/sqlite/include/ -L /key_C/sqlite/lib/ -lsqlite3,将login.cgi文件以及网页文件放到/www目录下。

4. 在/www目录下新建info.db数据库文件,并插入一条数据,即可进行用户登录验证。

原创粉丝点击