Страница обработки PHP не работает
Я пытаюсь сделать систему входа, со страницей login.php
и размещение формы действий в processlogin.php
Система использует php/html и SQLite3.
Форма работает нормально, проблема у меня в том, когда она на самом деле перенаправляет меня на processlogin.php
стр. У меня есть куча строк, настроенных на вывод, чтобы показать мне, где что-то не так, проблема в том, что я даже не получаю самую первую строку на странице. Я пробовал разные догадки уже больше часа и никуда не попал. Единственное, что я обнаружил, это то, что, если я удаляю весь второй оператор 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), что не имеет смысла для меня, этот код необходим!
1 ответ
Просто добавьте точку с запятой ;
на линии 53
$sql ="INSERT INTO Users (uniqueID,DisplayName,LoginName,Level,Email,Password) VALUES (NULL,'$displayNameFromPost', '$loginNameFromPost', '0', '$emailFromPost', '$hash');";
Надеюсь это поможет!