【发布时间】:2015-12-23 21:35:46
【问题描述】:
所以基本上我要做的是在登录提交时验证密码匹配。但它失败了......在注册提交时,我使用 crypt() 对用户密码进行加密,并将其存储到数据库中没有问题。
我的数据库有一个表 users 有 6 行 ID / Name / Surname / Login / 密码 / 电子邮件
在登录提交时,我通过登录检查用户是否存在并且它成功,然后检查密码,这是失败的地方,我不知道问题出在哪里,因为我在另一台服务器上测试过这个脚本一次并且它工作...神奇的事情发生了...任何帮助将不胜感激,也许我可以优化一些东西,或者在从另一个文件复制/粘贴代码时我做错了什么,我看不到它
login.php
<?php
session_start();
require ('./include/connect.php');
if(isset($_POST['logBtn']))
{
$login = mysqli_real_escape_string($connect, $_POST['login']);
$pass = mysqli_real_escape_string($connect, $_POST['pass']);
$sql = "SELECT * FROM `users` WHERE `Login` = '".$login."'";
$result = mysqli_query($connect, $sql);
$row = $result->fetch_array();
$db_pass = $row['Password'];
$hashed_pass = crypt($pass, $db_pass);
if($result->num_rows > 0)
{
if($hashed_pass == $db_pass)
{
echo "<script>alert('You have successfully logged in!')</script>";
echo "<script>window.open('welcome.php','_self')</script>";
$_SESSION['user'] = $login;
}
else
{
echo "<script>alert('Wrong login or password!')</script>";
}
}
else
{
echo "<script>alert('No users with such login found in the database!')</script>";
}
}
mysqli_close($connect);
?>
<!DOCTYPE html>
<html>
<body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Login</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script src="./scripts/go_back.js"></script>
</head>
<div class="login">
<form action="login.php" align="center" method="post">
<br>
<input type="text" name="login" placeholder="Login" required oninvalid="this.setCustomValidity('Enter login!')" oninput="setCustomValidity('')" />
<br><br>
<input type="password" name="pass" placeholder="Password" required oninvalid="this.setCustomValidity('Enter password!')" oninput="setCustomValidity('')" />
<br><br>
<button class="back_btn" onclick="goBack()">Go back</button>
<input class="login_btn" type="submit" name="logBtn" value="Log In">
<br><br>
</form>
<a href="register.php"><button class="no_acc_btn">I do not have an account</button></a>
</div>
</body>
</html>
【问题讨论】:
-
这需要逐步调试,而不是 Stack Overflow 上的问题。
-
系统可能不支持您使用的算法。请尝试将
echo "$hashed_pass || $db_pass";放在下方,看看它们之间的区别。 -
是的,$hashed_pass != $db_pass