修复了cjson的bug

This commit is contained in:
chang 2023-10-25 10:47:08 +08:00
parent dd66f9b1c6
commit 2c30d489b2
3 changed files with 36 additions and 30 deletions

View File

@ -1,7 +1,7 @@
all:
sqlite_cgi_base:
gcc sqlite3.c sqlite_cgi_base.c -o sqlite_cgi_base -lpthread -ldl
gcc sqlite3.c sqlite_cgi_base.c -o sqlite_cgi_base -lpthread -ldl -lcjson
clean:
rm -rf sqlite_cgi_base

BIN
cgi-bin/sqlite_cgi_base Executable file

Binary file not shown.

View File

@ -1,31 +1,31 @@
#include "sqlite3.h"
#include <stdio.h>
#include <cjson/cJSON.h>
#include <stdio.h>
// #include "cJSON.h"
#include "sqlite3.h"
int main(int argc, char const *argv[])
{
int main(int argc, char const* argv[]) {
// 连接到 SQLite 数据库
sqlite3* db; // 声明 sqlite3 类型变量,即声明一个数据库对象
char* zErrMsg = 0; // 用于存储错误信息
int rc; // 用于存储函数返回值
rc = sqlite3_open("../sql_base/green_house.db", &db); // 打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if (rc)
{
rc = sqlite3_open(
"../sql_base/green_house.db",
&db); // 打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
fprintf(stderr, " Opened database successfully\n");
fprintf(stderr, "ok Opened database successfully\n");
// 获取前端传递的 JSON 数据
char request_data[128] = "";
fgets(request_data, 128, stdin); // 从标准输入中读取一行数据
// 解析 JSON 数据
cJSON *json_buf = cJSON_parse(request_data); // 解析 JSON 数据
if (json_buf == NULL)
{
cJSON* json_buf = cJSON_Parse(request_data); // 解析 JSON 数据
if (json_buf == NULL) {
fprintf(stderr, "Error parsing JSON data\n");
sqlite3_close(db);
return 1;
@ -35,9 +35,10 @@ int main(int argc, char const *argv[])
cJSON* user = cJSON_GetObjectItemCaseSensitive(json_buf, "name");
cJSON* password = cJSON_GetObjectItemCaseSensitive(json_buf, "password");
if (user == NULL || password == NULL || !cJSON_IsString(user) || !cJSON_IsString(password))
{
fprintf(stderr, "Error getting username and/or password from JSON data\n");
if (user == NULL || password == NULL || !cJSON_IsString(user) ||
!cJSON_IsString(password)) {
fprintf(stderr,
"Error getting username and/or password from JSON data\n");
cJSON_Delete(json_buf);
sqlite3_close(db);
return 1;
@ -47,14 +48,18 @@ int main(int argc, char const *argv[])
char* username_from_frontend = user->valuestring;
char* password_from_frontend = password->valuestring;
printf("username is %s, pwd is %s\n", username_from_frontend,
password_from_frontend);
// 构建查询语句
char query_sql[128] = "";
sprintf(query_sql, "select * from login_users where username='%s' and password='%s'", username_from_frontend, password_from_frontend); // 构建查询语句
sprintf(query_sql,
"select * from login_users where username='%s' and password='%s'",
username_from_frontend, password_from_frontend); // 构建查询语句
// 执行查询语句
rc = sqlite3_exec(db, query_sql, 0, 0, &zErrMsg); // 执行查询语句
if (rc != SQLITE_OK)
{
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
cJSON_Delete(json_buf);
@ -65,7 +70,8 @@ int main(int argc, char const *argv[])
// 构建 JSON 数据
cJSON* result_json = cJSON_CreateObject();
cJSON_AddItemToObject(result_json, "result", cJSON_CreateString("success"));
cJSON_AddItemToObject(result_json, "username", cJSON_CreateString(username_from_frontend));
cJSON_AddItemToObject(result_json, "username",
cJSON_CreateString(username_from_frontend));
// 打印 JSON 数据
char* result_json_str = cJSON_Print(result_json);