diff --git a/cgi-bin/Makefile b/cgi-bin/Makefile index 903f166..bf2f86c 100644 --- a/cgi-bin/Makefile +++ b/cgi-bin/Makefile @@ -15,7 +15,11 @@ all: $(cc) mqtt_pub_stoc.c -o mqtt_pub_stoc.cgi $(MQTT_CFLAGS) $(cc) sqlite3.c sqlite_cgi_base.c -o sqlite_cgi_base.cgi $(SQLITE3_CFLAGS) $(CJSON_CFLAGS) $(cc) sqlite3.c sqlite_cgi_insert_base.c -o sqlite_cgi_insert_base.cgi $(SQLITE3_CFLAGS) $(CJSON_CFLAGS) + $(cc) sqlite3.c green_house_info_show.c -o green_house_info_show.cgi $(SQLITE3_CFLAGS) $(CJSON_CFLAGS) +green_house_info_show: + $(cc) sqlite3.c green_house_info_show.c -o green_house_info_show.cgi $(SQLITE3_CFLAGS) $(CJSON_CFLAGS) + sqlite_cgi_base: $(cc) sqlite3.c sqlite_cgi_base.c -o sqlite_cgi_base.cgi $(SQLITE3_CFLAGS) $(CJSON_CFLAGS) diff --git a/cgi-bin/green_house_info_show.c b/cgi-bin/green_house_info_show.c new file mode 100644 index 0000000..6654285 --- /dev/null +++ b/cgi-bin/green_house_info_show.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include "includes/sqlite3.h" + +// cJSON *result_json; // 用于存储查询结果 + +// sqlite3的回调函数 +// sqlite 每查到一条记录,就调用一次这个回调 +int sql_search_callback(void* data, int argc, char** argv, char** azColName) { + cJSON* result_array = (cJSON*)data; + cJSON* item = cJSON_CreateObject(); + + // 遍历每一列,并将数据添加到 JSON 对象中 + for (int i = 0; i < argc; i++) { + cJSON_AddStringToObject(item, azColName[i], argv[i] ? argv[i] : ""); + } + + int isDuplicate = 0; + cJSON* existingItem = result_array->child; + while (existingItem != NULL) { + if (cJSON_Compare(existingItem, item, 1)) { + isDuplicate = 1; + break; + } + existingItem = existingItem->next; + } + + // 如果不是重复的结果,则添加到 JSON 数组中 + if (!isDuplicate) { + cJSON_AddItemToArray(result_array, item); + } + return 0; +} +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) { + fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return 1; + } + fprintf(stderr, "ok Opened database successfully\n"); + + // 构建查询语句 + char query_sql[128] = ""; + sprintf( + query_sql, + "select temperature, humidity , th_date_time from temp_hum_info;"); // 构建查询 + + cJSON* result_array = cJSON_CreateArray(); + + // printf("query_sql is %s\n", query_sql); + + // 执行查询语句 + rc = sqlite3_exec(db, query_sql, sql_search_callback, result_array, + &zErrMsg); // 执行查询语句 + // rc = sqlite3_exec(db, query_sql, sql_search_callback, 0, &zErrMsg); // + // 执行查询语句 + if (rc != SQLITE_OK) { + fprintf(stderr, "SQL error: %s\n", zErrMsg); + sqlite3_free(zErrMsg); + // cJSON_Delete(json_buf); + sqlite3_close(db); + return 1; + } + + char* json_str = cJSON_Print(result_array); + + printf("Content-Type: application/json;charset=utf-8\r\n"); + printf("\r\n"); + printf("%s", json_str); + + free(json_str); + cJSON_Delete(result_array); + + // 释放资源 + sqlite3_close(db); + + return 0; +} diff --git a/cgi-bin/record_of_operation_history.c b/cgi-bin/record_of_operation_history.c new file mode 100644 index 0000000..89773d8 --- /dev/null +++ b/cgi-bin/record_of_operation_history.c @@ -0,0 +1,116 @@ +#include +#include +#include +#include "includes/sqlite3.h" + +// cJSON *result_json; // 用于存储查询结果 + +// sqlite3的回调函数 +// sqlite 每查到一条记录,就调用一次这个回调 +int sql_search_callback(void* NotUsed, int argc, char** argv, char** azColName); + +int main(int argc, char const* argv[]) { + // result_json = cJSON_CreateObject(); // 创建 JSON 对象 + + // 连接到 SQLite 数据库 + sqlite3* db; // 声明 sqlite3 类型变量,即声明一个数据库对象 + char* zErrMsg = 0; // 用于存储错误信息 + int 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, "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) { + fprintf(stderr, "Error parsing JSON data\n"); + sqlite3_close(db); + return 1; + } + + // 获取用户名和密码 + 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"); + // cJSON_Delete(json_buf); + // sqlite3_close(db); + // return 1; + // } + + // 拿到用户名和密码 + 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, + "insert into record_of_operations " + "(oper_user_name,operation_detail,operation_time) " + "values('%s','%s','%s');", + username_from_frontend, password_from_frontend); // 构建插入语句 + + printf("query_sql is %s\n", query_sql); + + // 执行查询语句 + rc = sqlite3_exec(db, query_sql, NULL, NULL, &zErrMsg); // 执行查询语句 + // rc = sqlite3_exec(db, query_sql, sql_search_callback, 0, &zErrMsg); // + // 执行查询语句 + if (rc != SQLITE_OK) { + fprintf(stderr, "SQL error: %s\n", zErrMsg); + sqlite3_free(zErrMsg); + cJSON_Delete(json_buf); + sqlite3_close(db); + return 1; + } + + // 释放资源 + cJSON_Delete(json_buf); + sqlite3_close(db); + + return 0; +} + +int sql_search_callback(void* NotUsed, + int argc, + char** argv, + char** azColName) { + // int i; + // for (i = 0; i < argc; i++) + // { + // printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); + // } + cJSON* result_json = cJSON_CreateObject(); + if (argc == 0) { + cJSON_AddNumberToObject(result_json, "code", 1); + cJSON_AddStringToObject(result_json, "msg", "用户名或密码错误"); + } else + cJSON_AddNumberToObject(result_json, "code", 0); + + char* result_json_string = cJSON_Print(result_json); + + // 输出 JSON 结果 + printf("content-type: application/json;charset=utf-8\r\n"); + printf("\r\n"); + printf("%s\n", result_json_string); + + free(result_json_string); + return SQLITE_OK; +} \ No newline at end of file diff --git a/html/green_house_info_show.html b/html/green_house_info_show.html new file mode 100644 index 0000000..cb976fc --- /dev/null +++ b/html/green_house_info_show.html @@ -0,0 +1,53 @@ + + + + + + + 温湿度 + + + +
+ + + + + + + + + +
温度湿度时间
+
+ + + + \ No newline at end of file diff --git a/sql_base/search_wsd.sql b/sql_base/search_wsd.sql new file mode 100644 index 0000000..4ea885f --- /dev/null +++ b/sql_base/search_wsd.sql @@ -0,0 +1,3 @@ +.headers on +.mode column +select * from temp_hum_info;