PHP получить переменные - PullRequest
       2

PHP получить переменные

1 голос
/ 04 марта 2012

Я новичок в php и мне нужна помощь с переменными "GET".

Вот извлечение моего кода для index.php:

$array = array("section","view","sub","cat","point");
$i = 0;
$check = true;

foreach ($_GET as $position => $wert) {
  if ($position != $array[$i]) {
    //if GET doesnt exist in the array set check to false
    $check = false;
    break;
  }
  $i++;
}

//if GET variables exists
if ($check == true) {
  if (isset($_GET['section'], $_GET['view'], $_GET['sub'], $_GET['cat'], $_GET['point'], $point[$_GET['point']])) {
    $path = $path_dynamic.$_GET['section']."/".$_GET['view']."/".$_GET['sub']."/".$_GET['cat']."/".$point[$_GET['point']];
    check($path);
  } else if (isset($_GET['section'], $_GET['view'], $_GET['sub'], $_GET['cat'], $cat[$_GET['cat']])) {
    $path = $path_dynamic.$_GET['section']."/".$_GET['view']."/".$_GET['sub']."/".$cat[$_GET['cat']];
    check($path);
  } else if (isset($_GET['section'], $_GET['view'], $_GET['sub'], $sub[$_GET['sub']])) {
    $path = $path_dynamic.$_GET['section']."/".$_GET['view']."/".$sub[$_GET['sub']];
    check($path);
  } else if (isset($_GET['section'], $_GET['view'], $view[$_GET['view']])) {
    $path = $path_dynamic.$_GET['section']."/".$view[$_GET['view']];
    check($path);
  } else if (isset($_GET['section'], $section[$_GET['section']])) {
    $path = $path_dynamic.$section[$_GET['section']];
    check($path);
    //if section isn't set
  } else if (!isset($_GET['section'])) {
    include ($path_dynamic.$section['news']);
  }
} else {
  echo "GET doesn't exist";
  include ($path_static.$section['error']);
}

//check if GET exists
function check($path) {
  if (file_exists($path)) {
    echo "File imported<br />";
    include ($path);
  } else {
    echo "GET set correct but file doens't exist";
    include ('include/static/fehler.html');
  }
}

Пример файла section.php (view, sub, cat и point совпадают):

$section = array();
$section['error'] = 'fehler.html';

Моя проблема в том, что если я установлю эту ссылку:

index.php?section=verein&view=vorstande

"vorstande" не существует в моем массиве просмотра. Таким образом, код проверяет раздел «verein» и включает «verein». Но это должно дать ошибку.

Так что, похоже, этот код

 } else if (isset($_GET['section'], $_GET['view'], $view[$_GET['view']])) {

игнорируется и переходит на

  } else if (isset($_GET['section'], $section[$_GET['section']])) {

Также, если я изменю свой URL на это:

index.php?section=vereine&view=vorstande

ничего не происходит. Я даже не знаю, где сейчас код.

Но если я изменю URL-адрес на это:

index.php?section=vereine&view=vorstand

все отлично работает.

Так что "verein" и "vorstand" определяется мной. "vereine" и "vorstande" не существует.

Есть предложения? Прошу прощения за комментарии на немецком языке. Эхо только подсказывает мне, где код прямо сейчас!

Ссылка на мой HP:

Edit: - переведенные комментарии для лучшей беседы - удалил все структуры "$ ... [$ _ GET ['...']]", чтобы показать ошибку, которую я получу вместо этого.

Ответы [ 2 ]

0 голосов
/ 04 марта 2012

"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);
0 голосов
/ 04 марта 2012

Проблема здесь:

} else if (isset($_GET['section'], $_GET['view'], $view[$_GET['view']])) {

Каждый параметр isset должен быть истинным, чтобы оператор возвращал истину.В вашем примере $_GET['section'] и $_GET['view'] установлены, но $view[$_GET['view']] нет, поэтому выполнение продолжается на следующей строке else if.

Чтобы устранить проблему, либо установите $view[$_GET['view']] ранее,или удалите этот параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...