我在以下方面遇到了一些问题。
本质上,我正在使用 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”作为布局,而不是“布局”