全栈(C + HTML/CSS/JS + MySQL)开发学生管理系统教程(四)

简介: 教程来源 https://www.xbivx.cn/ 本教程基于C语言实现Web学生管理系统,涵盖CGI编程、MySQL交互、安全防护(防SQL注入/XSS)、部署排错及性能优化。通过curl测试API、HTML动态渲染与JSON数据交换,深入理解Web底层原理。

4.5 测试验证
4.5.1 基础功能测试
测试项 测试URL 预期结果
学生列表 http://localhost/cgi-bin/student.cgi?action=list 显示学生表格
添加学生表单 http://localhost/cgi-bin/student.cgi?action=add 显示添加表单
学生详情 http://localhost/cgi-bin/student.cgi?action=detail&id=1 显示学生信息
班级筛选 http://localhost/cgi-bin/student.cgi?action=list&class_id=1 只显示该班学生
4.5.2 使用curl进行API测试

# 测试列表接口
curl "http://localhost/cgi-bin/student.cgi?action=list&format=json"

# 测试添加学生(POST请求)
curl -X POST \
  -d "student_no=2024001&name=测试学生&gender=男&class_id=1" \
  "http://localhost/cgi-bin/student.cgi?action=add"

# 测试删除学生
curl "http://localhost/cgi-bin/student.cgi?action=delete&id=1"

4.5.3 常见部署问题及解决方案
问题1:403 Forbidden

# 原因:CGI程序没有执行权限
# 解决方案:
sudo chmod 755 /usr/lib/cgi-bin/student.cgi
sudo chown www-data:www-data /usr/lib/cgi-bin/student.cgi

问题2:502 Bad Gateway

# 原因:CGI程序执行出错
# 解决方案:
# 1. 检查程序是否有语法错误
# 2. 查看Apache错误日志
sudo tail -f /var/log/apache2/error.log

# 3. 手动运行测试
cd /usr/lib/cgi-bin/
./student.cgi

问题3:空白页面

# 原因:程序输出格式不正确
# 解决方案:确保程序首先输出HTTP头
# 正确输出格式:printf("Content-Type: text/html\n\n");

问题4:数据库连接失败

# 原因:数据库配置信息不正确
# 解决方案:
# 1. 测试数据库连接
mysql -u root -p -e "SELECT 1"

# 2. 检查代码中的数据库连接参数
# 3. 查看MySQL错误日志
sudo tail -f /var/log/mysql/error.log

第五部分:项目总结

5.1 项目成果总结
通过本教程,我们成功构建了一个功能完整的C语言Web学生管理系统。以下是项目的核心成果:

5.1.1 已实现的功能
image.png
5.1.2 代码统计
image.png
5.2 技术难点回顾
5.2.1 CGI编程的核心要点
环境变量解析:通过getenv()获取请求方法、查询字符串等信息

POST数据处理:从stdin读取指定长度的数据

URL解码:将%E5%BC%A0转换为中文字符

HTML转义:防止XSS攻击

HTTP头输出:必须首先输出Content-Type

5.2.2 数据库操作要点
连接管理:使用mysql_init()和mysql_real_connect()

SQL注入防护:使用mysql_real_escape_string()转义

结果集处理:mysql_store_result() + mysql_fetch_row()

错误处理:检查返回值并输出错误信息

5.2.3 前端交互要点
动态表格渲染:JavaScript根据数据生成HTML

模态框表单:弹出层实现添加/编辑

AJAX请求:fetch API实现异步数据传输

JSON数据交换:CGI程序输出JSON格式数据

5.3 性能分析
5.3.1 与主流Web框架的对比
image.png
5.3.2 优化建议
使用FastCGI替代传统CGI:FastCGI保持进程常驻,避免每次请求都创建新进程

数据库连接池:复用数据库连接,减少连接开销

静态文件分离:CSS/JS/图片由Web服务器直接处理

输出缓冲:使用缓冲区减少I/O操作

SQL优化:为常用查询字段添加索引

5.4 安全加固建议
5.4.1 防止SQL注入

// 始终使用转义函数
char escaped_name[200];
mysql_real_escape_string(conn, escaped_name, name, strlen(name));
snprintf(sql, sizeof(sql), "INSERT INTO students (name) VALUES ('%s')", escaped_name);

5.4.2 防止XSS攻击

// 输出用户数据时进行HTML转义
char escaped_name[200];
html_escape(name, escaped_name);
printf("<td>%s</td>", escaped_name);

5.4.3 文件权限设置

# CGI程序权限:所有者可读写执行,其他人只可执行
chmod 755 /usr/lib/cgi-bin/student.cgi

# 配置文件权限:仅所有者可读写
chmod 600 config/database.conf

# 日志目录权限:Web服务器可写入
chown www-data:www-data logs/
chmod 755 logs/

5.4.4 输入验证

// 验证学号格式
if (strlen(student_no) != 7 || !isdigit(student_no[0])) {
    print_error_page("学号格式错误");
    return;
}

// 验证班级ID存在性
if (!is_valid_class_id(conn, class_id)) {
    print_error_page("班级不存在");
    return;
}

5.5 扩展功能开发指南
5.5.1 添加成绩管理模块

// 成绩管理处理函数
void handle_grade(MYSQL *conn, char *action, char *student_id) {
    if (strcmp(action, "add") == 0) {
        // 处理添加成绩
        char *post_data = get_post_data();
        // 解析POST数据...
        // 插入scores表
    } else if (strcmp(action, "list") == 0) {
        // 显示成绩列表
        // JOIN students和scores表查询
    }
}

5.5.2 添加用户认证模块

// 简单的Session管理(基于文件)
char* create_session(int user_id) {
    char session_id[33];
    // 生成随机session_id
    // 写入文件/tmp/session_[session_id]
    return strdup(session_id);
}

int check_session(char *session_id) {
    // 检查session文件是否存在且未过期
    char path[100];
    snprintf(path, sizeof(path), "/tmp/session_%s", session_id);
    return access(path, F_OK) == 0;
}

5.5.3 添加分页功能

-- 分页查询SQL
SELECT * FROM students LIMIT offset, limit
// 分页参数解析
int page = atoi(get_param("page", 1));
int limit = atoi(get_param("limit", 10));
int offset = (page - 1) * limit;

// 构建分页SQL
snprintf(sql, sizeof(sql), 
    "SELECT * FROM students LIMIT %d, %d", offset, limit);

5.5.4 添加搜索功能

// 搜索功能实现
if (strlen(keyword) > 0) {
    char escaped_keyword[200];
    mysql_real_escape_string(conn, escaped_keyword, keyword, strlen(keyword));
    snprintf(sql, sizeof(sql),
        "SELECT * FROM students WHERE name LIKE '%%%s%%' OR student_no LIKE '%%%s%%'",
        escaped_keyword, escaped_keyword);
}

C语言虽不是Web开发的主流选择,但通过本教程的学习,你将对Web技术的底层原理有更深刻的理解。无论今后使用何种语言开发Web应用,这些基础知识都将使你受益匪浅。

希望本教程能帮助你打开C语言Web开发的大门!
来源:
https://xbivx.cn/

相关文章
|
8天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
3370 20
|
20天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
17857 60
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
1天前
|
SQL 人工智能 弹性计算
阿里云发布 Agentic NDR,威胁检测与响应进入智能体时代
欢迎前往阿里云云防火墙控制台体验!
1154 2
|
4天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
1785 8
|
15天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
3159 29
|
3天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
1416 3
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
4天前
|
机器学习/深度学习 缓存 测试技术
DeepSeek-V4开源:百万上下文,Agent能力比肩顶级闭源模型
DeepSeek-V4正式开源!含V4-Pro(1.6T参数)与V4-Flash(284B参数)双版本,均支持百万token上下文。首创混合注意力架构,Agent能力、世界知识与推理性能全面领先开源模型,数学/代码评测比肩顶级闭源模型。
1712 6
|
5天前
|
人工智能 测试技术 API
阿里Qwen3.6-27B正式开源:网友直呼“太牛了”!
阿里云千问3.6系列重磅开源Qwen3.6-27B稠密大模型!官网:https://t.aliyun.com/U/JbblVp 仅270亿参数,编程能力媲美千亿模型,在SWE-bench等权威基准中表现卓越。支持多模态理解、本地部署及OpenClaw等智能体集成,已开放Hugging Face与ModelScope下载。