提交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
相关产品推荐
相关产品推荐

