?page = index $ _GET

时间:2011-07-04 12:18:32

标签: php session

目前使用此代码:

if ($_GET['page'] == 'index' 
     and file_exists('./intl/tpl/' . $_GET['page'] . '.tpl') 
     or !file_exists('./intl/tpl/' . $_GET['page'] . '.tpl') 
     or !$_GET['page']) {
//code
} elseif ($_GET['page'] == 'multi' 
          and file_exists('./intl/tpl/' . $_GET['page'] . '.tpl')) {
//code 2
}

依旧......

问题1:此代码“好”吗?不需要任何转义或什么?

问题2:?page = logout doens not work,所以我创建了logout.php,它看起来像:

<?php
require_once "./intl/config.php";
SessionDelete('logged_in');
SessionDelete('username');
SessionDelete('userid');
if ($user_admin != null) {
    SessionDelete('inadmin');
    if (SessionGet('s_order') != null or SessionGet('s_page_show_all') != null) {
        SessionDelete('s_order');
        SessionDelete('s_page_show_all');
    }
}
header('Location: '.$config['indexurl'].'index.php');
?>

也许在会话删除之前需要会话启动,并且可以使用?page = logout?

执行此操作

1 个答案:

答案 0 :(得分:0)

代码当然可以改进:

  1. 重新排序测试,以便它不会生成E_NOTICE错误
  2. 括号,以便运算符优先级立即显而易见
  3. 使用&&||布尔运算符(如garvey的评论所示)
  4. 这样做,你有:

    if (empty($_GET['page']) ||
        !file_exists('./intl/tpl/' . $_GET['page'] . '.tpl') ||
        ($_GET['page'] == 'index' && file_exists('./intl/tpl/' . $_GET['page'] . '.tpl')) {
    //code
    }
    } elseif ($_GET['page'] == 'multi' && file_exists('./intl/tpl/' . $_GET['page'] . '.tpl')) {
    //code 2
    }
    

    然后,重写一下以明确为什么你正在做你做的事情。这也将允许您编写更简单的代码。简单就是好。

    // This way it's obvious that 'index' is the default page
    $page = !empty($_GET['page']) ? $_GET['page'] : 'index';
    
    if (!file_exists('./intl/tpl/' . $page . '.tpl')) {
        $page = 'index'; // comment here saying that if a non-existing page is requested, we display the index instead
    }
    
    $template = './intl/tpl/' . $page . '.tpl';
    
    // At this point, we know that $page has a value, and we know that $template exists, so:
    switch($page) {
        case 'index':
            // code
            break;
        case 'multi':
            // code2
            break;
    }
    

    关于第二个问题:是的,你需要在能够修改或破坏它之前启动会话。