Успешный вход на мою страницу входа в систему должен направляться на домашнюю страницу (что он делает - я дважды проверил, чтобы увидеть, установлены ли переменные, и когда они вводят правильное имя пользователя/пароль). В противном случае страница входа должна быть закрытой.
LOGIN PHP (отлично работает)
<?php
session_start();
require_once("../inc_files/Lesson_5_DB_Connection.php");
error_reporting(E_ALL);
ini_set('display_errors', 1);
$error_message= "";
$user_name = "";
$user_password= "";
$_SESSION['username']="";
$_SESSION['employeeNumber']="";
if (isset($_POST['submit'])) {
$user_name = $_POST['user'];
$user_password= $_POST['pass'];
// ADD QUERY TO CHECK IF USER/PASS COMBO IS CORRECT
if(!empty($user_name) && !empty($user_password)) {
$query = "SELECT * FROM employees WHERE username='$user_name' and password='$user_password'";
$result = mysqli_query($dbc, $query)
or die ('Error querying username/password request');
if(mysqli_num_rows($result) == 1) {
while ($row = mysqli_fetch_array($result)) {
$_SESSION['username'] = $row['username'];
$_SESSION['employeeNumber'] = $row['employeeNumber'];
}
header("Location: /LESSON5/3%20-%20HOMEPAGE%20:%20WELCOME.php");
exit;
} // end if rows
else {
$error_message = "You were not able to log in";
} // end else
// Direct to other webpage
} // end query
} // end isset
?>
Домашняя страница должна отображаться только в том случае, если установлены переменные $ _SESSION. Если пользователь не зарегистрирован (переменные сеанса не установлены), то домашняя страница должна перенаправляться на страницу входа. Теперь я добавил проверку, чтобы проверить, не установлены ли переменные (! Isset). Эта проверка не позволяет странице показывать какой-либо контент. Когда я удаляю эту проверку, HTML отображается нормально. Когда я удаляю проверку и эхо значения переменных, я получаю возвращаемые значения.
Это просто if(!isset($_SESSION['username']) && !isset($_SESSION['employeeNumber'])
не отображая никакого содержимого на странице.
ГЛАВНАЯ
<?php
session_start();
require_once("../inc_files/Lesson_5_DB_Connection.php");
if(!isset($_SESSION['username']) && !isset($_SESSION['employeeNumber']) {
header("Location: /LESSON5/1%20-%20LOGIN.php");
}
?>
<!DOCTYPE html>
<head>
<title></title>
<meta charset="utf-8">
<link type="text/css" rel="stylesheet" href="/LESSON5/5_Signup_CSS.css">
</head>
<body>
<p><span id="logout"><a href="/LESSON5/4%20-%20LOGOUT%20PAGE.PHP">Logout</a></span></p>
<hr>
<h1>Welcome to my homepage! <br> You have successfully logged in.</h1>
<?php
mysqli_close($dbc);
?>
</body>
</html>
Есть ли какая-то причина, почему эта проверка не позволяет PHP показывать HTML (если вход пользователя правильный) или перенаправить страницу (если пользователь не вошел в систему)?
В основном ошибка в вашем состоянии php if
. Отсутствует одна скобка. измените вот так: -
if(!isset($_SESSION['username']) && !isset($_SESSION['employeeNumber']))
Примечание. - Попробуйте добавить error_reporing
в верхней части всех ваших php-страниц, чтобы вы могли получить php-ошибки, если это произойдет. проверьте руководство пользователя error_reporing
на сайте php. Благодарю.
Если вы работаете на локальном сервере, вы можете изменить настройки php.ini
для этого.
Вы можете узнать, как легко изменить настройки php.ini
в Google.
ini_set
- это функция php для этой цели, если вы хотите сделать это программно не напрямую с php.ini.
if(!isset($_SESSION['username']) && !isset($_SESSION['employeeNumber']))
.error_display
false). Добавьте «родительские» скобки к вашему условию:if( (condition A) && (condition B) )