Как сделать панель администратора для сайта на PHP

Как сделать панель администратора для сайта на PHP

от автора

в

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

Начало работы

Прежде чем мы начнем создавать панель администратора, необходимо подготовить рабочее окружение. Для этого нам потребуется:

  • Веб-сервер (например, Apache или Nginx)
  • PHP (версия 7.4 и выше)
  • MySQL или другой СУБД
  • Текстовый редактор (например, VSCode или Sublime Text)

Установка веб-сервера и PHP

Если у вас еще нет установленного веб-сервера и PHP, проще всего использовать пакеты, такие как XAMPP или MAMP, которые включают в себя все необходимое.

  1. Скачайте и установите XAMPP или MAMP с их официального сайта.
  2. Запустите сервер и убедитесь, что Apache и MySQL работают.

Настройка базы данных

Следующий шаг — создание базы данных для нашего проекта. В данном примере мы будем использовать MySQL.

  1. Откройте phpMyAdmin (он доступен через XAMPP или MAMP).
  2. Создайте новую базу данных, например admin_panel.
  3. Создайте таблицы для пользователей и контента.

Пример SQL-запросов для создания таблиц:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    role VARCHAR(50) NOT NULL
);

CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Разработка панели администратора

Теперь перейдем к созданию самой панели администратора. Мы будем использовать PHP для серверной логики и HTML/CSS для фронтенда.

Шаг 1: Аутентификация пользователя

Первое, что нам нужно сделать, — это реализовать систему аутентификации, чтобы только авторизованные пользователи могли получить доступ к панели администратора.

Регистрация пользователей

Создадим форму регистрации и обработчик для сохранения пользователей в базу данных.

register.php

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
    $role = 'admin'; // пока задаем роль вручную

    // Подключение к базе данных
    $conn = new mysqli('localhost', 'root', '', 'admin_panel');

    if ($conn->connect_error) {
        die('Connection failed: ' . $conn->connect_error);
    }

    $sql = "INSERT INTO users (username, password, role) VALUES ('$username', '$password', '$role')";

    if ($conn->query($sql) === TRUE) {
        echo "New user created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();
}
?>

HTML-форма для регистрации

<!DOCTYPE html>
<html>
<head>
    <title>Registration</title>
</head>
<body>
    <form method="post" action="register.php">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username"><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" value="Register">
    </form>
</body>
</html>

Логин пользователей

Теперь создадим форму входа и обработчик для проверки учетных данных.

login.php

<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $conn = new mysqli('localhost', 'root', '', 'admin_panel');

    if ($conn->connect_error) {
        die('Connection failed: ' . $conn->connect_error);
    }

    $sql = "SELECT * FROM users WHERE username='$username'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $user = $result->fetch_assoc();
        if (password_verify($password, $user['password'])) {
            $_SESSION['user'] = $user;
            header('Location: admin.php');
        } else {
            echo "Invalid password";
        }
    } else {
        echo "No user found";
    }

    $conn->close();
}
?>

HTML-форма для входа

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form method="post" action="login.php">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username"><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" value="Login">
    </form>
</body>
</html>

Шаг 2: Создание главной страницы панели администратора

Теперь, когда у нас есть возможность аутентифицировать пользователей, создадим главную страницу панели администратора.

admin.php

<?php
session_start();

if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}

$user = $_SESSION['user'];
?>

<!DOCTYPE html>
<html>
<head>
    <title>Admin Panel</title>
</head>
<body>
    <h1>Welcome to the Admin Panel, <?php echo $user['username']; ?>!</h1>
    <nav>
        <ul>
            <li><a href="create_post.php">Create Post</a></li>
            <li><a href="manage_posts.php">Manage Posts</a></li>
            <li><a href="logout.php">Logout</a></li>
        </ul>
    </nav>
</body>
</html>

Шаг 3: Управление контентом

Теперь добавим возможность добавления и управления постами.

Создание постов

create_post.php

<?php
session_start();

if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $title = $_POST['title'];
    $content = $_POST['content'];

    $conn = new mysqli('localhost', 'root', '', 'admin_panel');

    if ($conn->connect_error) {
        die('Connection failed: ' . $conn->connect_error);
    }

    $sql = "INSERT INTO posts (title, content) VALUES ('$title', '$content')";

    if ($conn->query($sql) === TRUE) {
        echo "New post created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Create Post</title>
</head>
<body>
    <h1>Create a New Post</h1>
    <form method="post" action="create_post.php">
        <label for="title">Title:</label>
        <input type="text" id="title" name="title"><br><br>
        <label for="content">Content:</label>
        <textarea id="content" name="content"></textarea><br><br>
        <input type="submit" value="Create Post">
    </form>
</body>
</html>

Управление постами

manage_posts.php

<?php
session_start();

if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}

$conn = new mysqli('localhost', 'root', '', 'admin_panel');

if ($conn->connect_error) {
    die('Connection failed: ' . $conn->connect_error);
}

$sql = "SELECT * FROM posts ORDER BY created_at DESC";
$result = $conn->query($sql);
?>

<!DOCTYPE html>
<html>
<head>
    <title>Manage Posts</title>
</head>
<body>
    <h1>Manage Posts</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>Title</th>
            <th>Content</th>
            <th>Created At</th>
            <th>Actions</th>
        </tr>
        <?php
        if ($result->num_rows > 0) {
            while($post = $result->fetch_assoc()) {
                echo "<tr>";
                echo "<td>" . $post['id'] . "</td>";
                echo "<td>" . $post['title'] . "</td>";
                echo "<td>" . $post['content'] . "</td>";
                echo "<td>" . $post['created_at'] . "</td>";
                echo "<td>";
                echo "<a href='edit_post.php?id=" . $post['id'] . "'>Edit</a> | ";
                echo "<a href='delete_post.php?id=" . $post['id'] . "' onclick='return confirm(\"Are you sure?\")'>Delete</a>";
                echo "</td>";
                echo "</tr>";
            }
        } else {
            echo "<tr><td colspan='5'>No posts found</td></tr>";
        }
        $conn->close();
        ?>
    </table>
</body>
</html>

Шаг 4: Редактирование и удаление постов

Редактирование постов

edit_post.php

<?php
session_start();

if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}

$conn = new mysqli('localhost', 'root', '', 'admin_panel');

if ($conn->connect_error) {
    die('Connection failed: ' . $conn->connect_error);
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $id = $_POST['id'];
    $title = $_POST['title'];
    $content = $_POST['content'];

    $sql = "UPDATE posts SET title='$title', content='$content' WHERE id=$id";

    if ($conn->query($sql) === TRUE) {
        header('Location: manage_posts.php');
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();
} else {
    $id = $_GET['id'];
    $sql = "SELECT * FROM posts WHERE id=$id";
    $result = $conn->query($sql);
    $post = $result->fetch_assoc();
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Edit Post</title>
</head>
<body>
    <h1>Edit Post</h1>
    <form method="post" action="edit_post.php">
        <input type="hidden" name="id" value="<?php echo $post['id']; ?>">
        <label for="title">Title:</label>
        <input type="text" id="title" name="title" value="<?php echo $post['title']; ?>"><br><br>
        <label for="content">Content:</label>
        <textarea id="content" name="content"><?php echo $post['content']; ?></textarea><br><br>
        <input type="submit" value="Update Post">
    </form>
</body>
</html>

Удаление постов

delete_post.php

<?php
session_start();

if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}

$conn = new mysqli('localhost', 'root', '', 'admin_panel');

if ($conn->connect_error) {
    die('Connection failed: ' . $conn->connect_error);
}

$id = $_GET['id'];

$sql = "DELETE FROM posts WHERE id=$id";

if ($conn->query($sql) === TRUE) {
    header('Location: manage_posts.php');
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

Автор статьи:

Обновлено:

30.05.2024


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *