尝试从数据库验证密码时页面空白

时间:2012-05-15 06:57:09

标签: php mysql login

以下是header.php的开头,它是一个包含在我所有页面顶部的文件。就像现在一样,它所包含的每个页面都在浏览器中显示为空白 - 我可以做错什么? (数据库的登录凭据,此处替换为x:es,是正确的。)

session_start();

if (isset($_POST['log_out'])) {
    session_unset();
    session_destroy();
    $_SESSION = array();
}

if (isset($_POST['username']) && isset($_POST['password'])) {

    $salt1 = "ghjfdghpuaqXC"
    $salt2 = "GHLUYKRGrtuuh"
    $password = sha1($salt1 . $_POST['password'] . $salt2);

    $db_hostname = 'xxxxxxxx';
    $db_username = 'xxxxxxxx';
    $db_password = 'xxxxxxxx';
    $db_database = 'xxxxxxxx';

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

    mysql_select_db($db_database)
        or die("Unable to select database: " . mysql_error());

    $query = "SELECT password FROM users WHERE name = '" . $_POST['username'] . "'";
    $passwordindatabase = mysql_query($query);

    if ($password == $passwordindatabase) {
        $_SESSION['logged_in'] = true;
        $_SESSION['user'] = $_POST['username'];
        unset($_POST['username']);
        unset($_POST['password']);
    }
}

3 个答案:

答案 0 :(得分:3)

我猜您应该在密码查询中使用mysql_fetch_row或mysql_fetch_assoc来使用输出

$passwordindatabase = mysql_fetch_row(mysql_query($query));

答案 1 :(得分:0)

$passwordindatabase = mysql_query($query);

if ($password == $passwordindatabase) {

没有意义。你应该使用:

$ passwordindatabase只包含查询,而不是结果! 然后,在得到结果后,您应该分配确切的结果变量,如下所示:

if (mysql_num_rows($passwordindatabase != 0) {
    $row = mysql_fetch_assoc($result);
    $passwordindatabase = $row["password"];
}

答案 2 :(得分:0)

mysql_query返回一个MySQL资源。必须首先将此资源“转换”为某个PHP值,例如字符串或数组。

您希望将资源(由mysql_query返回)与字符串(密码)进行比较。当然,这些永远不会匹配。因此,您必须先将资源转换为字符串。对于具有多个选定列的任何将来查询,我将首先将其转换为数组:

$resultarray = mysql_fetch_assoc($passwordindatabase);

然后可以从这个数组中获取密码:

$resultstring = $resultarray['password'];

作为旁注,我是否可以指出,您必须绝对$_POST['username']之类的原始POST结果转移到mysql_real_escape_string,然后再将其提供给您的数据库?