Я использую следующий код PHP на странице, на которую пользователь попадает после отправки формы с определенной foo
введите в нем имя, которое обрабатывает этот код PHP, и решает, по какому URL направить этого пользователя соответствующим образом.
Я только что заметил, что если пользователь не заходит на эту страницу с foo
имя входа (например, скажем, в форме на предыдущей странице вместо имени входного файла указано «vvv» из-за какой-то ошибки),
тогда этот код PHP не будет отправлять пользователя на URL по умолчанию. вместо этого он обновляется каждые 3 секунды в цикле.
Зачем? не следует ли получить значение по умолчанию в случае возникновения какой-либо ошибки, в том числе описанного выше сценария?
КОД:
<?php
if(isset($_POST['foo'])){
switch ($_POST['foo']) {
case "aaa":
$url = "http://www.aaa.com/";
break;
default:
$url = "http://www.bbb.com/";
}
}
header( "refresh:3;url=$url" );?>
<!doctype html>
<html>
<head>
<style>
.test {display: block;}
</style>
</head>
<body>
test
</body>
</html>
1) Я думаю, что вы балуетесь $_POST
а также $_GET
, Get
параметры видны в URL, POST
не отображается в URL.
2) Если нет $_POST['foo']
, чем он выдаст ошибку, потому что нет набора $url
переменная. Лучше изменить на этот код:
if(isset($_GET['foo'])){
switch ($_GET['foo']) {
case "aaa":
$url = "http://www.aaa.com/?foo=bbb";
header( "refresh:3;url={$url}" );
break;
default:
$url = "http://www.bbb.com/?foo=aaa";
header( "refresh:3;url={$url}" );
}
die(); // Optionally, if you wish not to continue any script
} else {
/* Show default code */
}
Пожалуйста, убедитесь, что switch
сниппет достигается при переходе на эту страницу без foo
параметры.
В вашем случае $url
еще не был инициирован (может быть if
состояние не удалось). Таким образом header
Функция на самом деле отправит браузеру этот заголовок: refresh:3;url=
(пустая строка после url=
), которые вызывают обновление браузера ток URL каждые 3 секунды.
<?php
$url = "http://www.bbb.com/";
if(isset($_POST['foo'])){
switch ($_POST['foo']) {
case "aaa":
$url = "http://www.aaa.com/";
break;
}
}
header( "refresh:3;url=$url" );?>
<!doctype html>
<html>
<head>
<style>
.test {display: block;}
</style>
</head>
<body>
test
</body>
</html>
Было бы лучше, если вы установите URL-адрес по умолчанию в верхней части. Так что, даже если ни один из случаев не соответствует. Значение по умолчанию всегда будет там. Если значение в случае соответствует, то оно будет заменено.
Есть ли $_POST['foo']
имеет какое-либо значение вообще?
Попробуйте сбросить значение, чтобы проверить, есть ли в нем что-нибудь:
var_dump($_POST['foo'])
Если результат этого равен нулю, то в вашей форме есть ошибка.
Примерно так должно работать:
<form method='post' action = $this->url()>
<div>
<input type='text' name='foo' value='foo'>
</div>
<div>
<input type='submit' value='submit' name='submit'>
</div>
</form>
И действие:
if(isset($_POST['foo']) && !empty($_POST['foo'])){
switch ($_POST['foo']) {
case "aaa":
$url = "http://www.aaa.com/";
break;
default:
$url = "http://www.bbb.com/";
}
}