1

Есть код наподобие этого.

$condition = ...
    if($condition) {
      Перезагрузка страницы.
}

Но что-бы я не пробовал,никак не могу перезагрузить страницу , header не работает, если использую script страница перезагружается вечно, ajax к сожелению не знаю. Помогите пожалуйста решить проблему. Спасибо.

Help
  • 46
  • 2
    и что вы имеете в виду под перезагрузкой страницы? особенно если учесть, что во время обработки этого условия страница еще не отправлена пользователю, а сервер только формирует ответ. – teran Nov 06 '19 at 20:21
  • Чтобы header(); работал, вам необходимо структурировать код таким образом, чтобы все echo/print/var_dump'ы и прочий вывод или html разметка шли строго после header() . – MoloF Nov 06 '19 at 22:18

1 Answers1

1

Чтобы дать указание браузеру запросить ту или иную страницу, необходимо отправить ему НТТР заголовок Location: с помощью функции header():

header("Location:" . $_SERVER['REQUEST_URI']); 
exit;

Данный код выполнит перенаправление ровно на ту же самую страницу, на которой был вызван, поскольку в переменной $_SERVER['REQUEST_URI'] содержится полный адрес, который запрашивал браузер, обращаясь к этому скрипту. Если нужен адрес без строки запроса ("GET параметров"), то его можно получить так: strtok($_SERVER['REQUEST_URI'], '?');

Кроме того, надо не забывать завершать работу скрипта принудительно с помощью exit, поскольку сама по себе отправка заголовка не завершает работу кода, и он продолжает выполняться дальше.

Если "header не работает", то скорее всего либо просто ошибка в коде, либо это печально известная ошибка Headers already sent, которая объясняется тем, что что Location: - это НТТР заголовок, то есть перед ним не должно быть любого вывода, включая, разумеется, html теги.

Чтобы не было циклического перенаправления, надо заключать код в условие. Например, самый распространенный вариант проверить отправку формы, это

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Обработка формы
    header("Location:" . $_SERVER['REQUEST_URI']); 
    exit;
}

И в этом случае циклического перенаправления никогда не будет, поскольку перенаправление делается методом GET

  • А инного способа не существует , ибо у меня дело такое. Есть таблица, там кнопка удалить, как пользователь нажимает кнопку удалить запись удаляется из бд, но в таблице остается, поэтому хочу сделать рестарт страницы чтобы она исчезла. – Help Nov 07 '19 at 05:59
  • 2
    Вот поэтому в вопросе надо описывать реальную проблему а не свое гипотетическое решение. И да - Ajax и редиректы в таком виде как у вас - несовместимы. – u_mulder Nov 07 '19 at 06:03
  • 1
    А зачем ты хочешь что бы пропала запись перезагружать страницу, ты и сервер и пользователя грузишь, просто поставь display: none у того элемента, на который нажали, он скроется, а при следующей перезагрузке его уже не будет – DmitryDevelop Nov 07 '19 at 07:12
  • 1
    Ой, как я мог не додуматься . Спасибо <3 – Help Nov 07 '19 at 08:27