我做了注册表和登录表。
我首先使用trim(),然后使用md5()将密码存储在数据库中。
我用同样的方法在登录表单中检查了数据库中的密码,但由于某些未知的原因,我无法匹配登录表单中的md5密码。
我只想从数据库里找回密码。
问题是,当我将它存储在数据库中并在php myadmin中检查它时,md5密码类似于123456789,而当我在登录表单中回显它时,它给出了这个1234567890。如果最后为零,则会产生问题,否则将匹配整个md5密码。我的数据库排序规则是latin_1_swedish_ci。
是否存在排序问题?
我使用了varchar值255,然后使用text等,但没有解决方案。
格式或结构有问题吗?
请帮我找回正确的md5密码,消除不需要的零。
function login()
{
if(isset($_POST['login']))
{
if(!$_POST['username'] || !$_POST['password'])
{die (mysql_error());}
else
{
$username = trim($_POST['username']);
$username = addslashes($_POST['username']);
$password = trim($_POST['password']);
$password = md5($_POST['password']);
echo $password;
$check_username = mysql_query("SELECT * FROM users WHERE username = '".$username."'")or die(mysql_error());
$check_username2 = mysql_num_rows($check_username);
if ($check_username2 == 0)
{die ("Username and password doesnt exist");}
else
{
$check_pass = mysql_query("SELECT * FROM users WHERE username = '".$password."'")or die(mysql_error());
$check_pass2 = mysql_num_rows($check_pass);
echo $check_pass2;
}
}
}
}和
function register()
{
if(isset($_POST['submit']))
{
if(!$_POST['first_name'] || !$_POST['last_name'] || !$_POST['username'] || !$_POST['password'])
{header ("Location:user_registration.php");}
else
{
$firstname = trim($_POST['first_name']);
$firstname = addslashes($_POST['first_name']);
$lastname = trim($_POST['last_name']);
$lastname = addslashes($_POST['last_name']);
$username = trim($_POST['username']);
$username = addslashes($_POST['username']);
$password = trim($_POST['password']);
$password = md5($_POST['password']);
connect();
if($mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username' "))
{
$check_row = mysql_num_rows($mysql_check_user);
if($check_row > 0)
die ("username Exist");
else
{
$store = mysql_query
("INSERT INTO `project_upload`.`users`
(`id`, `fname`, `lname`, `username`, `password`)
VALUES (NULL, '$firstname', '$lastname', '$username', '$password')");
}
if ($store)
{echo "You have regstered succesfully. please go to <a href = 'uploads_login.php'>login page</a>"; }
else {echo mysql_error();}
}
}
}
}发布于 2012-01-04 02:14:26
正如我所看到的,你遇到的问题是,你在登录代码的开头有:echo $password;,然后是echo $check_pass_2;,这会导致一个字符串在浏览器中看起来像0,然后就会出现。这是因为$check_pass_2只计算了mysql查询返回的行数,这是0,因为没有用户名和密码相同的用户。所以你真正的问题是mysql-query,它检查是否有一个用户名与某人输入的密码相同的用户,这很奇怪。尝试将login.php中的最后一个查询更改为:
$check_pass = mysql_query("SELECT * FROM users WHERE password = '".$password."'")
or die(mysql_error());请注意,username = '".$password."'已更改为password = '".$password."'。其次,您应该了解,如果您执行以下操作:
$pass = trim($_POST['pass']);
$pass = md5($_POST['pass']);然后,$pass变量将只是md5'd而不会对其产生修剪效果,要实现这一点,您应该这样做:
$pass = trim($_POST['pass']);
$pass = md5($pass);但你不应该修剪你的密码,因为那只是奇怪和不方便,它并没有真正增加任何东西。
执行此操作的代码行:
if($mysql_check_user
= mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username' "))if -语句是多余的,因为你只是做了一个赋值,你可以去掉if,让变量保持原样。即:
$mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username'");另外,在编写代码时尽量保持某种风格,这会让你的代码更容易阅读。大多数代码编辑器在默认情况下都有这个功能,也许你需要在每个换行符上按TAB键才能正确缩进,这是一个巨大的帮助,尽管这样做吧。它看起来是什么样子的例子:
function register()
{
if(isset($_POST['submit']))
{
if(!$_POST['first_name'] ||
!$_POST['last_name'] ||
!$_POST['username'] ||
!$_POST['password'])
header ("Location:user_registration.php");
else
{
$firstname = trim($_POST['first_name']);
$firstname = addslashes($_POST['first_name']);
$lastname = trim($_POST['last_name']);
$lastname = addslashes($_POST['last_name']);
$username = trim($_POST['username']);
$username = addslashes($_POST['username']);
$password = trim($_POST['password']);
$password = md5($_POST['password']);
connect();
if($mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username' "))
{
$check_row = mysql_num_rows($mysql_check_user);
if($check_row > 0)
die ("username Exist");
else
{
$store = mysql_query
("INSERT INTO `project_upload`.`users`
(`id`, `fname`, `lname`, `username`, `password`)
VALUES (NULL, '$firstname', '$lastname', '$username', '$password')");
}
if ($store)
echo "You have regstered succesfully. please go to <a href = 'uploads_login.php'>login page</a>";
else
echo mysql_error();
}
}
}
}发布于 2012-01-03 20:29:10
实际上,没有解密MD5字符的选项。如果你想要比较,你必须将输入转换成MD5字符串,这样你就可以很容易地与db中存储的值进行比较。
https://stackoverflow.com/questions/8710982
复制相似问题