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

PHP学生成绩录入系统提交C2值后输入自动重置为0问题求解

问题根因

  • PHP每次页面加载都会重新执行所有代码,你当前的分数数组每次都初始化为全0,没有跨请求存储之前输入的数值,提交C2时页面刷新后之前存的C1值自然就没了
  • 你把C1、C2输入框拆成了两个独立表单,提交其中一个表单的时候只会传当前表单内的字段,另一个输入框的值不会跟着提交
  • 输入框的value属性里只写了变量没加echo,就算数组里有值也不会渲染到输入框中,你之前看到的值是placeholder不是实际值

修复方案

  1. 页面最开头开启Session,用Session持久化存储分数数组,避免每次刷新重置
  2. 把两个输入框合并到同一个表单,提交时两个值一起传递
  3. 修复输入框value输出逻辑,正确渲染已存储的数值

完整修复后代码示例

<?php
// 页面最开头开启Session,必须放在所有输出之前
session_start();

// 初始化分数数组:Session里有就取,没有就新建全0数组
if (!isset($_SESSION['Students_C1'])) {
    $_SESSION['Students_C1'] = array(0,0,0,0,0);
}
if (!isset($_SESSION['Students_C2'])) {
    $_SESSION['Students_C2'] = array(0,0,0,0,0);
}

// 处理表单提交
if (isset($_GET['submit_score'])) {
    // 接收C1值,更新Session
    if (isset($_GET['SampleUP'])) {
        $val1 = htmlentities($_GET['SampleUP']);
        $_SESSION['Students_C1'][0] = $val1;
    }
    // 接收C2值,更新Session
    if (isset($_GET['SampleUPs'])) {
        $val2 = htmlentities($_GET['SampleUPs']);
        $_SESSION['Students_C2'][0] = $val2;
    }
}
?>

<!-- 合并成同一个表单 -->
<td>  
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
        <input type="text" id="input_c1" name="SampleUP" value="<?php echo $_SESSION['Students_C1'][0]; ?>" placeholder="请输入C1分数">
</td>
<td>  
        <input type="text" id="input_c2" name="SampleUPs" value="<?php echo $_SESSION['Students_C2'][0]; ?>" placeholder="请输入C2分数">
        <button type="submit" name="submit_score">保存分数</button>
    </form>
</td>

如果确实需要保留分别提交的逻辑,不想共用一个提交按钮,也可以在每个表单里加隐藏字段存储另一个科目的当前值,不过用Session存储是扩展性最好的方案,后续新增其他学生的分数也可以直接往Session的数组里存入即可。


内容的提问来源于stack exchange,提问作者I_isekeid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:00:01