0

我在以下方面遇到了一些问题。

本质上,我正在使用 php/sql 构建登录系统。

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

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

Layout 文件夹包含大量 php 文件,其中仅包含 1 行。例如

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

(loginconfirm.php),或

<h1> Log in failed </h1>

(登录失败.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”作为布局,而不是“布局”

4

1 回答 1

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';
 }
于 2012-11-15T15:57:32.277 回答