Как правильно средиректить на другую страницу через php

Статус
В этой теме нельзя размещать новые ответы.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Имеется следующий код:
Код:
...
 
    switch($sel){
     
    case "save_1":
    $data = $_POST;
    $err = SavePersonalRegistrationForm($data);
 
    if($err){ // Если ошибка есть
        $form["err"] = $err;
        $smarty->assign("form", $form);
    } else { // Если ошибки нет
        header("location: ./registration.php?sel=2");
        echo "<script>location.href='./registration.php?sel=2'</script>";
    }
    break;
    }
 
 
    $smarty->display(TrimSlash($config["index_theme_path"])."/index_home_page".$config["theme_postfix"].".tpl");
 
    exit;
 
?>



Это страница index.php с формой регистрации, если все прошло успешно после сабмита формы и ошибок нет - то нужно средиректить юзера на registration.php?sel=2. Но проблема в том, что в случае, если ошибки нет, редеректа не происходит, вместо этого получаю ошибку 500 Internal Server Error
т.е. код
Код:
else { // Если ошибки нет
 
        header("location: ./registration.php?sel=2");
 
        echo "<script>location.href='./registration.php?sel=2'</script>";
не срабатывает. Помогите разобраться почему и как тут правильно сделать.
 
Скорее всего проблема в том, что до отправки заголовков (функция header()) что-то уже было "отображено" на странице. Заголовки могут отправляться только до того момента, как отправляется содержимое страницы. По этой же причине нельзя установить cookie после содержимого.

Попробуй в самом начале сценария (в самом-самом, index.php например) написать:

PHP:
<?php
 
ob_start();

В php.ini есть еще какой-то параметр, который управляет буферизацией вывода глобально (копай в сторону слова "flush"), но не вспомнить сейчас.
 
Как написал предыдущий участник, у вас скорее всего уже что-то "отображено", поэтому при редиректе header() ошибка.
Да и вообще зачем два раза редиректить: и при помощи header() и при помощи javascript.

Я бы на вашем месте оставил :

PHP:
echo "<script>location.href='./registration.php?sel=2'</script>";
exit;
и не тратил бы время на разбор почему header() выдаёт ошибку
 
Я бы на вашем месте оставил :

PHP:
echo "<script>location.href='./registration.php?sel=2'</script>";
exit;
и не тратил бы время на разбор почему header() выдаёт ошибку

по поводу "двойного" редиректа логично, но вот реализация... чисто гипотетически предположим что будет если у юзера отключен жабоскрипт?
ТС, если вместо
PHP:
header("location: ./registration.php?sel=2");
прописать
PHP:
header("location: домен.ком/registration.php?sel=2");
(т.е. указать абсолютный путь), то что происходит?
 
Гипотетически вы правы - имеет место запрет JS у пользователя.

Насколько я знаю это кусок кода из PG Dating Pro.
С выключенным JS пользователь не сможет зарегистрироваться (это код регистрации) по той причине что на форме используется ajax подгрузка.

Так что можно смело оставлять
echo "<script>location.href='./registration.php?sel=2'</script>";
exit;
 
Отключенный яваскрипт в наше время встречается также часто, как использование ИЕ 5 :D
 
убери echo "<script>location.href='./registration.php?sel=2'</script>";
 
А еще незабиваем добавлять Header 301, так гугл рекомендует.

PHP:
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.newdomain.com/somepage.html");
exit();

Для просмотра ссылки Войди или Зарегистрируйся
 
А еще незабиваем добавлять Header 301, так гугл рекомендует.
Бред. В данном случае никаких 301 не нужно. Ты внимательно почитай в каких случаях это используется!
Да и вообще поисковики нефиг пускать к форме регистрации.
 
Нет, тут 301 редирект не нужен.
Редирект 301 (301 Permanent Redirect или Moved Permanently) используется в нескольких случаях:
- при смене домена, когда по каким то причинам старый домен вас не устраивает и вы переносите контент на новый домен.
- при переносе страницы сайта, например при смене CMS сайта
- для склейки имени сайта с www и без него. Данный пункт уже не столь актуален для Google.
Использование 301 редиректа - это отличный метод сохранения ваших позиций в поисковых системах, при перемещении сайта или отдельных его страниц.
Делай просто один раз
Код:
header("Location: http://www.newdomain.ru/newdir/newpage.htm");
exit();
И обязательно нужно учесть, что никакого вывода на страницу до этого кода не должно быть.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху