最近在我的登录处理程序中发现了一个问题。问题是,即使输入的密码正确并且与数据库中的密码匹配,脚本仍会将我发送到错误页面。
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:感谢您的回答,最后我找到了问题所在 - 我刚刚在数据库中指定了不够长的密码值。
答案 0 :(得分:0)
首先,为什么要将密码存储在数据库中而不对其进行散列(例如md5)。
如果您这样做,则无需处理密码,您只需将存储的md5(password)
与用户发布的密码的md5哈希值进行比较。
另外,由于编码,您最有可能被重定向到mistake.php
页面而不是success.php
页面。
如果您向我们提供用于测试代码的密码(假设您正在测试它。),那将会有所帮助。
干杯!
编辑:请查看更好的加密技术,如@jayblancard在下面的评论中所建议。
答案 1 :(得分:0)
尝试使用isset()而不是空
if (isset($row['password']))
答案 2 :(得分:0)
我建议您尝试调试代码,错误DOT php在多个地方调用,因此请使用die("die message")
查看哪一个被解雇。
由于您没有对有效和无效输入的代码调试输出进行测试并检查输出。
一旦您对输入和输出感到满意,请检查条件是否符合预期,就像以前使用模具条件一样。
注意:您的代码看起来很混乱,只能倾斜basics
另请参阅OO programming