Создание 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 позволяет гибко изменять структуру.

Типичные ошибки:

Вариант 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 'Пользователь добавлен.';
}
?>
Имя:
Email:
После отправки формы данные вставляются в таблицу 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 упрощает работу с датами: сложение, вычитание, форматирование.

Пример страницы на PHP - comments

En
пример php страницы (php)