php - 如何进行下一步登录

标签 php mysql

我正在学习 MySQL 和 PHP,我尝试构建一个简单的登录网页并与 MySQL 连接。 我已经用 HTML 和 CSS 构建了页面,还下载了 PHP 并安装了 MySQL,我对如何组合这些东西感到困惑,当我输入密码和用户名时,它会转到成功的页面。

我不是在寻求答案,而是需要一些下一步的建议。

最佳答案

请注意 - 我的 SQL 查询在此处编写的方式对 SQL 注入(inject)开放 ( see here to get the changes you would need to make )

所以开始吧。您想要创建一个数据库表来存储您的用户、一个用于创建用户的表单以及一些用于将数据查询到数据库中的代码。

我会从这样的表单开始:

<form method="post" class="mt-3">
<input type="hidden" name="do" value="create" />
                <div class="form-group">
                    <label for="itemName">First Name</label>
                    <input type="text" class="form-control" name="firstName">
                </div>
                <div class="form-group">
                    <label for="serialNumber">Last Name</label>
                    <input type="text" class="form-control" name="lastName">
                </div>
                <div class="form-group">
                    <label for="serialNumber">Username</label>
                    <input type="text" class="form-control" name="userName">
                </div>
                <div class="form-group">
                    <label for="serialNumber">Password</label>
                    <input type="password" class="form-control" name="passWord">
                </div>
                <a id="create-member" class="btn btn-success text-white">Submit</a>
            </form>

然后您需要一些代码来获取该表单中的值并将它们转换为查询以将该信息添加到您的表中。

if(isset($_POST['do'])) && $_POST['do'] == 'create' 
{
    $firstName = $_POST['firstName'];
    $lastName = $_POST['lastName'];
    $username = $_POST['userName'];
    $password = password_hash($_POST['passWord'], PASSWORD_BCRYPT);

        $sql = "INSERT INTO members (first_name, last_name, username, password) VALUES ('".$firstName."', '".$lastName."', '".$username."', '".$password."')";
        mysqli_query($conn, $sql); //$conn is set in my header file and included into every page.
}

这几乎是创建用户并将其添加到表中的过程,显然您必须将其分解并将值更改为表中的值等。

Next it's the case of verifying a login.

首先,登录表单:

<form method="post">
        <input type="hidden" name="do" value="login" />
        <div class="form-group">
            <label for="usename">Username</label>
            <input type="text" class="form-control" id="username" name="username">
        </div>
        <div class="form-group">
            <label for="password">Password</label>
            <input type="password" class="form-control" id="password" name="password">
        </div>
        <button type="submit" class="btn btn-primary">Login</button>
    </form>

然后是一个身份验证查询,这将获取登录页面中的信息,对您输入的密码进行哈希处理,然后将其与数据库中的密码进行比较。

if (isset($_POST['do']) && $_POST['do'] == 'login')
{
        $username = $_POST['username'];
        $password = $_POST['password'];

        $sql = "SELECT id, first_name, last_name, password FROM members WHERE username= '$username'";
        $query = mysqli_query($conn, $sql) or die(mysqli_error($conn));

        if($query->num_rows == 0)
        {
            echo "Username or password incorrect";
        }else{
            $data = mysqli_fetch_array($query);
            if(!password_verify($password, $data['password']))
            {
                echo "Username or password incorrect";
            }else{
            session_regenerate_id();
            $_SESSION['loggedin'] = true;
            $_SESSION['username'] = $_POST['username'];
            $_SESSION['member_id'] = $data['id'];
            $_SESSION['first_name'] = $data['first_name'];
            $_SESSION['last_name'] = $data['last_name'];


            }
        }
    }
}
?>

不要害怕底部的 $_SESSION 变量,我只是将所有用户数据设置为这样,以便更容易在其他页面上访问它,然后我只是在我的 index.php 页面上添加一个标题。在我的标题中,我还检查 $_SESSION['loggedin'] 是否设置为 true,如果没有,它会将它们重定向到登录页面(还要注意考虑到用户可能位于登录页面上,您不希望重定向错误)

这是我在这个网站上的第一个详细答案,所以我希望它对您有所帮助:)

关于php - 如何进行下一步登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55422238/

相关文章:

php - 结果显示在 phpmyadmin 中,而不显示在浏览器中

php - 使用 group by condition 使结果唯一

mysql - 操作无法完成,因为 DbContext 已在 Mysql 和 Entity Framework 中释放

mysql - 为什么在 Node.js 中使用 escape() 时 MySQL 不显示错误?

php - 如何填充表单以编辑现有数据

javascript - 通过电子邮件发送 JavaScript 对象数组

php - 防止另一个用户同时插入数据

mysql - Mac 操作系统 : MySQL gem install fail (RoR)

MySQL连接问题

mysql - Doctrine/mysql的图形关系图?