Переход на другую страницу при нажатии кнопки в PHP

Короткий ответ: если кнопка просто ведет на другую страницу, PHP не нужен — сделайте ссылку, оформленную как кнопку. Если перед переходом нужно обработать форму, сохранить данные или проверить условие, тогда PHP принимает POST-запрос и делает редирект через header('Location: ...')

Главная мысль: клик происходит в браузере, а PHP работает на сервере после запроса. Поэтому нужно выбрать сценарий: обычный переход, отправка формы или серверный редирект

Вариант 1: кнопка-ссылка

Если никакой обработки не нужно, используйте ссылку

<a class="button" href="/contacts.php">Открыть контакты</a>

Стили можно сделать как у кнопки

<style>
    .button {
        display: inline-block;
        padding: 12px 18px;
        border-radius: 8px;
        background: #f5c542;
        color: #111827;
        text-decoration: none;
        font-weight: 700;
    }
</style>

Это самый правильный вариант для простого перехода

Вариант 2: форма отправляется на другую страницу

<form action="/thanks.php" method="post">
    <input type="text" name="name" placeholder="Ваше имя">
    <button type="submit">Отправить</button>
</form>

После нажатия кнопки браузер отправит POST-запрос на thanks.php

В thanks.php можно принять данные

<?php

$name = trim($_POST['name'] ?? '');

echo 'Спасибо, ' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8');

Такой вариант подходит, если страница результата сама обрабатывает данные

Вариант 3: PHP обрабатывает и делает редирект

Создайте form.php

<?php

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name'] ?? '');

    if ($name !== '') {
        header('Location: /thanks.php');
        exit;
    }

    $error = 'Введите имя';
}
?>

<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>Форма с редиректом</title>
</head>
<body>
    <?php if (!empty($error)): ?>
        <p><?php echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?></p>
    <?php endif; ?>

    <form method="post">
        <input type="text" name="name" placeholder="Ваше имя">
        <button type="submit">Продолжить</button>
    </form>
</body>
</html>

Если имя заполнено, PHP отправит браузер на /thanks.php. Если имя пустое, пользователь останется на форме и увидит ошибку

Почему header должен быть до HTML

Редирект через header() отправляет HTTP-заголовок. Он должен быть вызван до любого вывода HTML, пробелов или echo

Плохой пример

<p>Текст уже отправлен</p>
<?php
header('Location: /thanks.php');
exit;

Так можно получить ошибку headers already sent

Когда нужен JavaScript

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

<button type="button" onclick="window.location.href='/contacts.php'">
    Открыть контакты
</button>

Но если это обычный переход, ссылка проще, надежнее и понятнее для поисковых систем

Мини-практика

Сделайте страницу order.php с формой имени. Если имя заполнено, после отправки перейти на thanks.php. Если имя пустое, показать сообщение Введите имя. Затем замените форму на обычную ссылку-кнопку и сравните два сценария

Частые ошибки

Используют PHP там, где нужна обычная ссылка Для простого перехода достаточно <a href="...">

Пишут HTML до header Редирект должен быть до вывода страницы

Забывают exit после header После редиректа код может продолжить выполняться

Путают action формы и Location action задает адрес отправки формы, а Location отправляет браузер дальше после обработки

Что почитать дальше по PHP

Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x