我的登录页面上的成功登录应该直接指向主页(它会这样做 - 我仔细查看是否设置了变量,并且输入了正确的用户名/密码)。否则,登录页面应该是私有的。
登录PHP(工作正常)
<?php
session_start();
require_once("../inc_files/Lesson_5_DB_Connection.php");
error_reporting(E_ALL);
ini_set('display_errors', 1);
$error_message= "";
$user_name = "";
$user_password= "";
$_SESSION['username']="";
$_SESSION['employeeNumber']="";
if (isset($_POST['submit'])) {
$user_name = $_POST['user'];
$user_password= $_POST['pass'];
// ADD QUERY TO CHECK IF USER/PASS COMBO IS CORRECT
if(!empty($user_name) && !empty($user_password)) {
$query = "SELECT * FROM employees WHERE username='$user_name' and password='$user_password'";
$result = mysqli_query($dbc, $query)
or die ('Error querying username/password request');
if(mysqli_num_rows($result) == 1) {
while ($row = mysqli_fetch_array($result)) {
$_SESSION['username'] = $row['username'];
$_SESSION['employeeNumber'] = $row['employeeNumber'];
}
header("Location: /LESSON5/3%20-%20HOMEPAGE%20:%20WELCOME.php");
exit;
} // end if rows
else {
$error_message = "You were not able to log in";
} // end else
// Direct to other webpage
} // end query
} // end isset
?>
只有设置了$ _SESSION变量,才能看到主页。如果用户未登录(未设置会话变量),则主页应重定向到登录页面。现在,我添加了一个验证,以查看是否未设置变量(!isset)。此验证可防止页面显示任何内容。当我删除此验证时,HTML显示正常。当我删除验证并回显变量值时,我得到返回的值。
只是if(!isset($_SESSION['username']) && !isset($_SESSION['employeeNumber'])
不会在页面上显示任何内容。
首页
<?php
session_start();
require_once("../inc_files/Lesson_5_DB_Connection.php");
if(!isset($_SESSION['username']) && !isset($_SESSION['employeeNumber']) {
header("Location: /LESSON5/1%20-%20LOGIN.php");
}
?>
<!DOCTYPE html>
<head>
<title></title>
<meta charset="utf-8">
<link type="text/css" rel="stylesheet" href="/LESSON5/5_Signup_CSS.css">
</head>
<body>
<p><span id="logout"><a href="/LESSON5/4%20-%20LOGOUT%20PAGE.PHP">Logout</a></span></p>
<hr>
<h1>Welcome to my homepage! <br> You have successfully logged in.</h1>
<?php
mysqli_close($dbc);
?>
</body>
</html>
为什么验证会使PHP显示HTML(如果用户登录正确)或重定向页面(如果用户未登录),是否有任何理由?
答案 0 :(得分:1)
基本上错误出现在你的if
条件中。缺少一个括号。改变如下: -
if(!isset($_SESSION['username']) && !isset($_SESSION['employeeNumber']))
注意: - 尝试在所有php页面的顶部添加error_reporing
,以便在发生错误时可以获得php错误。查看php网站上的error_reporing
手册。感谢。
如果您使用的是本地服务器,则可以更改php.ini
设置。
您可以轻松了解如何在Google上更改php.ini
设置。
ini_set
是php的功能是为了这个目的,如果你想以编程方式而不是直接使用php.ini。