Страница обработки 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');";

Надеюсь это поможет!

Другие вопросы по тегам