一 平台介绍
硬件:s3c2410开发板(我用的是友善之臂的)、pc机。
软件:boa服务器、sqlite数据库(需要把服务器和数据库都配置好)
二程序源代码
源代码如下:
(1)index.html
<html><meta http-equiv="Content-Type" content="text/html; charset=gbk"/>
<head><title>用户登陆验证</title></head>
<body>
<form name="form1" action="/login/index.cgi" method="POST">
<table align="center">
<tr><td align="center" colspan="2"></td></tr>
<tr>
<td align="right">用户名</td>
<td><input type="text" name="Username"></td>
</tr>
<tr>
<td align="right">密 码</td>
<td><input type="password" name="Password"></td>
</tr>
<tr>
<td><input type="submit" value="登 录"></td>
<td><input type="reset" value="取 消"></td>
</tr>
</table>
</form>
</body>
</html>
(2)index.c(该文件可以生成index.cgi)
#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 namein[12];
char pass[12];
char passtemp[12];
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"&Password="aaaaa"
// 其中"Username="和"&Password="都是固定的
// 而"admin"和"aaaaa"都是变化的,也是我们要获取的
// 前面9个字符是Usernamein=
// 在"Username="和"&"之间的是我们要取出来的用户名
for ( i = 9; i < (int)strlen(input); i++ )
{
if ( input[i] == '&' )
{
namein[j] = '\0';
break; //跳出for循环,因为用户名已经取得。
}
namein[j++] = input[i];
}
// 前面9个字符 + "&Password="10个字符
for ( i = 19 + strlen(namein), j = 0; i < (int)strlen(input); i++ )
{
pass[j++] = input[i];
}
pass[j] = '\0';
sqlite3_stmt* stmt;
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("login.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
char *sql = " CREATE TABLE user(ID INTEGER PRIMARY KEY,Name text,Password text);" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
//查询数据
int ret=0;
int t=0;
sql = "SELECT Password FROM user WHERE Name=?";
ret = sqlite3_prepare(db,sql,strlen(sql),&stmt,NULL);
sqlite3_bind_text(stmt, 1, namein,strlen(namein),SQLITE_STATIC);
while( sqlite3_step(stmt) == SQLITE_ROW){
strcpy(passtemp,sqlite3_column_text(stmt,0));
if(strcmp(passtemp,pass)==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") ;
t=1;
} }
if(t==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_finalize(stmt);
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)Makefile文件
# Makefile created by MaShang(gcc version 4.4.3)
CPP = arm-linux-g++
CC = arm-linux-gcc
WINDRES =
RES =
OBJ = index.o $(RES)
LINKOBJ = index.o $(RES)
LIBS += -L ./lib -lsqlite3 -lpthread -ldl
INCS += -I ./include
CXXINCS =
BIN = index.cgi
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm -f
.PHONY: all clean clean-custom
all: index.cgi
clean: clean-custom
${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
$(CC) -static -g -o index.cgi index.c $(LIBS) $(CFLAGS)
index.o: index.c
$(CC) -g -c index.c -o index.o $(CFLAGS)
(4)程序源代码的主题已经完成了,lib文件夹里面是库文件,include文件夹里是.h 文件
(5)数据库login.db
BEGIN TRANSACTION;
CREATE TABLE user(Id integer PRIMARY KEY,Name text,Password text);
INSERT INTO user VALUES(1,'root',123456);
INSERT INTO user VALUES(2,'mashang',123456789);
COMMIT;
最后在linux系统Fedora9下面实现了整个过程。
分享到:
相关推荐
derby嵌入式数据库连接问题
另外Cache Server拥有强大的编程能力,拥有业内功能最强大的内存数据库脚本,使Cache Server不只作为数据的高速缓存服务器,更能够实现复杂的业务逻辑,通过编写数据库脚本和存储过程实现以前通过C/C++编程才能实现...
基于单片机的嵌入式Web服务器设计与实现.pdf
这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。它们是使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想。...
H2是一个短小精干的嵌入式数据库引擎,主要的特性包括:免费、开源、快速嵌入式的数据库服务器,支持集群提供JDBC、ODBC访问接口,提供基于浏览器的控制台管理程序Java编写,可使用GCJ和IKVM.NET编译短小精干的软件...
基于嵌入式数据库Berkeley DB的嵌入式无线微型服务器、电子技术,开发板制作交流
嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。 一、嵌入式数据库简介 ...
于C/S 或B/S 结构的关系型数据库来实现数据的存储、检索等功能。然而,在嵌入式系统中, 由于软硬件资源有限,不可能安装庞大的数据库服务器,而用户的需求可能由一个简单的基 于磁盘文件的数据库系统就能实现,这...
为了在资源有限的嵌入式设备上能够有效地实现动态Web,本文比较了几种Web服务器的优缺点,选择了性能优异的Boa作为嵌入式Web服务器,阐述了CGI技术的相关原理以及SQLite数据库的定义。本文所设计的查询数据系统以...
通过对嵌入式数据库SQLite的分析研究,实现了嵌入式数据库在嵌入式w曲中的应用,并提出了一个基于删的嵌入式w曲服务器内嵌一个小型数据库管理系统的设计方案,利用CGI实现了嵌入式web服务器与用户的动态交互并成功的...
SQLite是一个开源的、内嵌式的关系型数据库。...(1)首先SQLite数据库服务器就在你的数据库应用程序中,其好处是不需要网络配置和管理,也不需要通过设置数据源访问数据库服务器。 (2)其次SQLite数据库的
人工智能-项目实践-html-嵌入式web服务器BOA+CGI+HTML+MySQL项目实战——Linux 使用到的软件和技术 BOA服务器,CGI,CCGI,MySQL,SQLite。C,HTML,CSS,JS,SQL 具体功能讲解 1、运行BOA服务器 (来到BOA目录下...
同时,越来越多的用户希望能对嵌入式环境下的数据进行更有效的管理,构建嵌入式数据库便是一个有效的方法,使用户能在嵌入式设备中方便地存储、检索或修改数据,实现大部分传统数据库的功能。嵌人式系统和数据库技术...
基于文件型嵌入式数据库的加密研究,黄加喜,陈天煌,基于文件型的嵌入式数据库在安全性上有很大不足,只要能得到此文件就可以看到里面的数据信息,尤其作为Web服务器中的数据库时,只
SQLite是一种自包含、无服务器的数据库引擎,以源代码形式提供,并广泛应用于移动应用、桌面软件和嵌入式系统中。本文介绍了SQLite的特点,包括零配置、基于磁盘文件、支持标准SQL语法、ACID事务支持等。同时,探讨...
SQLite嵌入式数据库系统设计,引言随着嵌入式系统的广泛应用及用户对数据处理和管理需求的不断提高,各种智能设备与数据库...这种数据库不仅具有传统数据库的主要功能,还具有嵌入式和支持移动技术两种特性。可以说,嵌
通常,我们采用数据库来实现对数据的存储、检索等功能。像MySQL这类基于C/S结构的关系型数据库系统,虽然代表着目前数据库应用的主流,却并不能满足所有应用场合的需要。很多的应用,仅仅利用到了这些数据库产品...
本人设计的嵌入式智能家居系统源代码,平台是6410或2410,基于boa的web服务器,使用数据库,cgi,html,javascript
本个人理财软件系统是在Android移动平台的基础上开发,提供了预算...本系统采用Android系统集成的轻量级嵌入式数据库SQLite作为数据库引擎,以实现前后台数据交互。 关键词:个人理财; Android; Java; SQLite; JSON
文档介绍了前言 ,嵌入式网管系统设计概述,交叉编译环境的建立,Web服务器的配置,嵌入式数据库的移植,嵌入式临近系统的软件结构设计,结语