PHP登录脚本没有“做任何事”

时间:2015-08-06 19:36:35

标签: php

我最近开始恢复我对Web开发的“爱好”并返回PHP。即使我仍觉得我(之前不存在的)技能有点生疏,我已经成功地取得了很大进步。我已经看了很长一段时间这段代码,无法弄清楚为什么这不起作用。这段代码以前有用,所以我很确定我必须删除一些东西,或者我没有注意到一些重要的东西。

无论哪种方式,这都是我目前的PHP代码 结果是,当我登录时,我保持在同一页面上,它似乎没有任何反应。除了页面只是刷新:

function login($db){ 
if(!isset($_SESSION['user']) || !isset($_SESSION['user']['username'])){
    echo "
        <form  method='post' class='logform'>
            <input type='text' class='textlog' placeholder='Username' name='formLoginUser' id='formLoginUser' onkeypress='validateboth(event)' REQUIRED><br><br>
            <input type='password' class='textlog' placeholder='Password' id='formLoginPassword' name='formLoginPassword' REQUIRED><br><br>
            <div class='logcheck'>
                <input type='submit' class='login_bot transparent' value='Login' name='formLoginSubmit' style='float:left;'>
                <a class='login_bot transparent' href='index.php?page=createuser' style='float:left; margin-left:5px;'>Create account</a>
                <a class='login_bot transparent' href='index.php?page=forgotpassword' style='float:left; margin-left:5px;'>Forgotten password</a>
            </div>
        </form>
    ";
    if(isset($_POST['formLoginSubmit'])){
        if(empty($_POST['formLoginUser'])){
            $_SESSION['msg']['warning'][] = "Fill in!!"; 
        if(empty($_POST['formLoginPassword'])){
            $_SESSION['msg']['warning'][] = "Password missing!!"; 
        }
        if(empty($_SESSION['msg']['warning'])){
            $username = $db->real_escape_string($_POST['formLoginUser']);
            $password = encrypt(md5($_POST['formLoginPassword']));
            $sql = "select * from users
                                    where 
                                        username = '{$username}' 
                                    and 
                                        password = '{$password}'
                                    ";
            $sqlQuery = $db->query($sql) or die($db->error);
            $intQuery = $sqlQuery->num_rows;
            if($intQuery == true){
                $sqlFetch = $sqlQuery->fetch_object();
                $_SESSION['user']['username'] = $sqlFetch->username;
                $_SESSION['user']['id'] = $sqlFetch->user_id;
                $_SESSION['user']['level'] = $sqlFetch->user_level;
                header('location: index.php?page=home');
                $_SESSION['msg']['warning'][] = "logged in";
            }
        }else{
            header('location: index.php?page=home');
            $_SESSION['msg']['warning'][] = "wrong details";

        }
    }
}

}
}

我知道这不是数据库的问题,我可以成功注册一个帐户并将其显示在数据库中。

编辑:是的,我正在重定向到同一页面 - 在该页面上我正在调用一个函数来显示一条消息,具体取决于登录是否成功。关键是,我根本没有登录。

调用登录的功能是:

<div id="login-content">
    <?php login($db); ?>
    </div>      

1 个答案:

答案 0 :(得分:0)

使用if($intQuery == true)更改if($intQuery >0),因为num_rows返回整数,因为函数的名称定义了它。 你的查询也容易受到sql注入的攻击,而real_escape_string也不是逃避注入的安全方法。有一篇很好的文章here用于防止sql注入。

提示:您可以使用?><?php跳出PHP代码并在其间键入所需的html,以防止有线错误并拥有清晰的代码。