2015-04-23 130 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是的..我不只是更新 –