PHP提交结账订单时无法向MariaDB存储timestamp数据问题求助
问题排查及修复方案
核心问题
你提交按钮没有添加name="submit"属性,导致PHP代码中isset($_POST['submit'])判断永远为假,全部业务逻辑都不会触发,所以页面空白且没有数据写入数据库。
其他隐性问题
session_start()必须放在PHP代码最顶部,要在任何输出(包括空格、换行、include文件的前置输出)之前执行,否则会触发header已发送警告,导致跳转逻辑失效- 执行
header()跳转后没有加exit()终止代码执行,可能引发后续异常 - 没有添加SQL执行错误判断,遇到问题无法快速定位
- 按钮的
class属性重复定义了3次,属于不规范写法
修复后代码
前端表单代码
<form action="createOrder.php" method="POST"> <button class="btn btn-danger filled-button payBtn" type="submit" name="submit">Checkout</button> </form>
createOrder.php 业务代码
<?php // session_start必须放在代码最顶部,前面不能有任何输出内容 session_start(); include 'db.php'; if (isset($_POST['submit'])) { if (isset($_SESSION['email'], $_SESSION['id'])) { $userID = $_SESSION['id']; $timestamp = date('Y-m-d H:i:s'); $sql = "INSERT INTO orders_id (userID,date) VALUES (?,?);"; $stmt = mysqli_stmt_init($conn); if (mysqli_stmt_prepare($stmt, $sql)) { mysqli_stmt_bind_param($stmt, "is", $userID, $timestamp); mysqli_stmt_execute($stmt); header('Location:index.php'); exit(); } else { // 开发阶段可输出错误排查,上线后可替换为错误提示跳转 echo "SQL执行错误:" . mysqli_error($conn); exit(); } } else { header('Location:login.php'); exit(); } } else { // 处理直接访问createOrder.php的非法请求 header('Location:cart.php'); exit(); } ?>
内容的提问来源于stack exchange,提问作者Ameen Assadi
相关产品推荐
相关产品推荐

