初次学习写CGI,而且是初次使用比较少见的CCGI方式,最终解决了如下问题:
1.C实现sqlite3数据库的操作,含数据库的建立、打开、插入、查询、删除、更新、关闭等操作;
2。实现了我觉得十分重要的使用C来实现CGI页面的跳转,其实就是一句话:如下
printf("<script>window.location.href='/login_err.html';</script>");//实现页面的自动跳转
附1:c实现的数据库操作代码
//此代码是实现数据库的操作:新建/打开、插入、删除、查询等操作
#include<stdio.h>
#include<sqlite3.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *name="lxf",*psw="lxf";
int id=1;
sqlite3 *db=NULL;
char *zErrMsg=0;
char *sql;
int rc;
int nRow,nColum;
char **selResult;
int i,j,k;
char *callbackData="Callback function called";
int selectId=1;
rc=sqlite3_open("my.db",&db);
if(rc)
{
fprintf(stderr,"Can't open database:%s",sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else
{
printf("You have open a sqlite database named myfirst.db successfully!/n");
}
//定义插入数据的sql语句
sql="INSERT INTO T_User VALUES(1,'lxf','lxf','0')";
//执行sql语句
rc=sqlite3_exec(db,sql,NULL,NULL,&zErrMsg);
if(rc!=SQLITE_OK)
{
if(zErrMsg!=NULL)
{
fprintf(stderr,"SQL error:%s/n",zErrMsg);
sqlite3_free(zErrMsg);
}
}
else
{
printf("Insert OK...");
}
//查询数据
sprintf(sql,"select * from T_User where P_UserID='%d'",id);
rc=sqlite3_get_table(db,sql,&selResult,&nRow,&nColum,&zErrMsg);
if(SQLITE_OK==rc)
{
if(nRow!=0)
{
for(i=0;i<nRow+1;i++)
{
for(j=0;j<nColum;j++)
{
fprintf(stdout,"%s/t",selResult[(i)*nColum+j]);
}
printf("/n");
}
}
else
{
printf("No data.../n");
}
}
else
{
printf("select error.../n");
}
//释放selResult存储空间
sqlite3_free_table(selResult);
//删除数据delete
sql="delete from T_User where P_UserID=1";
rc=sqlite3_exec(db,sql,NULL,NULL,&zErrMsg);
if(SQLITE_OK==rc)
{
printf("Delete OK.../n");
}
else
{
printf("delete error.../n");
}
//再次查看
sql="select * from T_User;";
rc=sqlite3_get_table(db,sql,&selResult,&nRow,&nColum,&zErrMsg);
if(SQLITE_OK==rc)
{
for(i=0;i<nRow+1;i++)
{
for(j=0;j<nColum;j++)
{
fprintf(stdout,"%s/t",selResult[(i)*nColum+j]);
}
printf("/n");
}
}
else
{
printf("select error.../n");
}
//释放selResult存储空间
sqlite3_free_table(selResult);
sqlite3_close(db);
exit(0);
}