"vorstande" не существует в моем массиве просмотра.Таким образом, код проверяет раздел «verein» и включает «verein».Но это должно дать ошибку.
Под «дать ошибку» вы имеете в виду $check = false;
?
} else if (isset($_GET['section'], $_GET['view'], $view[$_GET['view']])) {
Если в вашем представлении $ ключ vorstande
не существует, все это условие будет оценено как false
, и будет проверено следующее условие:
} else if (isset($_GET['section'], $section[$_GET['section']])) {
Редактировать:
Ваш код:
else if (isset($_GET['section'], $_GET['view'], $view[$_GET['view']])) {
$path = $path_dynamic.$_GET['section']."/".$view[$_GET['view']];
check($path);
}
Ваше требование:
if (!isset($view[$_GET['view']]))
check(/* something invalid to display fehler.html */ false);
Что на самом деле происходит:
isset($_GET['section']) // true
isset($_GET['view']) // true
isset($view[$_GET['view']]) // FALSE
=> isset($_GET['section'], $_GET['view'], $view[$_GET['view']]) // FALSE
Если $_GET['view']
не существует в $view
, блок, который будет вызывать check
, выполняется , а не .Если вы хотите, чтобы он выполнялся независимо, просто удалите условие isset($view[$_GET['view']])
:
else if (isset($_GET['section'], $_GET['view'])) {
$path = $path_dynamic.$_GET['section']."/".@$view[$_GET['view']]; // @ to suppress errors from accessing
check($path);
}
Если вам не нравится этот подход, работайте над своими делами.У вас есть один случай для section isset AND view isset AND view is valid
.В следующем случае игнорируется параметр view
.Поэтому, если ваш view
параметр недопустим, ваш код обрабатывает его так, как если бы он не был установлен.Требование, однако, состоит в том, чтобы иметь регистр для section isset AND view isset AND view is invalid
:
else if (isset($_GET['section'], $_GET['view']) && !isset($view[$_GET['view']])) {
check(false);
}
Это, конечно, в значительной степени избыточная проверка, поэтому просто вложите ее в нечто вроде:
else if (isset($_GET['section'], $_GET['view']))
{
// section and view have been passed
if (isset($view[$_GET['view']])
// view is actually valid
$path = $path_dynamic.$_GET['section']."/".$view[$_GET['view']];
else
// view has been passed but is invalid. show fehler.html
$path = false;
check($path);
}
Альтернативный пример
Если я вас правильно понимаю, у вас есть следующее требование: если пользователь передает параметр section
, view
, sub
, cat
или point
, выхотите, чтобы это значение также было в вашем списке допустимых значений.Если это не так, вы хотите отобразить fehler.html
.
Теперь мы сначала убедимся, что если параметр задан, он также действителен:
foreach ($array as $param)
{
// example for $param == "view":
// !isset( $view[$_GET["view"]] )
if (!isset( ${$param}[$_GET[$param]] ))
{
$check = false;
break;
}
}
Затем мы проверим все ваши комбинации параметров и построим $path
$path = false;
if ($check)
{
// your long if isset else if isset block where
// isset($_GET['view']) also implies isset($view[$_GET['view']])
// so you don't have to check for it.
// just set the $path variable with some string.
// we are going to check it later
}
Если теперь начальный $check
не удался или мы создали неверный $path
, отобразим fehler.html
if ($check === false || !file_exists($path))
{
// display fehler.html
}
else
include($path);