我有一个网站,我在表格中存储用户名和散列密码。我正在尝试将此信息(用户名和哈希密码)与从我的登录站点传递的登录信息进行比较。不幸的是,这一直在崩溃。如果有人能指出我正确的方向,我会做错,我会很感激。下面是我用来检查登录的代码。这可能是非常简单的事情,因为我仍然是php的新手。
<?php
$myServer = "server.domain.com";
$myUser = "readaccess";
$myPass = "password";
$myDB = "database";
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
//declare the SQL statement that will query the database
$query = "SELECT password, salt ";
$query. = "FROM dbo.members ";
$query. = "WHERE username = '$myusername' ";
$result = mssql_query($query)
or die('A error occured: ' . mssql_get_last_message());
// SQL_num_row is counting table row
$count=mssql_num_rows($result);
if($count) < 1) //no such user exists
{
header('Location: main_login.php');
}
$userData = mssql_fetch_array($result, MSSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $mypassword) );
if($hash != $userData['password']) //incorrect password
{
header('Location: main_login.php');
}
else {
header('Location: index.php');
}
?>
答案 0 :(得分:0)
我认为问题在于这一行
$result = mssql_query($query)
or die('A error occured: ' . mssql_get_last_message());
检查失败的正确方法是
$result = mssql_query($query, $dbhandle);
if(!$result)
die('A error occured: ' . mssql_get_last_message());
请注意,这也适用于mssql_connect和mssql_select_db语句。 请注意,您需要向mssql_query函数提供数据库资源。
此外,如果您使用.=
之间没有空格,大多数人会发现它更具可读性。我认为它不会产生解析错误,但是将空格保留在操作数之外是很有意义的。 (即使它是合法的,你也不会$counter+ +;
。)
请注意,在询问未来的问题时,请始终包含您看到的任何错误消息,如果引用的是行号,请在代码示例中指出该行。在这种情况下,我不认为你的问题与散列或sql有任何关系,因为它完全是一个解析/语法错误。