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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:39