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

Flask后端与学生注册表单联动异常求助:数据未入库且不跳转

学生注册表单功能异常排查与修复方案

问题根源分析

提交表单后数据无法入库且无法跳转至感谢页面,核心问题集中在两处:

1. HTML表单字段缺失关键属性

下拉选择框<select>未设置name="course"属性,导致Flask后端无法通过request.form['course']获取课程选择值,直接触发KeyError中断流程。

2. Flask后端事务提交逻辑不完整

仅在课程匹配成功时执行connection.commit(),但插入学生基础信息的操作未单独提交,即使课程存在,学生信息也不会写入数据库;同时未捕获表单字段缺失的异常,导致无友好报错。


修复后的代码

修复后的HTML代码(StudentRegistration.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="CSS/StudentRegistration.css">
    <title>Student Registration Form</title>
</head>
<body>
    <form action="/submit_form" method="post">
      <div class="container">  
        <center>  <h1> Student Registeration Form</h1> </center>
        <hr>  
        <label> Firstname </label>   
        <input type="text" name="firstname" placeholder= "Firstname" size="15" required />      
        <label> Lastname: </label>    
        <input type="text" name="lastname" placeholder="Lastname" size="15"required />  
        <br>
        <label for="email"><b>Email</b></label>  
        <input type="text" id="email" placeholder="Enter Email" name="email" required> 
      <div>  
      <label>   
      Course :  
      </label>    
      <!-- 添加name属性,让后端可以获取课程值 -->
      <select name="course">  
        <option value="" selected disabled>Select your course</option>
        <option value="Animation">Animation</option>
        <option value="Social Media Marketing">Social Media Marketing</option>
        <option value="Web and App Design">Web and App Design</option>
        <option value="Graphic Design">Graphic Design</option>
        <option value="Video Editing">Video Editing</option>
        <option value="Video Games Development">Video Games Development</option>  
      </select>  
      <br>
      <button type="submit" class="registerbtn">Register</button>
      </div>          
    </form>  
</body>
</html>

修复后的Flask代码(Register.py)

from flask import Flask, render_template, request, redirect, url_for
import mysql.connector

app = Flask(__name__)

@app.route('/submit_form', methods=['POST'])
def submit_form():
    if request.method == 'POST':
        try:
            # 捕获表单字段缺失的异常
            firstname = request.form['firstname']
            lastname = request.form['lastname']
            email = request.form['email']
            course_name = request.form['course']

            # 连接数据库
            connection = mysql.connector.connect(host='localhost',
                                                database='solarAcademy',
                                                user='root',
                                                password='P@ssw0rdMySQL',
                                                ssl_disabled=True)
            cursor = connection.cursor()

            # 插入学生信息并立即提交,避免后续操作失败导致学生数据丢失
            cursor.execute("INSERT INTO students (name, lastname, email) VALUES (%s, %s, %s)", (firstname, lastname, email))
            student_id = cursor.lastrowid
            connection.commit()

            # 检查课程是否存在
            cursor.execute("SELECT course_id FROM courses WHERE course_name = %s", (course_name,))
            course_data = cursor.fetchone()

            if course_data:
                course_id = course_data[0]
                # 插入选课记录并提交
                cursor.execute("INSERT INTO registrations (student_id, course_id) VALUES (%s, %s)", (student_id, course_id))
                connection.commit()
                return redirect(url_for('thank_you'))
            else:
                return "Course not found."

        except KeyError as e:
            return f"Missing form field: {e}"
        except mysql.connector.Error as error:
            return f"Database Error: {error}"
        finally:
            if 'connection' in locals() and connection.is_connected():
                cursor.close()
                connection.close()

@app.route('/thank_you')
def thank_you():
    return render_template('thank-you.html')

if __name__ == '__main__':
    app.run(port=5000, debug=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:44:54