PHP SQLite登录系统有效性

PHP SQLite登录系统有效性,php,sql,sqlite,login,system,Php,Sql,Sqlite,Login,System,我自己已经试了一个星期了。正如您可以通过下面的随意代码清楚地看到的,我正在尝试创建一个SQL登录系统。它使用一个SQLite文件,当我运行代码进行故障排除时,不会出现PHP错误。我假设这意味着我检查结果的方式或SQL有问题。一、 首先,我完全迷路了。感谢您的帮助。 session_start(); $user = strtolower(sqlite_escape_string($_POST['username'])); $pass = strtolower(sqlite_escape_stri

我自己已经试了一个星期了。正如您可以通过下面的随意代码清楚地看到的,我正在尝试创建一个SQL登录系统。它使用一个SQLite文件,当我运行代码进行故障排除时,不会出现PHP错误。我假设这意味着我检查结果的方式或SQL有问题。一、 首先,我完全迷路了。感谢您的帮助。

session_start();

$user = strtolower(sqlite_escape_string($_POST['username']));
$pass = strtolower(sqlite_escape_string($_POST['password']));

$db = sqlite_open('my DB.sqlite', 0666, $sqlerr);

$query = sqlite_query($db, "SELECT COUNT(*) FROM USERS WHERE USER = '$user' AND PASS = '$pass'", $sqlerr);
$result = sqlite_fetch_all($query, SQLITE_ASSOC);

if (count($result) == 1) {
    $_SESSION['loggedin'] = true;
    $_SESSION['loginFail'] = false;
    $_SESSION['user'] = $_POST['username'];
}

if ($sqlerr != null) {
    $_SESSION['sqlerr'] = $sqlerr;
}

if (!$_SESSION['loggedin']) {
    $_SESSION['loginFail'] = true;
}

sqlite_close($db);
header("Location: index.php");
exit();
(另外,如果我忘记了任何信息,也很抱歉。我已经有一段时间没有发布StackOverflow问题了。)

这是您的问题:

$query = sqlite_query($db, "SELECT COUNT(*) FROM USERS WHERE USER = '$user' AND PASS = '$pass'", $sqlerr);
$result = sqlite_fetch_all($query, SQLITE_ASSOC);

if (count($result) == 1) {
您要求从数据库中计算行数,类似于
1
,然后检索此结果并将其放入数组(
$result
),然后计算
$result
中的条目数。
count($result)
的结果总是正好是1


您需要比较从数据库返回的值,或者使用
SELECT*
而不是
SELECT COUNT(*)

请注意,从PHP 5.4开始,函数族正在转换为可选扩展。这可能意味着这些功能可能在某些地方不可用。您可能应该切换到或扩展名。与您的问题没有直接关系,但在数据库中以纯文本形式存储密码是一个主要的安全问题。使用诸如PBKDF2、bcrypt或scrypt之类的密钥派生函数非常容易,并且在发生信息泄露攻击时将极大地提高密码的安全性。