Сделать страницу доступной для просмотра только при входе в систему

Мне нужна помощь в том, чтобы сделать мою панель управления доступной только тогда, когда администратор вошел в систему.

Здравствуйте!.. Я создаю школьный сайт, чтобы улучшить свои навыки работы с 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();
?>

Спасибо заранее! :)

В Интернете можно найти множество примеров систем входа в систему, которые вы можете использовать. На самом деле это не тема для новичков, поскольку очень легко ошибиться. Но в основном после того, как пользователь успешно вошел в систему, вам необходимо сохранить его имя пользователя в сеансе php. Затем преобразуйте страницу панели мониторинга в файл .php и поместите вверху блок сценария php, который проверяет, существует ли это значение сеанса. Если этого не произойдет, вы можете выдать ошибку или перенаправить их обратно на страницу входа.

ADyson 08.06.2024 09:12

Кроме того, я не уверен, учились ли вы у своих учителей или просто случайным вещам в Интернете, но это не то, как вы составляете SQL-запрос с помощью PHP, когда он включает пользовательский ввод. Он уязвим к сбою из-за символов ' во входных данных - если бы мое имя было O'Reilly, например, и я вставил это в свое имя пользователя, ваш запрос аварийно завершился бы, потому что SQL получил бы SELECT * FROM users WHERE username='JimO'Reilly' и, конечно, тогда он думает, что значение имени пользователя заканчивается на O', а затем следующий бит он не может понять, потому что Reilly не является командой SQL!

ADyson 08.06.2024 09:18

И, наконец, опять же, из соображений безопасности вы не должны хранить пароли в открытом виде в базе данных, поскольку их легко могут украсть хакеры - вместо этого вам нужно хешировать пароль при регистрации и проверять хеш при входе в систему. Это означает, что пароль хранится в формате, который никто не сможет расшифровать. Видите, почему я сказал, что системы входа в систему на самом деле не тема для новичков!? Существует множество готовых систем входа в систему, которые вы можете использовать и просто подключить к своему сайту. Вы можете изучить основы PHP многими другими способами.

ADyson 08.06.2024 09:23

есть идеи, как создавать и хранить значения сеанса?

THVND3R 08.06.2024 09:35

В основном так же, как и любая другая переменная. В любом случае вы можете легко это погуглить, но вот один пример: stackoverflow.com/a/31792235/5947043

ADyson 08.06.2024 09:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На страницах 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() в каждом файле, к которому вы пытаетесь получить доступ, и проверить наличие входных данных или любых других данных, связанных с сеансом.

где мне нужно ввести этот код?

THVND3R 09.06.2024 10:46

Другие вопросы по теме