我遇到以下问题。
基本上我正在使用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”作为布局,而不是“布局”
答案 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';
}