1PROMTAI.RU

Простое PHP-приложение с админ-панелью, шпаргалка

Создадим простое PHP-приложение с админ-панелью, аутентификацией пользователей и адаптивным дизайном с использованием CSS Grid. Ниже приведен полный код для приложения.

Структура проекта

/your_project/
│
├── /admin/
│   ├── index.php
│   ├── login.php
│   └── logout.php
│
├── /css/
│   └── styles.css
│
├── /config.php
├── /index.php
├── /news.php
└── /.htaccess

1. Конфигурация базы данных (config.php)
Создаем файл config.php для подключения к базе данных:

<?php
$host = 'localhost';
$db = 'your_database';
$user = 'your_username';
$pass = 'your_password';

$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>

2. Таблица пользователей
Создаём таблицу пользователей в нашей базе данных:

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

Добавим пользователя:

INSERT INTO users (username, password) VALUES ('admin', '\$2y\$10$eImiTXuWVxfA2l9y.1gZhe9qk0Vh0r3C9D3jHk7D1H8D5WQ4L6x5K');

3. .htaccess
Создаём файл .htaccess для настройки ЧПУ:

RewriteEngine On
RewriteRule ^news/([0-9]+)$ news.php?id=\$1 [L,QSA]

4. Главная страница (index.php)
Создаём файл index.php для отображения новостей:

<?php
include 'config.php';

$stmt = $pdo->query('SELECT * FROM news ORDER BY id DESC');
$news = $stmt->fetchAll();
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/styles.css">
    <title>Главная страница</title>
</head>
<body>
    <header>
        <h1>Новости</h1>
        <nav>
            <a href="admin/login.php">Вход в админку</a>
        </nav>
    </header>
    <main>
        <div class="grid-container">
            <?php foreach ($news as $row): ?>
                <div class="grid-item">
                    <a href="news/<?= $row['id'] ?>"><?= $row['title'] ?></a>
                </div>
            <?php endforeach; ?>
        </div>
    </main>
</body>
</html>

5. Страница новостей (news.php)
Создаём файл news.php для отображения отдельной новости:

<?php
include 'config.php';

if (isset($_GET['id'])) {
    $stmt = $pdo->prepare('SELECT * FROM news WHERE id = ?');
    $stmt->execute([$_GET['id']]);
    $news = $stmt->fetch();
} else {
    header('Location: index.php');
    exit();
}
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/styles.css">
    <title><?= $news['title'] ?></title>
</head>
<body>
    <header>
        <h1><?= $news['title'] ?></h1>
        <nav>
            <a href="index.php">Назад к новостям</a>
        </nav>
    </header>
    <main>
        <article>
            <p><?= $news['content'] ?></p>
        </article>
    </main>
</body>
</html>

6. Админ-панель (admin/login.php)
Создаём файл admin/login.php для аутентификации:

<?php
session_start();
if (isset($_SESSION['user_id'])) {
    header('Location: index.php');
    exit();
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    include '../config.php';
    
    $username = $_POST['username'];
    $password = $_POST['password'];

    $stmt = $pdo->prepare('SELECT * FROM users WHERE username = ?');
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        header('Location: index.php');
        exit();
    } else {
        $error = 'Неверный логин или пароль';
    }
}
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="../css/styles.css">
    <title>Вход в админку</title>
</head>
<body>
    <h1>Вход в админку</h1>
    <?php if (isset($error)): ?>
        <p style="color:red;"><?= $error ?></p>
    <?php endif; ?>
    <form method="post">
        <input type="text" name="username" placeholder="Логин" required>
        <input type="password" name="password" placeholder="Пароль" required>
        <button type="submit">Войти</button>
    </form>
</body>
</html>

7. Защита админ-панели (admin/index.php)
Создайте файл admin/index.php для отображения админ-панели:

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

include '../config.php';
$stmt = $pdo->query('SELECT * FROM news ORDER BY id DESC');
$news = $stmt->fetchAll();
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="../css/styles.css">
    <title>Админ-панель</title>
</head>
<body>
    <header>
        <h1>Админ-панель</h1>
        <nav>
            <a href="logout.php">Выйти</a>
        </nav>
    </header>
    <main>
        <h2>Список новостей</h2>
        <div class="grid-container">
            <?php foreach ($news as $row): ?>
                <div class="grid-item">
                    <a href="edit.php?id=<?= $row['id'] ?>"><?= $row['title'] ?></a>
                </div>
            <?php endforeach; ?>
        </div>
    </main>
</body>
</html>

8. Выход из админ-панели (admin/logout.php)
Создаём файл admin/logout.php для выхода из админ-панели:

<?php
session_start();
session_destroy();
header('Location: login.php');
exit();
?>

9. Стили для страниц (css/styles.css)
Создаём файл styles.css для стилизации страниц с использованием CSS Grid:

* {
    box-sizing: border-box;
}

body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
}

header {
    background-color: #4CAF50;
    color: white;
    padding: 20px;
    text-align: center;
}

nav {
    margin: 20px 0;
}

nav a {
    color: white;
    text-decoration: none;
    margin: 0 15px;
}

.grid-container {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
    gap: 10px;
    padding: 20px;
}

.grid-item {
    background-color: #f4f4f4;
    padding: 20px;
    text-align: center;
    border: 1px solid #ddd;
}

.grid-item a {
    text-decoration: none;
    color: #333;
}

article {
    padding: 20px;
}

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

Вот несколько направлений, которые  можно рассмотреть для дальнейшего развития приложения:

Добавление функций CRUD: возможность добавления, редактирования и удаления новостей в админ-панели.

Управление пользователями: расширить функциональность админ-панели для управления пользователями (добавление, редактирование, удаление).

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

Комментарии: Реализовать систему комментариев к новостям, чтобы пользователи могли оставлять свои мнения.

Поиск: возможность поиска новостей по заголовку или содержимому.

Аутентификация и авторизация: возможность добавления ролей пользователей (например, администратор и редактор) с различными уровнями доступа.

Стилизация и UX: улучшить внешний вид и пользовательский интерфейс приложения с помощью более сложных стилей и взаимодействий.

Мобильная адаптация: убедиться, что приложение хорошо работает на мобильных устройствах.

Метки: , , , , , ,

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Вход

Календарь

Декабрь 2024
Пн Вт Ср Чт Пт Сб Вс
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Поиск по сайту

Рубрики

Рекламный блок