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