Сайт в разработке Наполняем разделы и правим ошибки — что-то может выглядеть или работать не так. Если заметили — позвоните или напишите.

Гайд по PHP для начинающих

Гайд по PHP для начинающих: запуск локального сервера, переменные, массивы, функции, шаблоны, формы, проверка ввода и безопасный вывод в HTML.

PHP выполняется на сервере и формирует HTML до того, как страница попадёт в браузер. В гайде вы запустите локальный проект, научитесь обрабатывать форму и выводить данные без смешения пользовательского ввода с HTML.

Как пользоваться гайдом

Нужны базовые знания HTML, установленный PHP и терминал. Встроенный сервер PHP используйте только локально для обучения: он не предназначен для публичного размещения сайта.

1. Запускаем первую страницу

Создайте index.php в новой папке. Команда запускает встроенный сервер на вашем компьютере; откройте адрес http://localhost:8000/ в браузере. Если PHP не установлен, сначала настройте окружение по инструкции для вашей системы.

php -S localhost:8000
Практика

Добавьте в index.php строку и убедитесь, что текст появился в браузере.

2. Переменные, строки и числа

Имя переменной в PHP начинается со знака $. Точка соединяет строки. Число и строка — разные типы; не полагайтесь на неявное преобразование, когда считаете деньги или сравниваете значения.

<?php
$project = "Сайт компании";
$pages = 5;
echo $project . ": " . $pages . " страниц";
Практика

Создайте переменные для имени проекта и количества разделов, затем выведите предложение из них.

3. Условия и циклы

Условие if выбирает действие по результату проверки. Цикл foreach проходит по массиву. Сравнение === учитывает и значение, и тип.

<?php
$services = ["Разработка", "Дизайн", "Поддержка"];
foreach ($services as $service) {
    echo $service . "<br>";
}
Практика

Выведите список услуг в HTML как элементы

  • ; для собственных строк из кода достаточно простого вывода.

  • 4. Массивы и функции

    Ассоциативный массив хранит значения по именованным ключам. Функция принимает параметры и возвращает результат через return. Если ключ может отсутствовать, проверяйте его или используйте значение по умолчанию.

    <?php
    $service = ["name" => "Сайт", "price" => 100000];
    function formatPrice(int $value): string {
        return number_format($value, 0, ".", " ") . " ₽";
    }
    echo formatPrice($service["price"]);
    Практика

    Добавьте второй массив услуги и выведите обе цены с помощью одной функции.

    5. PHP внутри HTML-шаблона

    PHP может собирать данные до вывода страницы. В шаблоне оставляйте разметку читаемой, а длинные вычисления выполняйте до неё. Для текста из внешнего источника понадобится экранирование — оно разобрано ниже.

    <?php $title = "Наши услуги"; ?>
    <!doctype html>
    <html lang="ru">
    <head><meta charset="utf-8"><title><?= htmlspecialchars($title, ENT_QUOTES, "UTF-8") ?></title></head>
    <body><h1><?= htmlspecialchars($title, ENT_QUOTES, "UTF-8") ?></h1></body>
    </html>
    Практика

    Создайте страницу с заголовком и списком услуг. Вынесите данные в начало файла, а HTML оставьте ниже.

    6. Форма и метод POST

    Форма отправляет данные на сервер. Значения из $_POST нельзя считать проверенными: поле может отсутствовать или содержать что угодно. Приведите значение к строке, удалите лишние пробелы и проверьте длину.

    <?php
    $name = trim((string)($_POST["name"] ?? ""));
    $error = $_SERVER["REQUEST_METHOD"] === "POST" && $name === ""
        ? "Введите имя" : "";
    ?>
    <form method="post">
      <label>Имя <input name="name" required></label>
      <button type="submit">Отправить</button>
    </form>
    Практика

    Добавьте поле email и проверьте его с помощью filter_var($email, FILTER_VALIDATE_EMAIL).

    7. Безопасный вывод в HTML

    Когда выводите введённый человеком текст в HTML, заменяйте специальные символы функцией htmlspecialchars. Это правило относится к HTML-тексту и значениям атрибутов; для URL, JavaScript и SQL нужны отдельные способы обработки.

    <?php
    $name = trim((string)($_POST["name"] ?? ""));
    $safeName = htmlspecialchars($name, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");
    echo "<p>Здравствуйте, {$safeName}!</p>";
    Практика

    Отправьте в поле строку Тест. На странице должны появиться сами символы, а не жирный HTML-текст.

    8. Разделяем файлы проекта

    Повторяемые части страницы можно вынести в отдельные файлы и подключить через require. Используйте путь от текущего файла через __DIR__, чтобы подключение не зависело от рабочей папки процесса.

    <?php
    $pageTitle = "Контакты";
    require __DIR__ . "/partials/header.php";
    // Содержимое страницы
    require __DIR__ . "/partials/footer.php";
    Практика

    Вынесите общий заголовок и подвал в два файла. Откройте две страницы и убедитесь, что обе используют одни и те же части.

    9. Запросы к базе данных без склейки SQL

    Для параметров SQL используйте подготовленные запросы PDO. Не вставляйте значение из формы прямо в текст запроса: экранирование HTML не защищает SQL. На этом этапе достаточно понять разделение текста запроса и данных.

    <?php
    $stmt = $pdo->prepare("SELECT title FROM articles WHERE id = :id");
    $stmt->execute(["id" => $articleId]);
    $article = $stmt->fetch(PDO::FETCH_ASSOC);
    Практика

    Объясните своими словами, почему $articleId передаётся в execute(), а не дописывается в строку SQL.

    10. Итоговый проект: форма обращения

    Соберите страницу с полями имени, почты и сообщения. После отправки проверьте каждое поле на сервере и покажите понятные ошибки рядом с ним. Если данные корректны, покажите подтверждение; сохранение и отправку почты добавляйте только после настройки безопасности и хранения.

    <?php
    $name = trim((string)($_POST["name"] ?? ""));
    $email = trim((string)($_POST["email"] ?? ""));
    $valid = $name !== "" && filter_var($email, FILTER_VALIDATE_EMAIL);
    if ($_SERVER["REQUEST_METHOD"] === "POST" && $valid) {
        echo "<p>Данные получены. Это учебный пример: сообщение не отправлено.</p>";
    }
    Практика

    Проверьте пустые поля, неверный email и строку с HTML-тегами. Затем добавьте сообщения об ошибках, сохраняя безопасный вывод.

    Что изучать дальше

    Официальное продолжение — учебник PHP и раздел о безопасности. Для интерфейса формы повторите CSS и JavaScript.

    Заявка

    Расскажите о проекте

    Свяжемся в течение рабочего дня, зададим уточняющие вопросы и предложим варианты. Без навязчивых звонков.

    Форма обратной связи

    Отвечаем в рабочие дни с 10:00 до 19:00

    Написать в Telegram