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

提交PHP表单返回空白页且myexpense表无新增数据如何解决?

问题原因

  • switch分支中错误使用return语句:return会直接终止当前PHP脚本执行,赋值cat_id后直接退出,后续的SQL插入逻辑完全不会运行,这是提交后得到空白页、无数据入库的核心原因。
  • switch分支覆盖不全:仅处理了Car、Gifts、Groceries三类,剩下的住房、药品、出行、其他四个分类没有对应的case,选择这几类时cat_id会是空字符串,如果数据库myexpense表的cat_id字段设置为非空,会直接触发SQL执行失败。
  • 报错信息未输出:你将执行错误存储在$message变量中,但没有写输出逻辑,出错时页面自然是空白状态,看不到具体报错。
  • 存在SQL注入风险:直接拼接用户提交的参数到SQL语句中,容易被恶意注入攻击,建议改用预处理语句。

修正后的PHP代码

<?php
session_start();

if(isset($_SESSION['id']) && isset($_SESSION['username'])) {
    include "db.php";

    if (isset($_POST["submit"])) {
        $amount = $_POST["amount"];
        $date = $_POST["date"];
        $category = $_POST["category"];      

        $cat_id = "";
        switch($category) {
            case "Car":
                $cat_id = 1;
                break;
            case "Gifts":
                $cat_id = 2;
                break;
            case "Groceries":
                $cat_id = 3;
                break;
            case "House":
                $cat_id = 4;
                break;
            case "Medicine":
                $cat_id = 5;
                break;
            case "Travel":
                $cat_id = 6;
                break;
            case "Other":
                $cat_id = 7;
                break;
        }
    
        // 改用预处理语句避免SQL注入
        $stmt = $conn->prepare("INSERT INTO myexpense (amount, date, id, cat_id) VALUES (?, ?, ?, ?)");
        $stmt->bind_param("dsii", $amount, $date, $_SESSION['id'], $cat_id);
        
        if ($stmt->execute() === TRUE) {
            header("location: newexpensesuccess.php");
            exit();
        }else {
            // 调试阶段可以输出报错,上线后可替换为用户友好提示
            echo "Error: " . $stmt->error;
        }
        $stmt->close();
        $conn->close();
    }
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:15:00