简单的PHP / MySQL用户注册工作,但无法使用用户名登录

时间:2013-03-19 21:16:25

标签: php mysql

我正在开发一个简单的用户登录系统,可以在我自己的机器上练习。

我有一个mysql表用户,用户名,密码和电子邮件。我能够使用以下内容注册新用户:

//short variable names:

$email = $_POST['email'];
$username = $_POST['username'];
$password = $_POST['password'];
$password2 = $_POST['password2'];

session_start();

//attempt to register
register($username, $email, $password); 

我创建了这个函数以在db中输入它使用以下函数:

 function register($username, $email, $password){
//register new person with db
//return true or error

//connect to db
$db = db_connect();

//check if username is unique
$result = $db->query("SELECT * from user where username = '".$username."'");
if(!$result){
    throw new Exception('Could not execute query');
}

if($result->num_rows>0){
    throw new Exception('That username is taken - go back and choose another one.');
}

//if ok, put in db
$result = $db->query("INSERT into user values
        ('".$username."', sha1('".$password."'), '".$email."')");

if(!$result){
    throw new Exception('Could not register you in database - Please try again later.');
}

return true;

}

然后我注册了变量

//register session variable
$_SESSION['valid_user'] = $username;

echo 'Your registration was successful. Go to the members page to start setting up your profile!';

当我尝试使用用户名和密码登录时,此处无法使用登录代码:

function login($username, $password){
//check username and password with db
$db = db_connect();

//check if username unique
$result = $db->query("SELECT * FROM user where username = '".$username."' and password = sha1('".$password."')");
if(!$result){
    throw new Exception('Could not log you in.');
}
if($result->num_rows > 0){
    return true;
} else {
    throw new Exception('Could not log you in.');
}
}

我知道它不安全它只是在我的机器上练习所以我可以向上移动,有没有人有任何解释?密码在db中注册为sha1 varchar,我认为这是我没有这样做的地方吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

问题最可能在于您的 VARCHAR 密码定义。 sha1 是160 BIT长。

无论如何我不建议在 VARCHAR 字段中存储密码,而是使用 BINARY(20) UNHEX 功能来转换 SHA1 值为二进制。

在数据库中有很多记录(数千,数百万)二进制(20)比varchar或char占用更少的内存。

将其更改为 CHAR(40)

答案 1 :(得分:-1)

尝试

function login($username, $password){
//check username and password with db
$db = db_connect();

//check if username unique
$result = $db->query("SELECT * FROM user where username = '".$username."' and password = sha1('".$password."')");
if(!$result){
    throw new Exception('Could not log you in.');
}
if(mysql_num_rows($result) > 0){
    return true;
} else {
    throw new Exception('Could not log you in.');
}
}

我更改了条件检查num行。