Toast消息不显示及Undefined数组键报错求助
问题分析与修复方案
核心问题拆解
1. Toast消息不显示的原因
- 变量销毁顺序错误:page2.php中先销毁了
$_SESSION['success_message'],后续又尝试引用这个已不存在的变量,导致Toast标题为空 - JS语法错误:Swal回调函数多了一个多余的
});,直接导致脚本执行失败 - 依赖资源缺失:page2.php未引入SweetAlert2的CSS和JS文件,即便脚本逻辑正确也无法渲染弹窗
2. Undefined array key警告的原因
page2.php第17行在销毁$_SESSION['success_message']后,又去拼接该变量,此时session键已不存在,触发警告
修复步骤与代码示例
1. 修复page2.php核心问题
调整session变量读取顺序,修正JS语法,同时补充SweetAlert2资源:
<?php session_start(); include "config.php"; $successMsg = ''; // 先读取session值,再销毁会话变量 if (isset($_SESSION['success_message']) && isset($_SESSION['redirect_token'])) { $successMsg = $_SESSION['success_message']; unset($_SESSION['success_message']); unset($_SESSION['redirect_token']); echo "<script> Swal.fire({ position: 'top-end', toast: true, icon: 'success', title: '$successMsg', text: 'Berjaya!', showConfirmButton: false, timer: 3000, timerProgressBar: true, backgroundColor: '#28a745', titleColor: '#fff', }) .then((result) => { // 可按需添加回调逻辑,无需多余闭合符 }); </script>"; } // 后续查询代码保持不变 $result = $conn->query("SELECT * FROM institusi"); $result2 = $conn->query("SELECT * FROM institusi"); $result3 = $conn->query("SELECT * FROM jawatan"); $result4 = $conn->query("SELECT * FROM jawatan"); $result5 = $conn->query("SELECT * FROM kategoripelajaran"); $id_pensyarah = mysqli_real_escape_string($conn, $_SESSION['id_pensyarah']); $result6 = $conn->query("SELECT * FROM pensyarah WHERE id_pensyarah = '$id_pensyarah'"); ?> <!-- 在page2.php的HTML头部添加SweetAlert2资源 --> <html> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.6.5/dist/sweetalert2.min.css"> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.6.5/dist/sweetalert2.min.js"></script> </html>
2. 优化page1.php重定向逻辑
将冗余的重定向路径修正,并添加脚本终止语句:
// 替换原有重定向代码 if ($execute1) { $_SESSION['success_message'] = "Tambah Data Kelayakan Akademik dan Ikhtisas"; $_SESSION['redirect_token'] = uniqid(); header('Location: ../kemahiran.php'); exit; // 重定向后必须终止脚本,避免输出干扰 }
注意:确保page1.php的PHP代码在任何HTML输出之前执行,否则重定向会失效
3. 安全加固建议(可选)
当前代码存在SQL注入风险,建议使用预处理语句替代直接拼接SQL:
// 示例:用预处理语句插入akademik数据 $sql1 = "INSERT INTO akademik (tahun, pencapaian, id_pensyarah, id_institusi) VALUES (?, ?, ?, ?)"; $stmt = mysqli_prepare($conn, $sql1); mysqli_stmt_bind_param($stmt, "ssii", $tahun, $pencapaian, $idpensyarah, $id_institusi); $execute1 = mysqli_stmt_execute($stmt);
内容的提问来源于stack exchange,提问作者Efannnnnn
相关产品推荐
相关产品推荐

