You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:58:39