PHP学生成绩录入系统提交C2值后输入自动重置为0问题求解
问题根因
- PHP每次页面加载都会重新执行所有代码,你当前的分数数组每次都初始化为全0,没有跨请求存储之前输入的数值,提交C2时页面刷新后之前存的C1值自然就没了
- 你把C1、C2输入框拆成了两个独立表单,提交其中一个表单的时候只会传当前表单内的字段,另一个输入框的值不会跟着提交
- 输入框的
value属性里只写了变量没加echo,就算数组里有值也不会渲染到输入框中,你之前看到的值是placeholder不是实际值
修复方案
- 页面最开头开启Session,用Session持久化存储分数数组,避免每次刷新重置
- 把两个输入框合并到同一个表单,提交时两个值一起传递
- 修复输入框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
相关产品推荐
相关产品推荐

