php $_GET[‘страница’] несколько страниц

#php

#php

Вопрос:

     if (!$_GET['page'] || preg_match('/W/', $_GET['page']) || !file_exists('./intl/tpl/tpl_source/' . $_GET['page'] . '.tpl'))
    $_GET['page'] = 'index';
    if ($_GET['page'] amp;amp; $_GET['page'] != 'index') {
    $smarty->assign("pg_" . $_GET['page'], true);
    $smarty->display($_GET['page'] . ".tpl");
    die();
}
  

Этот код позволяет мне открыть любую страницу (?page =1, ?page = 2 и так далее, также это означает, что если страница не отображается, откройте index)

но мне нужно указать, какой пользователь может открыть, поэтому код должен выглядеть следующим образом:

 if ($_GET['page'] = '21' || preg_match('/W/', $_GET['page']) || file_exists('./intl/tpl/tpl_source/' . $_GET['page'] . '.tpl')) {
//my stuff
}
  

Короче говоря, мне нужно указать, какие адреса пользователь может открыть с помощью $ _GET[‘страница’] (?страница = 21 ?страница = 22 и так далее).
Извините, если вопрос не ясен.

Ответ №1:

Вы можете упростить свой код, используя приведение типов (для фильтрации!) и более простой список разрешенных страниц:

 $allowed_pages = array(1, 12, 21, 25, 32);

$page = (int)$_GET["page"]
        and  in_array($page, $allowed_pages)
        and  file_exists("./intl/tpl/tpl_source/$page.tpl")
or $page = "index";

$smarty->assign("pg_$page", true);
$smarty->display("$page.tpl");
die();
  

Ответ №2:

Вы можете создать белый список:

 var $pages = array(
    21 => true,
    22 => true
);
// or
var $pages = array_flip(array(21, 22));
  

и проверьте, есть ли страница там:

 if(isset($pages[$_GET['page']])) {

}