Создание PHP страницы: примеры для начинающих
Основной подход: структура PHP страницы с разделением шаблонов
Наиболее эффективное решение для создания PHP страниц заключается в разделении логики и представления. Используется один входной файл (index.php), который подключает общие части: шапку (header.php), контент (content.php) и подвал (footer.php). Это упрощает поддержку и изменение дизайна.
Пример структуры файлов:
/project
index.php
header.php
footer.php
style.css
Php mysql пример (примеры кода php mysql)
Код header.php:
Мой сайт
Мой сайт
пример php страницы (пример страницы на php)
Код footer.php:
коды php скрипты (примеры кода php)
Код index.php:
<?
$title = 'Главная страница';
$content = 'Добро пожаловать на мой сайт!';
include 'header.php';
echo '' . htmlspecialchars($title) . '
';
echo '' . htmlspecialchars($content) . '
';
include 'footer.php';
?>
задание php (задания по php)
Пояснения: переменные $title и $content задаются до подключения header.php. Функция htmlspecialchars защищает от XSS-атак. Подключение файлов через include позволяет гибко изменять структуру.
Типичные ошибки:
- Ошибка 'include failed': неверный путь к файлу - используйте абсолютный или относительный путь от корня документа.
- Пустой вывод при коротком теге PHP (<?=), если опция short_open_tag отключена - используйте полный тег <? echo ... ;?>.
- Утечка данных при отсутствии htmlspecialchars - всегда экранируйте пользовательский вывод.
Вариант 1: Простой вывод текста без HTML шаблона
Вопрос: Как вывести текст на PHP без использования HTML?
Самый простой способ - использовать конструкцию echo или print. Однако такой подход не подходит для полноценных страниц.
<?
echo 'Привет, мир!';
?>
Результат: на странице отобразится только строка 'Привет, мир!'. Проблема: нет структуры HTML, невозможно подключить CSS/JS.
Распространенные ошибки: забывают точку с запятой; путают кавычки (двойные/одинарные) - разница только в интерполяции переменных.
Вариант 2: Обработка данных формы
Вопрос: Как обработать данные, отправленные из HTML формы?
Используйте суперглобальные массивы $_GET или $_POST в зависимости от метода отправки.
<?
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = htmlspecialchars($_POST['name'] ?? '');
echo 'Привет, ' . $name . '!';
}
?>
Пояснение: оператор ?? задает значение по умолчанию, если ключ отсутствует. Проверка REQUEST_METHOD предотвращает выполнение кода при GET-запросе.
Типичные ошибки: отсутствие проверки на существование ключа приводит к Notice; незащищенный вывод - уязвимость XSS; неправильное указание атрибута action.
Вариант 3: Подключение к базе данных MySQL и вывод данных
Вопрос: Как вывести список записей из базы данных на PHP?
Используйте расширение PDO или MySQLi. Пример с PDO:
<?
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$stmt = $pdo->query('SELECT id, name FROM users');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo 'ID: ' . htmlspecialchars($row['id']) . ' - ' . htmlspecialchars($row['name']) . '
';
}
} catch (PDOException $e) {
echo 'Ошибка подключения: ' . $e->getMessage();
}
?>
Пояснение: PDO предлагает единый интерфейс для разных СУБД. FETCH_ASSOC возвращает ассоциативный массив.
Проблемы: некорректные параметры подключения - ошибка 'Connection refused'; отсутствие обработки исключений приводит к фатальной ошибке; использование устаревшего mysql_*.
Вариант 4: Использование сессий для авторизации
Вопрос: Как сохранить данные пользователя между страницами?
Сессии позволяют хранить информацию на сервере. Пример установки и чтения сессии:
<?
session_start();
// Установка
$_SESSION['username'] = 'admin';
// Чтение
echo 'Привет, ' . htmlspecialchars($_SESSION['username'] ?? 'гость');
?>
Страница должна вызывать session_start() до любого вывода.
Ошибки: вызов session_start() после вывода HTML - заголовки уже отправлены; незакрытая сессия приводит к блокировкам; хранение конфиденциальных данных без шифрования.
Вариант 5: Возврат JSON ответа (API)
Вопрос: Как вернуть данные в формате JSON из PHP?
Установите правильный заголовок Content-Type и используйте json_encode.
<?
header('Content-Type: application/json; charset=utf-8');
$data = ['status' => 'success', 'message' => 'Hello World'];
echo json_encode($data, JSON_UNESCAPED_UNICODE);
?>
Пояснение: JSON_UNESCAPED_UNICODE сохраняет русские символы, а не кодирует их.
Типичные ошибки: вывод до header() - заголовки не сработают; отсутствие проверки типа данных - json_encode вернет false; неверная кодировка.
Расширенные примеры PHP страниц
Пример 1: Постраничная навигация (пагинация)
Задача: вывести список записей из БД с разбивкой на страницы.
<?
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$page = max(1, (int)($_GET['page'] ?? 1));
$perPage = 5;
$offset = ($page - 1) * $perPage;
$totalStmt = $pdo->query('SELECT COUNT(*) FROM articles');
$total = $totalStmt->fetchColumn();
$totalPages = ceil($total / $perPage);
$stmt = $pdo->prepare('SELECT id, title FROM articles LIMIT :limit OFFSET :offset');
$stmt->bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($articles as $article) {
echo '' . htmlspecialchars($article['title']) . '
';
}
// Ссылки пагинации
for ($i = 1; $i <= $totalPages; $i++) {
$active = ($i === $page) ? ' class="active"' : '';
echo '' . $i . ' ';
}
?>
Вывод: список названий статей с номерами страниц внизу. Активная страница выделена.
Пояснение: используется LIMIT и OFFSET для выборки. Количество страниц вычисляется делением общего количества записей на количество на страницу.
Пример 2: Загрузка файлов на сервер
Задача: загрузить изображение, проверив тип и размер.
<?
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$allowedTypes = ['image/jpeg', 'image/png'];
$maxSize = 2 * 1024 * 1024; // 2 MB
$file = $_FILES['file'];
if ($file['error'] !== UPLOAD_ERR_OK) {
echo 'Ошибка загрузки.';
} elseif (!in_array($file['type'], $allowedTypes)) {
echo 'Недопустимый тип файла.';
} elseif ($file['size'] > $maxSize) {
echo 'Файл слишком большой.';
} else {
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
$newName = uniqid() . '.' . $ext;
move_uploaded_file($file['tmp_name'], 'uploads/' . $newName);
echo 'Файл загружен: ' . htmlspecialchars($newName);
}
}
?>
Результат: при успешной загрузке файл сохраняется в папку uploads с уникальным именем. Выводится сообщение об успехе или ошибке.
Пояснения: $_FILES содержит информацию о загруженном файле. move_uploaded_file перемещает временный файл. Важно проверять error, MIME-тип и размер.
Пример 3: Простое REST API с маршрутизацией
Задача: создать эндпоинт, возвращающий список пользователей в JSON.
<?
header('Content-Type: application/json; charset=utf-8');
$method = $_SERVER['REQUEST_METHOD'];
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($method === 'GET' && $path === '/api/users') {
$users = [
['id' => 1, 'name' => 'Иван'],
['id' => 2, 'name' => 'Мария']
];
echo json_encode($users, JSON_UNESCAPED_UNICODE);
} else {
http_response_code(404);
echo json_encode(['error' => 'Not Found']);
}
?>
При GET-запросе к /api/users возвращается JSON-массив пользователей. При других маршрутах - 404.
Пояснение: используется parse_url для извлечения пути. Метод запроса проверяется для корректной маршрутизации.
Пример 4: Использование PDO с prepared statements (без SQL-инъекций)
Задача: вставить данные из формы в базу безопасно.
<?
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
$stmt->execute([
':name' => $_POST['name'],
':email' => $_POST['email']
]);
echo 'Пользователь добавлен.';
}
?>
После отправки формы данные вставляются в таблицу users. Значения экранируются автоматически.
Пояснение: подготовленные запросы предотвращают SQL-инъекции. Местоимения :name связываются с реальными значениями.
Пример 5: Отправка email через функцию mail()
Задача: отправить письмо с формы обратной связи.
<?
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$to = 'admin@example.com';
$subject = 'Новое сообщение';
$message = 'Имя: ' . $_POST['name'] . chr(10) . 'Email: ' . $_POST['email'] . chr(10) . 'Сообщение: ' . $_POST['msg'];
$headers = 'From: no-reply@example.com' . chr(13).chr(10) . 'Reply-To: ' . $_POST['email'];
if (mail($to, $subject, $message, $headers)) {
echo 'Письмо отправлено.';
} else {
echo 'Ошибка отправки.';
}
}
?>
При успешной отправке выводится сообщение 'Письмо отправлено'. В противном случае выводится ошибка.
Пояснение: заголовок Reply-To позволяет ответить отправителю. Функция mail() требует настроенного SMTP-сервера.
Пример 6: Работа с Composer и библиотекой Carbon для работы с датами
Задача: использовать сторонний пакет для форматирования даты.
<?
require 'vendor/autoload.php';
use Carbon\Carbon;
$date = Carbon::now();
echo 'Текущая дата: ' . $date->format('d.m.Y');
echo '
Вчера: ' . $date->subDay()->format('d.m.Y');
?>
Вывод: Текущая дата: 14.04.2025 Вчера: 13.04.2025
Пояснение: Composer управляет зависимостями. Carbon упрощает работу с датами: сложение, вычитание, форматирование.