我正在尝试创建一个登录系统,使用页面login.php
并将表单操作发布到processlogin.php
该系统使用php/html和SQLite3。
表单运行良好,问题是当它实际将我重定向到processlogin.php
页面时。我设置了一堆字符串来输出,以显示哪里出现了问题,问题是我甚至没有得到页面上的第一个字符串。一个多小时以来,我一直在尝试不同的预感,但没有取得任何进展。我发现的唯一一件事是,如果我删除整个2nd-if语句(检查是否设置了post值register
),我就会得到第一个输出。
这是我的processlogin.php
-如果需要任何其他代码,我会非常乐意分享它
<?php
session_start();
class MyDB extends SQLite3 {
function __construct() {
$this->open('../db/tables.db');
}
}
$db = new MyDB();
if(!$db){
echo $db->lastErrorMsg();
} else {
echo "<p style='display:none;'>Opened database successfully</p>'n";
}
if(isSet($_POST['login'])) {
echo "<p style='display:none;'>login posted</p>'n";
$loginNameFromPost = sqlite_escape_string($_POST['loginname']);
$passwordFromPost = sqlite_escape_string($_POST['password']);
$ret = $db->query("SELECT * from Users WHERE LoginName='$loginNameFromPost' LIMIT 1;");
while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
$hashedPasswordFromDB = $row['Password'];
$levelFromDB = $row['Level'];
$usernameFromDB = $row['DisplayName'];
}
if (password_verify($passwordFromPost, $hashedPasswordFromDB)) {
$_SESSION['Username'] = $usernameFromDB;
$_SESSION['Level'] = $levelFromDB;
echo "<META http-equiv='"refresh'" content='"0;URL=../index.php'">";
} else {
echo "<META http-equiv='"refresh'" content='"0;URL=../login.php?err=1'">";
}
}
if(isSet($_POST['register'])) {
echo "<p style='display:none;'>register posted</p>'n";
$loginNameFromPost = sqlite_escape_string($_POST['loginname']);
$passwordFromPost = sqlite_escape_string($_POST['password']);
$emailFromPost = sqlite_escape_string($_POST['email']);
$displayNameFromPost = sqlite_escape_string($_POST['displayname']);
$options = [
'cost' => 11,
];
$hash = password_hash($passwordFromPost, PASSWORD_BCRYPT, $options);
$sql ="INSERT INTO Users (uniqueID,DisplayName,LoginName,Level,Email,Password) VALUES (NULL,'$displayNameFromPost', '$loginNameFromPost', '0', '$emailFromPost', '$hash');"
$ret = $db->exec($sql);
if(!$ret){
echo $db->lastErrorMsg();
echo "<META http-equiv='"refresh'" content='"0;URL=../login.php?err=2'">";
} else {
echo "Successfully registered'n";
echo "<META http-equiv='"refresh'" content='"0;URL=../login.php?msg=1'">";
}
}
?>
附带说明:过了一段时间,我通过PHP Code Checker
运行了我的代码,它说$ret = $db->exec($sql);
(直接指向第二个`if中的那个),这对我来说毫无意义,需要那个代码!
只需在53行添加分号;
$sql ="INSERT INTO Users (uniqueID,DisplayName,LoginName,Level,Email,Password) VALUES (NULL,'$displayNameFromPost', '$loginNameFromPost', '0', '$emailFromPost', '$hash');";
希望这能有所帮助!