У меня есть страница с формой в методе POST, в которой пользователь публикует z
значение,
на следующую страницу PHP, которая его обрабатывает и соответственно перенаправляет пользователя:
<?php
{
if(isset($_POST['z'])){
switch ($_POST['z']) {
case "a":
$url = "http://www.a.com";
break;
case "b":
$url = "http://www.b.com";
break;
default:
$url = "http://www.default.com/";
}
}
header( "refresh:0;url=$url" );
}
?>
<!doctype html>
<html>
<head>
<style>
.wrap{
margin-top: 25%;
}
</style>
</head>
<body>
<div class="wrap">
You are now being redirected.
</div>
</body>
</html>
Обычно это работает нормально, но сегодня я получил жалобу от одного посетителя, который сказал, что сообщение «Вы перенаправлены». продолжал показывать, и он никогда не был перенаправлен.
Я видел на сервере логи, что он пытался сделать это несколько раз (скажем, он отправил форму по крайней мере 3 раза).
Что могло вызвать эту проблему? (код в форме не изменился).
Чтобы попытаться справиться с такими случаями, Я думал о предоставлении пользователю возможность нажать на a href
ссылка на $url
, но я хочу, чтобы эта ссылка появлялась только через 5 секунд (в общем, большинство пользователей никогда не увидят ссылку, поскольку обновление заголовка должно произойти через 0 секунд). пока я хочу, чтобы ВСЕ пользователи увидели сообщение «вы перенаправлены».
а. Я не уверен, что это обязательно решит проблему, так как если бы причиной проблемы было то, что $url
значение было пустым, такая ссылка не помогла бы.
б. Я не хочу, чтобы пользователь мог видеть назначение ссылки, просматривая источник страницы, если только он не соответствует категории 5-секундной задержки. поэтому я не думаю, что здесь можно использовать костюмы Javascript, потому что это на стороне клиента, верно? Так что я ищу решение на стороне сервера PHP — это загрузит страницу со всем, как сейчас, но также добавит a href
элемент через 5 секунд. Есть какой-либо способ сделать это?
РЕДАКТИРОВАТЬ:
вот форма:
<form action="redirect.php" method="POST" target="_blank">
<input name="z" type="hidden" value="a"/>
<input type="submit" value="Go"></form>
Назначьте значение по умолчанию перед if
а не в default:
дело:
$url = "http://www.default.com/";
if(isset($_POST['z'])){
switch ($_POST['z']) {
case "a":
$url = "http://www.a.com";
break;
case "b":
$url = "http://www.b.com";
break;
}
}
Таким образом, если $_POST['z']
не установлен по какой-то причине, они все равно получат перенаправление по умолчанию.
Других решений пока нет …