регистр по умолчанию в операторе switch-case в PHP не работает по умолчанию?

Я использую следующий код 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

Решение

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 */
}
0

Другие решения

Пожалуйста, убедитесь, что switch сниппет достигается при переходе на эту страницу без foo параметры.

В вашем случае $url еще не был инициирован (может быть if состояние не удалось). Таким образом header Функция на самом деле отправит браузеру этот заголовок: refresh:3;url= (пустая строка после url=), которые вызывают обновление браузера ток URL каждые 3 секунды.

0

<?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-адрес по умолчанию в верхней части. Так что, даже если ни один из случаев не соответствует. Значение по умолчанию всегда будет там. Если значение в случае соответствует, то оно будет заменено.

0

Есть ли $_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/";
}
}
0
По вопросам рекламы [email protected]