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

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

kozax89

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

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

ob_start();

и

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

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

Пробовал sleep(5); - не помогает.
 
Редирект PHPшный — это принципиально?
Просто имеются тег <meta> и window.location вместе с setTimeout
 
Ну просто есть код - он проверяет картинку - если ее ввел не правельно только тогда редиррект, если правельно, не надо.

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

ТУТ ДОЛЖЕН БЫТЬ РЕДИРЕКТ
 
HTML:
<meta content='4; url=адресс редиректа' http-equiv='Refresh'/>
4 - тайм.
это на хтмл...


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


PHP:
display ("<meta http-equiv=\"refresh\" content=\"$time;URL=$dest\">");
 
PHP:
if ($error==1) {
print '<span style="color:red;">Число с картинки введено неверно</span>
 <meta http-equiv="Refresh" content="0; URL=/some/url/">';
}
 
Спасибо )) Помогло ))

А еще можете подсказать - как средствами php сделать редирект на прошлую страничку? на сессиях или как то иначе можно?
 
На сессиях, говоришь...
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 сек.
 
а как вложить $_SESSION['returnUrl'] в переменную, чтоб через echo или print линк выписывало?

пробую

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

все норм переадресовывет, но линк не выписывает...
 
Приписывать $backurl = $_SESSION['returnUrl'] не есть обязательно.

PHP:
print '<a href="'.$_SESSION['returnUrl'].'">« Назад</a>';
// или
print '<meta http-equiv="Refresh" content="0; URL='.$_SESSION['returnUrl'].'">';
 
я знаю что не обязательно, просто так легче )) уже все работает, чето там на серваке глюкнуло походу )

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