如何使用PHP按类别计算抑郁、压力、焦虑测试得分
实现情绪测评得分计算与存储的PHP解决方案
我来给你梳理一套完整的PHP实现方案,涵盖表单数据处理、得分计算和数据库存储的全流程:
1. 数据库连接配置
首先准备一个通用的数据库连接文件,推荐使用PDO确保安全性和兼容性:
<?php // db_connect.php $host = 'localhost'; $dbname = '你的数据库名称'; $username = '数据库用户名'; $password = '数据库密码'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("数据库连接失败: " . $e->getMessage()); } ?>
2. 表单提交核心处理脚本(submit_answer.php)
这个文件负责接收前端表单数据、验证合法性、按类别计算得分,并将数据写入数据库:
<?php session_start(); include 'db_connect.php'; // 验证用户登录状态(假设user_id已存入session) if (!isset($_SESSION['user_id'])) { die("请先完成登录!"); } $user_id = $_SESSION['user_id']; // 初始化三类得分 $depression_score = 0; $stress_score = 0; $anxiety_score = 0; // 准备插入单个答案的SQL语句 $answer_sql = "INSERT INTO answerTbl (user_id, question_no, answer_value) VALUES (:user_id, :question_no, :answer_value)"; $answer_stmt = $pdo->prepare($answer_sql); try { $pdo->beginTransaction(); // 开启事务,保证数据一致性 // 遍历所有提交的表单数据 foreach ($_POST as $input_name => $answer_value) { // 验证答案值是否合法(必须是0-3的整数) if (!in_array($answer_value, [0, 1, 2, 3])) { throw new Exception("无效的答案值:$answer_value"); } // 解析问题类别与编号 if (str_starts_with($input_name, 'depression')) { $question_no = str_replace('depression', '', $input_name); $depression_score += (int)$answer_value; } elseif (str_starts_with($input_name, 'stress')) { $question_no = str_replace('stress', '', $input_name); $stress_score += (int)$answer_value; } elseif (str_starts_with($input_name, 'anxiety')) { $question_no = str_replace('anxiety', '', $input_name); $anxiety_score += (int)$answer_value; } else { // 忽略非测评类表单参数 continue; } // 将单个答案写入answerTbl $answer_stmt->execute([ ':user_id' => $user_id, ':question_no' => $question_no, ':answer_value' => $answer_value ]); } // 将计算后的总分写入recordTbl $record_sql = "INSERT INTO recordTbl (user_id, depression_score, stress_score, anxiety_score) VALUES (:user_id, :depression, :stress, :anxiety)"; $record_stmt = $pdo->prepare($record_sql); $record_stmt->execute([ ':user_id' => $user_id, ':depression' => $depression_score, ':stress' => $stress_score, ':anxiety' => $anxiety_score ]); $pdo->commit(); // 提交事务 echo "测评提交成功!<br>抑郁得分:$depression_score | 压力得分:$stress_score | 焦虑得分:$anxiety_score"; } catch(Exception $e) { $pdo->rollBack(); // 出错时回滚所有操作 die("提交失败:" . $e->getMessage()); } ?>
3. 关键注意事项
- 用户登录逻辑:代码中假设用户已登录,
user_id存储在$_SESSION['user_id']中,你需要根据实际项目的登录机制调整这部分验证。 - 事务保障:使用数据库事务确保
answerTbl和recordTbl的数据一致性,避免出现部分数据写入成功的异常情况。 - 数据合法性校验:强制验证答案值为0-3的整数,防止恶意提交非法数据破坏统计逻辑。
- 问题编号匹配:前端表单的
name属性(如stress1)需与questionTbl中的question_no完全对应,否则需要调整编号解析逻辑。 - 字符集设置:数据库连接使用
utf8mb4字符集,避免中文问题描述出现乱码。
内容的提问来源于stack exchange,提问作者user9243551
相关产品推荐
相关产品推荐

