无法拉取使用PASSWORD()函数的信息表单数据库

时间:2011-08-09 02:23:49

标签: php mysql

我有这个用户登录过程页面。此时用户已输入信息,所有这些都有效,但我无法弄清楚如何将加密的密码从数据库中提取出来。我需要用PASSWORD()函数提取并且不知道如何。我知道这不是最好的方法,但它是作业所要求的。我有问题部分注释掉了我认为那些需要修复的东西。

//sets $query to read usnername and passowd from table
$query = "SELECT username,password,first_name,last_name FROM jubreyLogin WHERE username      
= '$userName' AND password=password('$userPassword')";
$result = mysql_query($query,$db);
if(mysql_error())
{
echo $query;
echo mysql_error();
}

//reads data from table sets as an array
//checks to see if user is already registered
while($row=mysql_fetch_array($result))
{
if($userName == $row['username'] /*&& $userPassword == ($row['password'])*/)
{
    $login = 'Y';
    $welcome = "Welcome" . " " .$row['first_name']. " " .$row['last_name'];
    $userName = $row['username'];

}
}

if ($login='Y')
{

    setcookie('name',$welcome,time()+60*60*24*30);

    setcookie('login',"Y",time()+60*60*24*30);
    $_SESSION['username_login'] = $userName;
    header('Location: welcome.php');
}

以下是我应首先发布的修改后的代码我需要它来检查用户输入的密码,在这种情况下,$ userPassword带有加密密码,如果匹配则会将用户发送到网站的下一页。

2 个答案:

答案 0 :(得分:2)

您不需要以明文形式查看密码(即使您想要也不能)。当您在密码和用户名上查看记录时,您不需要在if()语句中进行检查。如果找到任何行,则表示用户名/密码组合是succesfful,用户可被视为已登录。

编辑: 更新的代码对实际逻辑没有任何影响。逻辑保持不变,您使用用户名和加密密码查询数据库,如果匹配意味着用户有权登录,那么您继续设置cookie /会话数据并重定向。虽然我没有真正看到登录cookie和欢迎cookie的需要,但您可以简单地在会话中输入用户名,fname和lname。如果以下页面上的会话包含表示用户已登录的用户名。

代码可以是这样的:

//sets $query to read usnername and passowd from table
$query = "SELECT username,first_name,last_name FROM jubreyLogin WHERE username = '$userName' AND password=password('$userPassword')";
$result = mysql_query($query,$db);
if(mysql_error())
{
    echo $query;
    echo mysql_error();
}

// were any rows returned?
if(mysql_num_rows($result)){
    list($userName, $firstName , $lastName) = mysql_fetch_row($result);
    $welcome = "Welcome" . " " .$firstName. " " .$lastName;

    setcookie('name',$welcome,time()+60*60*24*30);
    setcookie('login',"Y",time()+60*60*24*30);
    $_SESSION['username_login'] = $userName;

    header('Location: welcome.php');
}

答案 1 :(得分:0)

你不应该加密密码,你应该对它们进行哈希处理。尝试使用phpass等库来保证安全。您需要做的是散列密码并将散列值存储在数据库中。当用户登录时,您将对它们提供的密码进行哈希处理,并将其与数据库中的哈希值进行比较。如果哈希匹配,则提供的密码是正确的。如果没有,则向用户发送错误。您永远不需要能够以纯文本形式获取密码以验证用户。

另外,请确保使用mysql_real_escape_string()或预处理语句转义变量,否则您的脚本将容易受到SQL注入攻击。