Помогите правильно сделать redirect

Тема в разделе "PHP", создана пользователем kozax89, 25 июл 2009.

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

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    Такая проблема - Есть форма на подписку на рассылку через мэйл. В форме имееться капча. Форма высылает данные в обработчик, он там все проверяет. Надо сделать так, чтобы в случаи если код с капчи переписан неверно - юзера редиректило обратно.

    Я выполнил это при помощи

    ob_start();

    и

    $URL="адресс редиректа";
    header ("Location: $URL");

    Только тут возникает проблемма. Редиректит пользователя сразу после того как скрипт поймет что код неверный. А надо, чтоб пользователь получил информацию о неверно введенном коде, и спустя 5 секунд его отредиректило обратно. Как это выполнить подскажет кто нибудь?

    Пробовал sleep(5); - не помогает.
     
  2. Albert22

    Albert22

    Регистр.:
    30 мар 2008
    Сообщения:
    270
    Симпатии:
    10
    Редирект PHPшный — это принципиально?
    Просто имеются тег <meta> и window.location вместе с setTimeout
     
  3. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    Ну просто есть код - он проверяет картинку - если ее ввел не правельно только тогда редиррект, если правельно, не надо.

    if ($error==1) print "<font color=red>Число с картинки введено неверно</font>";

    ТУТ ДОЛЖЕН БЫТЬ РЕДИРЕКТ
     
  4. mittus

    mittus Создатель

    Регистр.:
    12 июл 2009
    Сообщения:
    72
    Симпатии:
    11
    HTML:
    <meta content='4; url=адресс редиректа' http-equiv='Refresh'/>
    4 - тайм.
    это на хтмл...


    Для пхп можно сделать что то вроде


    PHP:
    display ("<meta http-equiv=\"refresh\" content=\"$time;URL=$dest\">");
     
    kozax89 нравится это.
  5. Albert22

    Albert22

    Регистр.:
    30 мар 2008
    Сообщения:
    270
    Симпатии:
    10
    PHP:
    if ($error==1) {
    print 
    '<span style="color:red;">Число с картинки введено неверно</span>
     <meta http-equiv="Refresh" content="0; URL=/some/url/">'
    ;
    }
     
    kozax89 нравится это.
  6. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    Спасибо )) Помогло ))

    А еще можете подсказать - как средствами php сделать редирект на прошлую страничку? на сессиях или как то иначе можно?
     
  7. Albert22

    Albert22

    Регистр.:
    30 мар 2008
    Сообщения:
    270
    Симпатии:
    10
    На сессиях, говоришь...
    PHP:
    // файл, откуда осуществляется переход
    $_SESSION['returnUrl']=$_SERVER['REQUEST_URI '];
    PHP:
    // файл, откуда возврат
    header("Location: ".$_SESSION['returnUrl']);
    Но не стоит забывать о $_SERVER['HTTP_REFERER'], с ним будет как-то так:
    PHP:
    if (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'])) {
    header("Location: ".$_SERVER['HTTP_REFERER']);
    }else{
    header("Location: ".$_SESSION['returnUrl']);
    }
    Сначала проверяем, есть ли реферер, и с нашего ли он сайта. Если да — пользуемся, если же нет — тогда берём адрес из сессии. Впрочем, нахер тогда тот реферер если сессию в любом случае используем. То есть, решай сам и по ситуации, это — эскизный такой вариант :)
    UPD: Ещё есть JS вариант history.go(-1);
    Можно засунуть в что-то наподобие window.addEvent('domready') если используешь mootools, или в <body onload="">. Необходимо выставить setTimeout, а то сразу переадресует.
    HTML:
    setTimeout(function(){history.go(-1);}, 1000); 
    Число — величина в милисекундах; в примере это 1 сек.
     
    kozax89 нравится это.
  8. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    а как вложить $_SESSION['returnUrl'] в переменную, чтоб через echo или print линк выписывало?

    пробую

    if (isset($_SESSION['returnUrl'])) {$backurl = $_SESSION['returnUrl'];}

    все норм переадресовывет, но линк не выписывает...
     
  9. Albert22

    Albert22

    Регистр.:
    30 мар 2008
    Сообщения:
    270
    Симпатии:
    10
    Приписывать $backurl = $_SESSION['returnUrl'] не есть обязательно.

    PHP:
    print '<a href="'.$_SESSION['returnUrl'].'">« Назад</a>';
    // или
    print '<meta http-equiv="Refresh" content="0; URL='.$_SESSION['returnUrl'].'">';
     
  10. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    я знаю что не обязательно, просто так легче )) уже все работает, чето там на серваке глюкнуло походу )

    А не подскажите почему нет задержки в IE? :) Так ненавижу этот браузер, но все таки он достаточно популярен, чтоб из за него рвать попу ))
     
Статус темы:
Закрыта.