PHP处理页面不起作用

时间:2016-04-20 13:13:06

标签: php sqlite

我正在尝试创建一个登录系统,其中包含页面login.php并将表单操作发布到processlogin.php

系统使用php / html和SQLite3。

表单工作正常,我遇到的问题是它实际上将我重定向到processlogin.php页面。我有一堆字符串设置输出,以显示事情失败的地方,问题是我甚至没有得到页面上的第一个字符串。我现在已经尝试了超过一个小时的不同预感,并且没有到达任何地方。我唯一发现的是,如果我删除整个第二个if语句(检查是否设置了后期值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 个答案:

答案 0 :(得分:4)

只需在 53

行添加分号;即可
$sql ="INSERT INTO Users (uniqueID,DisplayName,LoginName,Level,Email,Password) VALUES (NULL,'$displayNameFromPost', '$loginNameFromPost',   '0', '$emailFromPost',  '$hash');";

希望这有帮助!