Мне нужна помощь в том, чтобы сделать мою панель управления доступной только тогда, когда администратор вошел в систему.
Здравствуйте!.. Я создаю школьный сайт, чтобы улучшить свои навыки работы с HTML. Я создал домашнюю страницу о нас и обо всем, что будет на обычном школьном сайте. Я также создал страницу входа администратора и сохранил ее в папке (/admin). когда администратор вводит правильное имя пользователя и пароль, он будет перенаправлен на (/admin/dashboard). но проблема в том, что я все еще могу получить доступ к панели управления без входа в систему, посетив (/admin/dashboard). Как мне сделать панель управления доступной только при входе в систему? (кстати, я использую XAMPP Apache Server и phpMyAdmin)
HTML-код моей страницы входа (в случае необходимости):
<!DOCTYPE html>
<html>
<head>
<title>Admin - Sri Swarna Vidhyashram</title>
<link rel = "stylesheet" href = "css/style.css">
<link rel = "icon" type = "image/x-icon" href = "../assets/images/logo.png">
</head>
<body>
<div class = "main">
<img src = "../assets/images/ssv.png" height = "110"><br>
<form action = "login.php" method = "POST">
<label for = "username">Username:</label>
<input type = "text"
id = "username"
name = "username"
placeholder = "Enter your Username" required>
<label for = "password">Password:</label>
<input type = "password"
id = "password"
name = "password"
placeholder = "Enter your Password" required>
<div class = "wrap">
<button type = "submit">Submit</button>
</div>
</form>
</div>
</body>
</html>
И PHP-скрипт:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Database connection
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "login";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully"; // Debugging message
// Retrieve username and password from the form
$username = $_POST['username'];
$password = $_POST['password'];
echo "Username: " . $username . "<br>"; // Debugging message
echo "Password: " . $password . "<br>"; // Debugging message
// Query to check if the provided credentials are correct
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// If the user exists, display welcome message
header("Location:dashboard.html");
} else {
// If the user doesn't exist or the password is incorrect, show error message
header("Location:error.html");
}
$conn->close();
?>
Спасибо заранее! :)
Кроме того, я не уверен, учились ли вы у своих учителей или просто случайным вещам в Интернете, но это не то, как вы составляете SQL-запрос с помощью PHP, когда он включает пользовательский ввод. Он уязвим к сбою из-за символов ' во входных данных - если бы мое имя было O'Reilly, например, и я вставил это в свое имя пользователя, ваш запрос аварийно завершился бы, потому что SQL получил бы SELECT * FROM users WHERE username='JimO'Reilly' и, конечно, тогда он думает, что значение имени пользователя заканчивается на O', а затем следующий бит он не может понять, потому что Reilly не является командой SQL!
И, наконец, опять же, из соображений безопасности вы не должны хранить пароли в открытом виде в базе данных, поскольку их легко могут украсть хакеры - вместо этого вам нужно хешировать пароль при регистрации и проверять хеш при входе в систему. Это означает, что пароль хранится в формате, который никто не сможет расшифровать. Видите, почему я сказал, что системы входа в систему на самом деле не тема для новичков!? Существует множество готовых систем входа в систему, которые вы можете использовать и просто подключить к своему сайту. Вы можете изучить основы PHP многими другими способами.
есть идеи, как создавать и хранить значения сеанса?
В основном так же, как и любая другая переменная. В любом случае вы можете легко это погуглить, но вот один пример: stackoverflow.com/a/31792235/5947043






На страницах HTML вы не можете ограничивать пользователей. Вы всегда можете получить доступ к HTML-файлам и их содержимому. Вместо этого вам следует использовать Dashboard.php, а затем выполнять проверки внутри этого файла, например проверки сеанса. Вам следует создать файл, который поможет вам проверить введенные данные в форме. Если пользователь существует, вы устанавливаете сеанс для входа в систему и выполняете проверку с его помощью.
if ((isset($_SESSION['loggedin']) && $_SESSION['loggedin'])) { } else {}
В приведенном выше коде он будет входить в систему независимо от вашего имени пользователя или пароля, если в базе данных есть запись об этом. Вместо этого вам следует использовать оператор равенства, чтобы проверить, совпадают ли имя пользователя и пароль с введенными, а затем установить сеанс для этого конкретного пользователя.
if ($user && $password == $user['pass']) {
//If login is correct, set session, email and redirect user
$_SESSION['loggedin'] = true;
$_SESSION['email'] = $email;
$_SESSION['first_name'] = $user['first_name'];
$_SESSION['last_name'] = $user['last_name'];
$_SESSION['user_id'] = $user['user_id'];
header("Location: ../login.php?success=true");
exit;
}
Не забудьте использовать start_session() в каждом файле, к которому вы пытаетесь получить доступ, и проверить наличие входных данных или любых других данных, связанных с сеансом.
где мне нужно ввести этот код?
В Интернете можно найти множество примеров систем входа в систему, которые вы можете использовать. На самом деле это не тема для новичков, поскольку очень легко ошибиться. Но в основном после того, как пользователь успешно вошел в систему, вам необходимо сохранить его имя пользователя в сеансе php. Затем преобразуйте страницу панели мониторинга в файл .php и поместите вверху блок сценария php, который проверяет, существует ли это значение сеанса. Если этого не произойдет, вы можете выдать ошибку или перенаправить их обратно на страницу входа.