使用include语句和?view - ?view重定向到错误的include

时间:2012-11-15 13:39:49

标签: php sql view include

我遇到以下问题。

基本上我正在使用php / sql构建一个登录系统。

根文件夹(www)包含css样式,index.php和其他一些不相关的php文件。

此文件夹中还有一个名为views的文件夹。在“视图”中还有2个文件夹:main和layout。

布局文件夹包含一个php文件的nubmer,其中只有1行。 e.g

<h1> You have logged in! </h1>

(loginconfirm.php)或

<h1> Log in failed </h1>

(loginfailed.php)。

主文件夹包含2个php文件,“layout”和“loggedinlayout”。

在我的索引文件中,最后 - 我有这个:

include 'views/main/'.$controller.'.php';

这个想法是,当用户登录时,我将$ controller从= layout更改为= loggedinlayout。这将导致加载新布局。

实际上,这不起作用,因为我可以让包含线工作,并且它将继续使用之前使用的内容。

    <?php
    // occasional bugs bring up notices, this ignores them
    error_reporting(E_ALL ^ E_NOTICE);
    // includes the database and cart functions
    include('db_function.php');
    session_start();

   // defaults to index view unless a different view is requested
   $view = empty($_GET['view']) ? 'welcome' : $_GET['view'];



   function validateUser()
   {
   session_regenerate_id (); //this is a security measure
   $_SESSION['valid'] = 1;
   $_SESSION['userid'] = $userid;
   }

   function isLoggedIn()
   {
   if(isset($_SESSION['valid']) && $_SESSION['valid'])
    return true;
   return false;
   }

   function logout()
   {
     $_SESSION = array(); //destroy all of the session variables
      session_destroy();
   }

   switch($view) {
   case "logout";
logout();
$controller='layout';
//$_SERVER['DOCUMENT_ROOT'];
header('Location:index.php');
break;

    case "login";
    $user = ($_POST['username']); 
    $pw = ($_POST['password']); 

    session_start(); //must call session_start before using any $_SESSION variables
    //connect to the database here
    db_connect();
    $qry = "SELECT userid FROM user WHERE username='$user' AND password='$pw'"; 
    $result = mysql_query($qry);
    if(mysql_num_rows($result) < 1) //no such user exists
    {
    header('Location: ?view=loginfailed');
    die();
    }
    else
    {
    validateUser(); //sets the session data for this user
    }
    //redirect to another page or display "login success" message
     header('Location: ?view=loginconfirm');
     break;
     }

    //used for layout
    // the layout folder is where we put all the different views php files,
    // such as the index (first page displayed, even though there is another index)
    // or view players for example
     if(isset($_SESSION['valid']) && $_SESSION['valid']) 
     {
    $controller = 'loggedinlayout';
     }
     $controller = 'layout';

     // KEEP THIS HERE ALWAYS - THIS IS OUT OF THE CASE/VIEW SECTION

    include 'views/main/'.$controller.'.php';


     ?>

你们有什么建议吗?

问题是 - 当我登录时,它会将我重定向到登录确认页面,使用“loggedinlayout”作为布局,而不是“布局”

1 个答案:

答案 0 :(得分:0)

您的$controller if/else语句缺少else,因此即使$controller = 'layout';返回(isset($_SESSION['valid']) && $_SESSION['valid']),也会将其设置为TRUE。尝试更改此内容 -

if(isset($_SESSION['valid']) && $_SESSION['valid']) 
 {
$controller = 'loggedinlayout';
 }
 $controller = 'layout';

到此 -

if(isset($_SESSION['valid']) && $_SESSION['valid']) 
 {
$controller = 'loggedinlayout';
 }
else
 {
 $controller = 'layout';
 }