Задача заключается в том, чтобы после добавления комментария средствами php быстро перенаправить пользователя на исходную страничку минуя отображение в адресной строке браузера имени файла-обработчика формы (comments.php).
Данную задачу мы решим с помощью применения стандартной функции header(), которая предназначена для добавления заголовка к документу, пересылаемогу браузеру. В частности нам нужно организовать с помощью неё перенаправление пользователя на указанный в её параметре URL-адрес.
Поскольку вызов header() должен осуществляться до любого оператора вывода в сценарии, то нам нужно воспользоваться фукцией буферизации ob_start();.
Итак, откройте ваш файл-обработчик формы комментариев. У меня он называется comments.php и выполните следующие действия:
1) В самом начале скрипта вызовите функцию ob_start();
ob_start();
2) Определите переменную для хранения URL-адреса скрипта странички, на которую будет перенаправлен пользователь после добавления комментария.
$url = "index.php?cat=".$cat."&id=".$id."";
3) Найдите в файле-обработчике строчки кода, отвечающие за обновление странички браузера средствами html. Они идут сразу после обработки всех переменных из формы и добавления комментария. У меня они выглядели так:
echo "<html><head><meta https-equiv='Cache-Control' content='no-cache'><meta https-equiv='Refresh' content='0; URL=/index.php?cat=$cat&id=$id'></head></html>";
exit();
Значение атрибута URL мета-тэга определяет адрес странички, которую необходимо обновить, чтобы увидеть добавленный комментарий.
4) Замените эти строчки на вызов функции header() следующим образом:
//перенаправляем на указанный в $url адрес
header("Location: ".$url."");
//принудительно завершаем сценарий, поскольку после перенаправления больше делать нечего.
exit();
URL-адрес можно указывать в этой функции не только через переменную, определенную ранее, но и прямо внутри этой функции в качестве строкового параметра. Примеры вызовов функции header() можете наблюдать в приведенном ниже примере.
//простой способ, который мы используем в данном примере
header("Location: view_post.php?id=".$id."");
//универсальный способ
@header("Location: https://".$_SERVER['https_HOST'].$_SERVER['SCRIPT_NAME']."?id=$id");
5) Чтобы очистить текущий буфер, вызванный в самом начале файла функцией ob_start() нужно в самом конце файла comments.php перед "?>" вызвать функцию ob_get_clean().
echo ob_get_clean();
Таким образом, возвратится текущее содержимое буфера и удалиться текущий буфер.
Данную технологию перенаправления можете наблюдать на моём сайте. Чтобы её проверить, просто добавьте комментарий к этой заметке.
На этом всё. Жду положительных отзывов! =)