以下是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 :(得分: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
,然后再将其提供给您的数据库?