2015-04-23 3 views
3

Я хотел бы, чтобы отобразить всплывающее сообщение, когда пользователь выходит из системы, поэтому я используюPHP эхо Javascript оповещения() не работает

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

Во-первых, вы не используете 'Исеть()' правильно [[Docs] (HTTPS : //php.net/manual/en/function.isset.php)]. Во-вторых, вы не можете использовать 'header()' после отправки вывода. Опять же, это четко указано в php docs: https://php.net/manual/en/function.header.php. Наконец, предположив, что вы можете, как вы ожидаете, что ваш код будет работать? Вы не можете смешивать PHP и Javascript; если вы используете php для перенаправления пользователя, это произойдет, прежде чем что-либо будет отправлено пользователю, поэтому предупреждение javascript никогда не будет срабатывать. Вам действительно нужно подумать о своем решении немного больше. –

+0

'isset' будет только когда-либо возвращать' true' или 'false'. –

ответ

7

Вы выполняете эхо, а затем записываете заголовок переезда. Если вы переместились в javascript (после того, как пользователь нажал предупреждение), он, вероятно, будет работать так, как вы ожидаете.

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

Кроме того, способ, которым вы пользуетесь isset может вызвать проблемы, потому что isset возвращается истинным или ложным (он проверяет, является ли значение присутствует), а не возвращать значение.

Таким образом, вместо

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 yeah .. i no just update –

Смежные вопросы