【发布时间】:2012-06-15 19:39:57
【问题描述】:
我确信我只是忽略了一些东西,我花了几天的时间来解决这个问题,但似乎无法弄清楚。
在上一页登录后我得到用户名和密码,
$username = mysql_escape_string($_POST['adminusername']);
$password = mysql_escape_string($_POST['adminpassword']);
然后我去数据库里把用户名和密码从数据库里拉出来,
$sql = "SELECT username, password FROM `weaponsadmin`";
$rows = $db->query($sql); while ($record = $db->fetch_array($rows)) {
现在这是让我感到困惑的部分,如果我有以下内容,无论我使用什么用户名或密码,它都不允许我登录,
if ( ($record[username]==$username) && ($record[password]==$adminpassword) ){
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $adminusername;
header( "Location: admin.php" ) ;
}
else {
header( "Location: index.php?login=error" ) ;
}
但是,如果我使用以下内容,如果用户名正确,它将允许我登录,但它允许我输入任何密码并且它可以工作,
$adminusername = $record[username];
$adminpassword = $record[password];
if ( ($adminusername==$username) && ($adminpassword==$adminpassword) ) {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $adminusername;
header( "Location: admin.php" ) ;
}
else {
header( "Location: index.php?login=error" ) ;
}
总而言之,由于某种原因,&& 部分似乎无法正常工作,如果有人可以帮助我编写代码并让我知道我的代码可以在哪里改进以提高安全性以及如何使其正常工作,谢谢
【问题讨论】:
-
数组索引应该是整数或字符串,所以
$record[username]应该是$record['username']。如果没有引号,PHP 会尝试查找username/password常量。文档:php.net/manual/en/language.types.array.php -
$adminpassword==$adminpassword总是正确的...... -
@Wrikken 是的,这就是问题所在,谢谢,我知道这很简单
标签: php mysql login login-control login-script