我在这里制作了一个简单的登录脚本。 有3个文件,1个是functions.php(包含登录功能),然后是userdashboard.php,其中包含一些用户函数,然后是另一个文件users.php,用于处理登录。
问题是,每当我登录时,登录成功但会引发错误: - unknow variable username 。
它应该显示登录用户的用户名,我做错了什么? 这是代码: -
的functions.php
<?php
include 'dbconnector.php';
function checklogin($username,$password)
{
include 'dbconnector.php';
$userexists=false;
$username=mysql_real_escape_string($username);
$password=mysql_real_escape_string($password);
$password=md5($password);
$query="select * from f_users where username = '" . $username . "' and password = '" . $password . "'";
$result=mysql_query($query,$db) or die (mysql_error($db));
if(mysql_num_rows($result) > 0)
{
$userexists=true;
}
else
{
$userexists=false;
}
return $userexists;
}
userdashboard.php
<?php
include('dbconnector.php');
session_start();
if(isset($_SESSION['logged']) && $_SESSION['logged']=1)
{
$_SESSION['username']=$username;
echo "Hello " . $username;
}
else
{
header('Location:login.php');
}
echo '<a href="logout.php">logout</a>';
?>
处理登录的文件。
include 'functions.php';
.
.
.
case 'login':
$username=$_POST['username'];
$password=$_POST['password'];
$username=mysql_real_escape_string($username);
$password=mysql_real_escape_string($password);
$password=md5($password);
if((!empty($username)) && (!empty($password)))
{
if(!checklogin($username,$password))
{
$_SESSION['logged']=1;
$_SESSION['username']=$username;
header('Location:userdashboard.php');
}
else
{
echo "Invalid combination of username and password";
echo "redirecting to the login page";
header('refresh:2;URL=login.php');
}
}
else
{
echo "username or password fields cannot be empty, redirecting";
header('refresh:2;URL=login.php');
}
break;
感谢Houssni的修复。 我在这里有一个奇怪的错误。
即使我尝试使用用户名和密码的有效组合,它总是会转到else部分并抛出错误。 我在这做什么错?
$username=mysql_real_escape_string($username);
$password=mysql_real_escape_string($password);
$password=md5($password);
$query="select * from f_users where username = '" . $username . "' and password = '" . $password . "'";
$result=mysql_query($query,$db) or die (mysql_error($db));
if(mysql_num_rows($result) > 0)
{
session_start();
$_SESSION['logged']=1;
$_SESSION['username']=$username;
header('Location:userdashboard.php');
exit();
}
else
{
echo mysql_num_rows($result);
echo "Invalid combination of username and password";
echo "redirecting to the login page";
header('refresh:2;URL=login.php');
exit();
}
答案 0 :(得分:2)
$username
是一个参数,因此您只能在其功能范围内使用它。
通过$_POST
获取用户名或在该功能中设置$_SESSION
。
或者在userdashboard.php
中,您应该再次分配变量$username
并给出其值。
在functions.php
中,你在此函数中有另一个包含。如果调用此函数,则包含此文件两次。
在你给你header("Location: ")
的地方结束时,你应该调用exit()
,因为它会继续运行该页面的PHP代码。
答案 1 :(得分:2)
你的userdashboard.php还有另一个错误
更改
if(isset($_SESSION['logged']) && $_SESSION['logged']=1)
{
$_SESSION['username']=$username;
echo "Hello " . $username;
}
要
if(isset($_SESSION['logged']) && $_SESSION['logged']==1)
{
$_SESSION['username']=$username;
echo "Hello " . $username;
}
答案 2 :(得分:0)
session_start()函数需要包含在条件部分
中 if((!empty($username)) && (!empty($password)))
{
if(!checklogin($username,$password))
{
session_start(); // added session start
$_SESSION['logged']=1;
$_SESSION['username']=$username;
header('Location:userdashboard.php');
exit();
}
else
{
echo "Invalid combination of username and password";
echo "redirecting to the login page";
header('refresh:2;URL=login.php');
exit();
}
}