2015-04-23 129 views
3

我想,當用戶註銷時,顯示彈出消息,所以我用PHP的回聲JavaScript的alert()不工作

echo "<script>alert(\"You are logged out\");</script>"; 

但它不工作。

以下是我的編碼。我的編碼有沒有邏輯問題?

<?php 
session_start(); 
if(isset($_SESSION['Username']) == "admin") 
{ 
?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<style type="text/css"> 
@import "../CSS/Style.css"; 
@import "../CSS/Admin.css"; 
</style> 
<title>Admin Home Page</title> 
</head> 

<body> 
<div class="body"></div> 
<?php 
    if(isset($_GET['id']) == "logout") 
    { 
     session_destroy(); 
     echo "<script>alert(\"You are logged out\");</script>"; 
     header("Location: ..\Main.php"); 
    } 
    else 
    { 
?> 
<div class="menu"> 
    <a href="ManageStaff.php">Manage Staff</a> 
</div> 

<div class="menu2"> 
    <a href="ManageAccount.php">Manage Account</a> 
</div> 

<div class="logout"> 
    <a href="AdminHomePage.php?id=logout">Logout</a> 
</div> 
<?php 
    } 
} 
else 
{ 
?> 
<center> 
<p style="font-size:50px; font-weight:bold">Access Denied</p> 
<p style="font-size:18px">Your request for this page has been denied because of access control</p> 
</center> 
<?php 
} 
?> 
</body> 
</html> 

會話將被銷燬,也將重定向到Main.php,只是alert()不會出來。

+0

首先,你沒有使用'isset()函數'正確[文件](HTTPS ://php.net/manual/en/function.isset.php)]。其次,在發送輸出後你不能使用'header()'。同樣,這在php文檔中明確說明:https://php.net/manual/en/function.header.php。最後,假設你可以,你如何期望你的代碼工作?你不能混用PHP和Javascript;如果你使用PHP來重定向用戶,這將發生在任何事發送給用戶之前,因此JavaScript警報永遠不會觸發。你真的需要多考慮一下你的解決方案。 –

+0

'isset'只會返回'true'或'false'。 –

回答

7

你正在做一個回聲,然後寫一個relocate頭。如果你在javascript中進行了重定位(在用戶點擊警報之後),它可能會按照你期望的方式工作。

echo "<script>alert('You are logged out'); window.location.href='..\Main.php';</script>"; 

此外,您使用isset會導致問題,因爲isset返回TRUE或FALSE(它會檢查是否存在值),而不是返回值的方式。

所以不是

if(isset($_SESSION['Username']) == "admin") 

你需要做的:

if(isset($_SESSION['Username']) && $_SESSION['Username'] == "admin") 
+0

這是真的;他確實詢問在我的編碼中是否存在任何邏輯問題,並且他濫用isset會導致他的邏輯發生故障。我回答了他的實際問題,這似乎是爲什麼他的警報不可見,答案是他的重定向導致它永遠不會被瀏覽器處理。 –

+0

我想你會發現實際的原因是濫用isset導致整個頁面總是通知你存在訪問衝突。另外,輸出後的標題調用也會導致錯誤,因爲標題已經被該點發送。 –

0

嘗試, 這個必須工作, 並刪除php頭,用下面的代碼替換。

echo "<script>alert('You are logged out'); 
location.href='..\Main.php'; 
</script>"; 
2

header("Location: ..\Main.php");告訴瀏覽器到另一個網頁甚至顯示頁面之前...如果你想用戶看到警報,試試這個:

session_destroy(); 
echo "<script>"; 
echo "alert('You are logged out');"; 
echo "window.location = '../Main.php';"; // redirect with javascript, after page loads 
echo "</script>"; 
2

使用它它會解決你的問題!首先從

if(isset($_SESSION['Username']) == "admin") 
{ 

改變你的代碼,以

if(!empty($_SESSION['Username']) && ($_SESSION['Username']=="admin")){ 

,比使用下面的代碼

if(!empty($_GET['id']) && ($_GET['id']=="logout")) 
     { 
      session_destroy();?> 
      <script> 
      alert("You are logged out"); 
      window.location.href='..\Main.php'; 
      </script> 
      <?php }?> 
+0

'isset'也被用於錯誤的第3行代碼 –

+0

@bob是的..我不只是更新 –