如何通过PHP将HTML表单变量传入MySQL数据库(同页实现)
同一页面实现HTML表单提交+PHP存入MySQL数据库
我看了你给出的代码片段,需求是在同一个页面搞定表单展示和MySQL数据入库对吧?那我帮你把代码补全、优化,还会解决原代码里的安全隐患——毕竟直接拼SQL语句很容易踩SQL注入的坑。
完整优化代码示例
<?php // 引入数据库连接文件 require('conn.php'); // 初始化操作提示信息 $message = ''; // 判断是否有表单提交请求 if (isset($_POST['send'])) { // 获取并清洗表单数据 $productName = trim($_POST["product_name"]); $stock = (int)$_POST["stock"]; // 强制转为整数,确保库存是数字类型 $price = (float)$_POST["price"]; // 强制转为浮点数,适配价格格式 // 前置数据验证,避免无效数据入库 if (!empty($productName) && $stock >= 0 && $price >= 0) { // 使用预处理语句,彻底防范SQL注入 $sql = "INSERT INTO product (Product_Name, Stock, Price) VALUES (?, ?, ?)"; $stmt = mysqli_prepare($conn, $sql); // 绑定参数:s=字符串、i=整数、d=浮点数 mysqli_stmt_bind_param($stmt, "sid", $productName, $stock, $price); // 执行插入操作 if (mysqli_stmt_execute($stmt)) { $message = "<span style='color:green;'>数据插入成功!</span>"; // 可选:清空表单,方便再次录入 $_POST = []; } else { $message = "<span style='color:red;'>插入失败:" . mysqli_error($conn) . "</span>"; } // 关闭预处理语句 mysqli_stmt_close($stmt); } else { $message = "<span style='color:red;'>请填写正确信息:产品名称不能为空,库存和价格不能为负数!</span>"; } } // 关闭数据库连接 mysqli_close($conn); ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>产品信息录入</title> </head> <body> <h2>产品信息录入表单</h2> <!-- 展示操作结果提示 --> <?php if (!empty($message)) echo "<p>$message</p>"; ?> <!-- 表单提交到当前页面 --> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <div> <label for="product_name">产品名称:</label> <input type="text" id="product_name" name="product_name" value="<?php echo isset($_POST['product_name']) ? htmlspecialchars($_POST['product_name']) : ''; ?>" required> </div> <div> <label for="stock">库存数量:</label> <input type="number" id="stock" name="stock" min="0" value="<?php echo isset($_POST['stock']) ? htmlspecialchars($_POST['stock']) : '0'; ?>" required> </div> <div> <label for="price">产品价格:</label> <input type="number" id="price" name="price" min="0" step="0.01" value="<?php echo isset($_POST['price']) ? htmlspecialchars($_POST['price']) : '0.00'; ?>" required> </div> <div> <button type="submit" name="send">提交信息</button> </div> </form> </body> </html>
关键优化点说明
- 安全防护:用MySQLi预处理语句替代直接拼接SQL,彻底避免SQL注入风险(原代码用
htmlspecialchars只能防XSS,对SQL注入防护有限)。 - 数据验证:入库前检查必填字段、强制转换数据类型,确保存入数据库的是有效数据。
- 用户体验:提交后展示明确的成功/失败提示,验证失败时保留用户已输入内容(并用
htmlspecialchars转义,防止XSS)。 - 同一页面处理:表单
action设为$_SERVER['PHP_SELF'],实现展示表单和处理提交在同一页面完成。
配套的数据库连接文件(conn.php)示例
确保你的conn.php正确配置数据库连接,避免中文乱码:
<?php $servername = "localhost"; // 数据库地址 $username = "你的数据库用户名"; $password = "你的数据库密码"; $dbname = "你的数据库名"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // 检查连接是否成功 if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); } // 设置字符集为utf8mb4,支持所有中文和特殊字符 mysqli_set_charset($conn, "utf8mb4"); ?>
内容的提问来源于stack exchange,提问作者masral
相关产品推荐
相关产品推荐

