PHP 作為服務端語言無法直接彈窗,需輸出 JavaScript 代碼由瀏覽器執行。本文介紹兩種常用模式:簡單提示、提示後跳轉,並給出安全封裝函數。
function alert(string $msg): void {
// 過濾單引號防止 XSS
$msg = addslashes($msg);
echo "<script>alert('{$msg}');</script>";
}
// 使用
alert('操作成功!');
function alert_redirect(string $msg, string $url): void {
$msg = addslashes($msg);
$url = addslashes($url);
echo "<script>alert('{$msg}'); location.href='{$url}';</script>";
}
// 使用
alert_redirect('登入成功', '/dashboard.php');
class Msg {
public static function show(string $msg, string $type = 'info', ?string $redirect = null): void {
// 類型映射圖標/顏色(需前端配合)
$icons = ['success' => '✅', 'error' => '❌', 'warning' => '⚠️', 'info' => 'ℹ️'];
$icon = $icons[$type] ?? $icons['info'];
$msg = htmlspecialchars($msg, ENT_QUOTES, 'UTF-8');
$js = "alert('{$icon} {$msg}');";
if ($redirect) {
$redirect = htmlspecialchars($redirect, ENT_QUOTES, 'UTF-8');
$js .= "location.href='{$redirect}';";
}
echo "<script>{$js}</script>";
}
// AJAX 回調專用:返回 JSON
public static function json(string $msg, bool $success = true, ?string $redirect = null): void {
header('Content-Type: application/json');
echo json_encode([
'success' => $success,
'message' => $msg,
'redirect' => $redirect
]);
exit;
}
}
// 使用
Msg::show('保存成功', 'success', '/list.php');
Msg::json('權限不足', false);
原生 alert() 阻塞頁面、樣式不可控、移動端體驗差。建議:
<!-- 佈局頁引入 -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
window.showMsg = (msg, type='info', redirect=null) => {
Swal.fire({icon: type, title: msg, timer: 2000, showConfirmButton: false})
.then(() => { if (redirect) location.href = redirect; });
};
</script>
<!-- PHP 輸出 -->
<script>showMsg('操作成功', 'success', '/list.php');</script>
addslashes() 或 json_encode() 轉義;$_GET['msg'],防止 XSS;display_errors,避免錯誤信息洩露被注入彈窗。雖然 alert() 簡單粗暴,但現代 Web 應用建議採用非阻塞、可定制的前端彈窗組件。