我的 Toast 消息有问题。而不是在我填写表单提交后立即弹出 toast,即使我不提交表单提交,toast 也会继续出现,即使我来自另一个页面,我单击到此页面,toast 仍然会出现。除此之外,当我在基于 bard a.i 的代码中取消设置后,吐司根本不出现。
<html>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.min.js"></script>
</html>
<?php
session_start();
include 'config.php';
if (isset($_SESSION['id_pensyarah'])) {
$idpensyarah = $_SESSION['id_pensyarah'];
if (isset($_POST['insertakademik'])) {
$tahun = $_POST['tahunakademik'];
$pencapaian = $_POST['pencapaianakademik'];
$id_institusi = $_POST['id_institusi'];
$institusi_baharu = $_POST['institusiakademikbaharu'];
if ($institusi_baharu == null) {
// Insert into akademik table directly using the selected id_institusi
$sql1 = "INSERT INTO akademik (tahun, pencapaian, id_pensyarah, id_institusi) VALUES ('$tahun', '$pencapaian', '$idpensyarah', '$id_institusi')";
$execute1 = mysqli_query($conn, $sql1);
if ($execute1) {
$_SESSION['success_message'] = "Tambah Data Kelayakan Akademik dan Ikhtisas";
$_SESSION['redirect_token'] = uniqid();
header('Location: .././page2.php');
} else {
echo 'Error execute1 data: ' . mysqli_error($conn);
}
} else {
// Insert the new institution into institusi table first
$sql2 = "INSERT INTO institusi (institusi) VALUES ('$institusi_baharu')";
$execute2 = mysqli_query($conn, $sql2);
if ($execute2) {
// Get the last inserted ID and insert into akademik table
$new_id_institusi = mysqli_insert_id($conn);
$sql3 = "INSERT INTO akademik (tahun, pencapaian, id_pensyarah, id_institusi) VALUES ('$tahun', '$pencapaian', '$idpensyarah', '$new_id_institusi')";
$execute3 = mysqli_query($conn, $sql3);
if ($execute3) {
$_SESSION['success_message'] = "Tambah Data Kelayakan Akademik dan Ikhtisas";
header('Location: .././page2.php');
} else {
echo 'Error execute3 data: ' . mysqli_error($conn);
}
} else {
echo 'Error execute2 data: ' . mysqli_error($conn);
}
}
}
}
?>
<!-- Toast Insert Data Successfully -->
<?php
if (isset($_SESSION['success_message']) && isset($_SESSION['redirect_token'])) {
echo "<script>
Swal.fire({
position: 'top-end',
toast: true,
icon: 'success',
title: '" . $_SESSION['success_message'] . "',
text: 'Berjaya!',
showConfirmButton: false,
timer: 3000,
timerProgressBar: true,
backgroundColor: '#28a745',
titleColor: '#fff',
})
.then((result) => {
// Clear the session variable after toast is dismissed (using AJAX)
$.ajax({
url: 'clear_session.php',
success: () => {
console.log('Session cleared successfully');
}
});
});
</script>";
}
?>
我希望在我从另一个页面提交表单后立即弹出 toast。提交表单后,表单将转到下一个位置,然后弹出 toast。我希望你们能尽快帮助我。谢谢。
您可以在输入 if 条件块后立即清除会话,而不是调用 ajax 来清除会话,例如使用以下内容
unset($_SESSION['success_message']);
unset($_SESSION['redirect_token']);
因此对于第 2 页,更改为
<?php
session_start();
if (isset($_SESSION['success_message']) && isset($_SESSION['redirect_token'])) {
unset($_SESSION['success_message']);
unset($_SESSION['redirect_token']);
echo "<script>
Swal.fire({
position: 'top-end',
toast: true,
icon: 'success',
title: '" . $_SESSION['success_message'] . "',
text: 'Berjaya!',
showConfirmButton: false,
timer: 3000,
timerProgressBar: true,
backgroundColor: '#28a745',
titleColor: '#fff',
})
.then((result) => {
});
</script>";
// rest of your code