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

Тема в разделе "PHP", создана пользователем verfaa, 30 апр 2012.

Статус темы:
Закрыта.
Модераторы: latteo
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    375
    Симпатии:
    41
    Имеется следующий код:
    Код:
    ...
     
        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>";
    не срабатывает. Помогите разобраться почему и как тут правильно сделать.
     
  2. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Скорее всего проблема в том, что до отправки заголовков (функция header()) что-то уже было "отображено" на странице. Заголовки могут отправляться только до того момента, как отправляется содержимое страницы. По этой же причине нельзя установить cookie после содержимого.

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

    PHP:
    <?php
     
    ob_start
    ();
    В php.ini есть еще какой-то параметр, который управляет буферизацией вывода глобально (копай в сторону слова "flush"), но не вспомнить сейчас.
     
  3. Andipas

    Andipas Постоялец

    Регистр.:
    5 дек 2007
    Сообщения:
    130
    Симпатии:
    92
    Как написал предыдущий участник, у вас скорее всего уже что-то "отображено", поэтому при редиректе header() ошибка.
    Да и вообще зачем два раза редиректить: и при помощи header() и при помощи javascript.

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

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

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    по поводу "двойного" редиректа логично, но вот реализация... чисто гипотетически предположим что будет если у юзера отключен жабоскрипт?
    ТС, если вместо
    PHP:
    header("location: ./registration.php?sel=2");
    прописать
    PHP:
    header("location: домен.ком/registration.php?sel=2");
    (т.е. указать абсолютный путь), то что происходит?
     
  5. Andipas

    Andipas Постоялец

    Регистр.:
    5 дек 2007
    Сообщения:
    130
    Симпатии:
    92
    Гипотетически вы правы - имеет место запрет JS у пользователя.

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

    Так что можно смело оставлять
    echo "<script>location.href='./registration.php?sel=2'</script>";
    exit;
     
  6. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Отключенный яваскрипт в наше время встречается также часто, как использование ИЕ 5 :D
     
  7. psy-coder

    psy-coder Писатель

    Регистр.:
    8 май 2012
    Сообщения:
    4
    Симпатии:
    0
    убери echo "<script>location.href='./registration.php?sel=2'</script>";
     
  8. bog.imp

    bog.imp Постоялец

    Регистр.:
    22 ноя 2008
    Сообщения:
    89
    Симпатии:
    6
  9. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Бред. В данном случае никаких 301 не нужно. Ты внимательно почитай в каких случаях это используется!
    Да и вообще поисковики нефиг пускать к форме регистрации.
     
  10. kolored

    kolored Писатель

    Регистр.:
    15 окт 2013
    Сообщения:
    8
    Симпатии:
    1
    Нет, тут 301 редирект не нужен.
    Делай просто один раз
    Код:
    header("Location: http://www.newdomain.ru/newdir/newpage.htm");
    exit();
    И обязательно нужно учесть, что никакого вывода на страницу до этого кода не должно быть.
     
Статус темы:
Закрыта.