[英]How do I check the password?
最近发现我的登录处理程序中存在问题。 事实是,即使输入的密码正确并且与数据库中的密码匹配,脚本仍然会将我发送到错误页面。
session_start();
include ("db.php");
if (isset($_POST['login'])) {
$login = $_POST['login'];
$login = stripslashes($login);
$login = htmlspecialchars($login);
$login = trim($login);
if ($login == '') {
unset($login);
}
}
if (isset($_POST['password'])) {
$password=$_POST['password'];
$password = stripslashes($password);
$password = htmlspecialchars($password);
$password = trim($password);
$password = hash("md5",$password);
if ($password =='') {
unset($password);
}
}
if (empty($login) or empty($password))
{
exit (header('location:index.php'));
}
$result = mysql_query("SELECT * FROM users_data WHERE login='$login'");
$row = mysql_fetch_array($result);
if (empty($row['password']))
{
exit (header('location:mistake.php'));
}
else {
if ($row['password']==$password) {
$_SESSION['login']=$row['login'];
$_SESSION['users_id']=$row['users_id'];
header('location:first.php');
}
else {
header('location:mistake.php');
}
}
HTML形式:
<form action="login.php" method="post" class="login">
<label><span>Login:</span>
<input name="login" type="text" size="20" maxlength="100">
</label>
<label><span>Password:</span>
<input name="password" type="password" size="20" maxlength="100">
</label>
<p>
<input type="submit" name="submit" class ="submit" value="Login">
</p>
UPD:谢谢您的回答,终于找到问题所在了-我刚刚在数据库中指定的密码值长度不足。
首先,为什么将密码存储在数据库中而不散列密码(例如md5)。
如果这样做,则无需处理密码,您只需将存储的md5(password)
与用户发布的密码的md5哈希值进行比较即可。
另外,由于编码的原因,很可能会将您重定向到mistake.php
页面而不是success.php
页面。
如果您向我们提供了用于测试代码的密码(假设您正在测试它;;)),这将有所帮助。
干杯!
编辑:请查看更好的加密技术,如@jayblancard在以下评论中所建议。
尝试使用isset()代替空
if (isset($row['password']))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.