我正在尝试用PHP和MYSQL创建一个非常简单的CMS。我遇到的问题是,每当我尝试登录时,如果我输入错误的用户名,我想要发生的事情就会发生。它会转到一个显示错误输入的屏幕,并有一个返回到登录页面的链接。但是,如果我输入了正确的用户名和错误的密码,它只会重新加载页面,如果我输入了正确的密码,则会出现相同的屏幕,就好像我输入了错误的用户名一样,告诉我用户名或密码是错误的。我已经检查了数据库,以确保我输入的密码正确,用户名和密码都正确,但它不起作用。谁能帮我解决这个问题?提前谢谢你
以下是您可能需要查看的功能:
function verifyUser($name, $pass)
{
// Escape strings
$username = mysql_real_escape_string($name);
$password - mysql_real_escape_string($pass);
$result = mysql_query("select * from users where username='$username' and password-'$password' limit 1");
if (mysql_fetch_array($result))
{
return true;
} else{
return false;
}
}
function validateUser($name, $pass)
{
$check = verifyUser($name, md5($pass));
if($check)
{
$_SESSION['status'] = 'authorized';
header('Location: http://localhost/cms/admin/index.php');
} else{
echo'Please enter a correct username and password <br />';
echo "<a href='http://localhost/cms/admin/login.php'>Try Again?</a>";
exit;
}
}
这是登录.php文件:
require_once '../functions.php';
connect();
if($_POST['username'] && $_POST['password'])
{
$result = validateUser($_POST['username'], $_POST['password']);
}
?>
<form method="post" action="">
<p>
<label for="name">Username: </label>
<input type="text" name="username" />
</p>
<p>
<label for="password">Password: </label>
<input type="password" name="password" />
</p>
<p>
<input type="submit" id="submit" value="Login" name="submit" />
</p>
</form>
我收到一个通知:未定义的索引:C:''xampp''htdocs''cms''admin''login.php 第 14 行中的用户名
尝试在成功登录尝试的header('Location: ...');
行后添加die();
。
要更正未定义的索引错误,请在登录.php中更改以下内容:
if( isset($_POST['username']) && isset($_POST['password']) )
此外,您的查询中有一个错误。减号应该是等号(你有password-'$password'
.除非需要捕获用户数据,否则应尝试计算结果,而不是获取结果。
$result = mysql_query("select * from users where username='$username' and password='$password' limit 1");
if ( mysql_num_rows( $result ) > 0 )
阅读mysql_fetch_array。
基本上,线路if (mysql_fetch_array($result))
是问题所在。这不一定是像你的 if/else 期望的那样是一个布尔答案。相反,它要么返回资源,要么返回FALSE
。因此,$check
永远不会被赋予true
的价值。
此外,但重要的是,您正在使用的函数已被弃用。阅读MySQLi或PDO_MySQL。
这可能微不足道,但请注意,密码变量后有"-"而不是"=",两次
$password - mysql_real_escape_string($pass);
$result = mysql_query("select * from users where username='$username' and password-'$password' limit 1");
使用正确的查询
$result = mysql_query("select * from users where username='{$username}'
AND password='{$password}' limit 1");
if($result){
return true;
}else{
return false;
}
并且还使用
if(isset($_POST["username"]) && isset($_POST["password"])){
$check=verifyuser($_POST["username"],sha1($_POST["password"]));//sha1 is more secure than md5
}