2012-05-15 35 views
0

以下是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']); 
    } 
} 
+0

解析错误?否则,'error_reporting(-1); ini_set('display_errors','On');'在脚本的顶部。 –

+0

谢谢。即使在发布错误报告之后,页面仍然是空白的,但下次我会记住它。 – Johanna

+0

是的,在这种情况下它并不重要,因为没有错误......它只是当我看到死亡白屏时的默认响应:) –

回答

0

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

您想比较一个资源(由mysql_query返回)与一个字符串(密码)。那些当然永远不会匹配。所以你必须先将资源转换为一个字符串。对于有多个选择列的任何未来的疑问,我会先将其转换为一个数组:

$resultarray = mysql_fetch_assoc($passwordindatabase);

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

$resultstring = $resultarray['password'];

一点题外话,我可以指出,你必须绝对逃脱原始POST结果,如$_POST['username']mysql_real_escape_string喂养他们到您的数据库之前?

+0

谢谢。添加这个和一些缺少的分号让页面显示。还要感谢关于mysql_real_escape_string的提醒。我仍然无法从数据库中检索和比较密码,但是我会为整个网页的更新代码创建一个新问题。 – Johanna

3

我猜你应该使用和mysql_fetch_row或mysql_fetch_assoc您的密码查询使用输出

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

的线

$passwordindatabase = mysql_query($query); 

if ($password == $passwordindatabase) { 

没有意义。您应该使用:

$ passwordindatabase只包含查询,不是结果! 然后,得到结果后,你应该指定确切的结果变量,就像这样:

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