[help]редирект с переменными

Тема в разделе "PHP", создана пользователем saylar_06, 23 дек 2010.

Модераторы: latteo
  1. saylar_06

    saylar_06 Создатель

    Регистр.:
    7 мар 2009
    Сообщения:
    42
    Симпатии:
    0
    Здарсте, буду краток... Возможно вопрос и глупый но ничего толкового я не нашел :(

    Собственно: Как перенаправить пользователя с одной страницы на другую и дать ему в придачу ещё и переменную?

    к примеру он попал на страничку и получил там $message = "ERROR"; и его перенаправило на другую страничку где будет условие

    if (isset($message)) echo $message;

    ну в общем суть в том чтоб перенаправить пользователя с переменной без разницы с какой главное чтоб потом с ней работать можно было...
     
  2. Dj_StelS

    Dj_StelS

    Регистр.:
    9 янв 2009
    Сообщения:
    349
    Симпатии:
    79
    например с помощью ссессий:
    1 файл:
    PHP:
    session_start();
    $message "ERROR";
    $_SESSION['message'] = $message;
    header("Location: 2_file.php");
    2 файл:
    PHP:
    session_start();
    $message $_SESSION['message'];
    echo 
    $message;
    так же можно это сделать с помощью кук, или даже воспользоваться get-передачей данных;)
     
    saylar_06 нравится это.
  3. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    если влоб, как-то так ... но решение явно не лучшее
    PHP:
    $url "xxx.ru/index.php?data=123" //  какой-то url

    if (isset($message)) {
     echo 
    $message;
    $url .= "&message=$message";
    }
    header("Location: $url");
    Добавлено через 6 минут
    Dj_StelS разве будет верным хранить в сессии всякого рода "системных" сообщений?

    я почему-то всегда считал что сессию нужно использовать по минимуму, и не хранить там кучи текста ... особенно если необходимость данной переменной ограничивается лишь несколькоми страницами ( в том смысле, что на 1 странице сохранится а на 2-3 сотрется )
     
    saylar_06 нравится это.
  4. Dj_StelS

    Dj_StelS

    Регистр.:
    9 янв 2009
    Сообщения:
    349
    Симпатии:
    79
    разве сессии создают нагрузку? разве что только тем что создают файл на сервере с сессией. Но если это пугает, можно использовать куки, но их как и get данные можно поменять...
    Так что я думаю это дело выбора каждого...
     
    saylar_06 нравится это.
  5. Dima Kos

    Dima Kos Постоялец

    Регистр.:
    1 апр 2010
    Сообщения:
    54
    Симпатии:
    6
    как выше сказали можно использовать сессии, куки, гет запросы. Вообще если это обычное сообщение предупреждение, которое впринципе не несёт никакой полезной нагрузки кроме сообщения об ошибке пользователю, то использовал бы куки. Но тут косяк в том что у некоторых могут куки быть отключены, тогда самым универсальным будет сессия.
    Есть еще вариант с БД, тут тоже ничего сложного, проверять таблицу mesage(например) в которой такие столбцы: sess_id, msg. Думаю тут всё понятно.
     
  6. keyto

    keyto Создатель

    Регистр.:
    16 янв 2011
    Сообщения:
    11
    Симпатии:
    0
    Простите что здесь, немного не по теме топика но точно в тему:
    я совсем начинающий =)

    как сделать так
    есть ссылка типа _http://мойдомен.ру/go.php?home
    что надо написать в файле go.php что:
    если переменная равна home то идем на майкрософт.ком
    если переменная 123 то на другой сайт и т.д.

    вобщем чтобы переходил по адресу в зависимости от переменной.

    спасибо!
     
  7. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    keyto

    заходим на go.php?home=значение
    PHP:
    // файл go.php
        
    if( !isset($_GET['home'])) {
          echo 
    "ERROR";
          exit;
        }

        
    $url "";
        switch(
    $_GET['home'])
        {
            case 
    "123":  $url "site.ru";    break;
            case 
    "333":  $url "site.com";   break;
            default: 
    $url "google.com"
        }
       
    header('Location: $url');
    или так
    PHP:
        if( !isset($_GET['home'])) {
          echo 
    "ERROR";
          exit;
        }
       
    $urlArray = array( 
                        
    "123" => "site.ru",
                        
    "333" => 'site.com',
                        
    "444" => '132123.ru'
                        
    );   
       if(isset(
    $urlArray[$_GET['home']])) {
           
    header("Location: ".$urlArray[$_GET['home']]);
       }
    или как-то так
    PHP:
        if( !isset($_GET['home'])) {
          echo 
    "ERROR";
          exit;
        }
        
        
    $value $_GET['home'];
        
        if(
    $value == 'qwe'){
            
    header("Location: http://google.com");
        }elseif(
    $value == 'xxxx'){
            
    header("Location: http://mail.ru");
        }else {
            
    header("Location: http://ya.ru");
        }
     
  8. keyto

    keyto Создатель

    Регистр.:
    16 янв 2011
    Сообщения:
    11
    Симпатии:
    0
    по первому примеру было бы отлично, легко добавлять все. но он что то не работает =(
    ошибка
    Warning: Cannot modify header information - headers already sent by.... выдает ошибку на строку header('Location: $url');

    во втором примере тоже на строку header("Location: ".$urlArray[$_GET['home']]); грешит.
    что то в ней не так. может надо что то другое использовать а не header?

    -------

    почитал доки. - у меня как раз случай - установлен редирект уже.
    можно ли сделать это не через Header ?
     
  9. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Перед вызовом header нельзя ничего отдавать браузеру.
    http://phpfaq.ru/headers

    Добавлено через 1 минуту
    А если хочешь без header то тут javascript или meta.