From c6d43162ff442a31cc4be22ba19a5f74121f6391 Mon Sep 17 00:00:00 2001 From: wang_chengh <13383929+wang_chengh@user.noreply.gitee.com> Date: Tue, 19 Sep 2023 18:44:20 +0800 Subject: [PATCH] On the evening of September 19, .c files which can communicate successfully with .html & mysql create files --- www/cgi-bin/c_mysql_user_pwd.c | 101 +++++++++++++++++++++++++++++++++ www/cgi-bin/creat_table.sql | 19 +++++++ 2 files changed, 120 insertions(+) create mode 100644 www/cgi-bin/c_mysql_user_pwd.c create mode 100644 www/cgi-bin/creat_table.sql diff --git a/www/cgi-bin/c_mysql_user_pwd.c b/www/cgi-bin/c_mysql_user_pwd.c new file mode 100644 index 0000000..be69d39 --- /dev/null +++ b/www/cgi-bin/c_mysql_user_pwd.c @@ -0,0 +1,101 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main() { + // 连接到 MySQL 数据库 + MYSQL *conn; + MYSQL_RES *res; + MYSQL_ROW row; + + conn = mysql_init(NULL); + if (conn == NULL) { + fprintf(stderr, "mysql_init() failed\n"); + exit(1); + } + + if (mysql_real_connect(conn, "localhost", "root", "root", "router", 3306, + NULL, 0) == NULL) { + fprintf(stderr, "mysql_real_connect() failed\n"); + mysql_close(conn); + exit(1); + } + + // 获取前端传递的 JSON 数据 + char request_data[128] = ""; + fgets(request_data, 128, stdin); + + // 解析 JSON 数据 + cJSON *p = cJSON_Parse(request_data); + if (p == NULL) { + fprintf(stderr, "Error parsing JSON data\n"); + mysql_close(conn); + return 1; + } + + // 获取用户名和密码 + cJSON *user = cJSON_GetObjectItemCaseSensitive(p, "name"); + cJSON *pwd = cJSON_GetObjectItemCaseSensitive(p, "pwd"); + + if (user == NULL || pwd == NULL || !cJSON_IsString(user) || + !cJSON_IsString(pwd)) { + fprintf(stderr, + "Error getting username and/or password from JSON data\n"); + cJSON_Delete(p); + mysql_close(conn); + return 1; + } + + char *username_from_frontend = user->valuestring; + char *password_from_frontend = pwd->valuestring; + + // 构建查询语句 + char query[1000]; + sprintf(query, "SELECT * FROM users WHERE username='%s' AND password='%s'", + username_from_frontend, password_from_frontend); + + if (mysql_query(conn, query)) { + fprintf(stderr, "SELECT query failed. Error: %s\n", mysql_error(conn)); + cJSON_Delete(p); + mysql_close(conn); + return 1; + } + + res = mysql_store_result(conn); + if (res == NULL) { + fprintf(stderr, "mysql_store_result() failed\n"); + cJSON_Delete(p); + mysql_close(conn); + return 1; + } + + cJSON *result_json = cJSON_CreateObject(); + + if ((row = mysql_fetch_row(res))) { + cJSON_AddNumberToObject(result_json, "code", 0); + } else { + cJSON_AddNumberToObject(result_json, "code", 1); + cJSON_AddStringToObject(result_json, "msg", "用户名或口令错误"); + } + + 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); + cJSON_Delete(result_json); + cJSON_Delete(p); + mysql_free_result(res); + mysql_close(conn); + + return 0; +} diff --git a/www/cgi-bin/creat_table.sql b/www/cgi-bin/creat_table.sql new file mode 100644 index 0000000..e6b09c3 --- /dev/null +++ b/www/cgi-bin/creat_table.sql @@ -0,0 +1,19 @@ +-- 创建管理员登录表 +CREATE database if NOT EXISTS router; +USE router; +-- 创建用户登录密码表 +CREATE TABLE users ( + id INT AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(50) NOT NULL, + password VARCHAR(255) NOT NULL +); +INSERT INTO users (username, password) +VALUES ('admin', 'admin'); +-- 创建ARP映射表 +CREATE TABLE ip_mac( + id INT AUTO_INCREMENT PRIMARY KEY, + ip VARCHAR(50) NOT NULL, + mac VARCHAR(50) NOT NULL +); +-- 创建防火墙表 +CREATE TABLE ip_fw(ip VARCHAR(50) NOT NULL); \ No newline at end of file