0

以下是 header.php 的开头,这是一个包含在我所有页面顶部的文件。就像现在一样,它包含的每个页面在浏览器中都是空白的——我做错了什么?(这里用 x:e​​s 替换的数据库登录凭据是正确的。)

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']);
    }
}
4

3 回答 3

3

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

$passwordindatabase = mysql_fetch_row(mysql_query($query));
于 2012-05-15T07:03:00.173 回答
0

线条

$passwordindatabase = mysql_query($query);

if ($password == $passwordindatabase) {

没有意义。你应该使用:

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

if (mysql_num_rows($passwordindatabase != 0) {
    $row = mysql_fetch_assoc($result);
    $passwordindatabase = $row["password"];
}
于 2012-05-15T07:04:20.313 回答
0

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

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

$resultarray = mysql_fetch_assoc($passwordindatabase);

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

$resultstring = $resultarray['password'];

作为旁注,我是否可以指出,在将原始 POST 结果输入数据库之前,您必须像with一样绝对转义它们?$_POST['username']mysql_real_escape_string

于 2012-05-15T07:05:14.547 回答