HTML显示温湿度表

This commit is contained in:
chang 2023-10-27 11:53:48 +08:00
parent c2b047a667
commit e89ff250e7
5 changed files with 264 additions and 0 deletions

View File

@ -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)

View File

@ -0,0 +1,88 @@
#include <cjson/cJSON.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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;
}

View File

@ -0,0 +1,116 @@
#include <cjson/cJSON.h>
#include <stdio.h>
#include <stdlib.h>
#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;
}

View File

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>温湿度</title>
</head>
<body>
<div class="tablecenter">
<table id="arpTable" width="700" align="center" border="1" cellspacing="0">
<thead>
<th>温度</th>
<th>湿度</th>
<th>时间</th>
</thead>
<tbody id="greenTableBody" align="center">
</tbody>
</table>
</div>
</body>
<script>
function loadBlackData() {
var blackData;
fetch("../cgi-bin/green_house_info_show.cgi").then(resp => resp.json()).then(data => {
blackData = data;
greenTableBody.innerText = "";
data.forEach(rowData => {
let tr = document.createElement("tr");
let td1 = document.createElement("td");
let td2 = document.createElement("td");
let td3 = document.createElement("td");
td1.innerText = rowData.temperature;
td2.innerText = rowData.humidity;
td3.innerText = rowData.th_date_time;
tr.append(td1, td2, td3);
greenTableBody.append(tr);
});
})
}
window.onload = function () {
loadBlackData();
}
</script>
</html>

3
sql_base/search_wsd.sql Normal file
View File

@ -0,0 +1,3 @@
.headers on
.mode column
select * from temp_hum_info;