📜  PHP-登录示例(1)

📅  最后修改于: 2023-12-03 15:18:32.730000             🧑  作者: Mango

PHP登录示例

本示例将演示如何使用PHP完成一个基本的用户登录系统,并使用MySQL数据库存储用户信息。以下是该示例的基本流程:

  1. 用户打开登录页面并输入用户名和密码。
  2. 在提交表单之前,客户端将验证表单字段的有效性。
  3. 一旦表单被验证,客户端将向服务器发送请求。
  4. 服务器将接收到的表单信息与数据库中的用户信息进行比较,验证用户登录是否合法。
  5. 如果登录成功,将创建一个会话,跳转到用户主页。否则,将返回错误信息并保留用户在表单中输入的数据。

现在,让我们一步一步来实现这个示例。

步骤1:创建登录表单

我们将使用带有两个输入字段和一个登录按钮的表单作为我们的登录页面。在表单的HTML标记中,我们还将添加一些JavaScript和CSS来验证和美化表单。

<form method="post" id="login-form" action="auth.php">
    <h2>登录示例</h2>
    <div class="input-group">
        <label for="username">用户名:</label>
        <input type="text" name="username" placeholder="请输入用户名" required>
    </div>
    <div class="input-group">
        <label for="password">密码:</label>
        <input type="password" name="password" placeholder="请输入密码" required>
    </div>
    <div class="input-group">
        <button type="submit" name="login-btn" class="btn">登录</button>
    </div>
    <p class="error"></p>
</form>

<!-- 在此处添加JavaScript和CSS代码 -->

在上面的HTML代码中,我们创建了一个表单,其中有两个输入字段和一个登录按钮。输入字段都是必填字段,并带有占位符。登录按钮将提交表单。我们还添加了一个段落元素,用于在验证过程中显示错误信息。

此外,我们还需要添加一些JavaScript和CSS来验证和美化表单。

<link rel="stylesheet" href="path/to/style.css">

<script>
    // 在此处添加验证表单的JavaScript代码
</script>

为了使表单具有良好的可用性,我们需要添加一些JavaScript来验证表单。我们使用jQuery库,它将大大简化代码。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<script>
    // 验证表单
    $("#login-form").submit(function(e) {
        e.preventDefault();
        var username = $("input[name='username']").val();
        var password = $("input[name='password']").val();
        if (username == "") {
            $(".error").text("请填写用户名");
            return;
        }
        if (password == "") {
            $(".error").text("请填写密码");
            return;
        }
        this.submit();
    });
</script>

在提交表单之前,我们将检查用户名和密码字段是否为空。如果是,我们将显示错误消息并取消表单提交。否则,表单将被提交,将转到服务器。

步骤2:验证用户登录

我们将使用PHP和MySQL数据库来验证用户登录。在此之前,我们需要创建一个数据库表来存储用户信息。

创建数据库与表

使用以下SQL语句来创建名为"users"的新数据库表:

CREATE TABLE users (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(30) NOT NULL,
    password VARCHAR(30) NOT NULL
);

此表将具有三个列:id,username和password。id是主键,将自动递增。用户名和密码是必填项。

验证用户登录

下面是用于检查给定凭据是否有效的基本PHP代码:

<?php
// 连接MySQL数据库
$db = mysqli_connect("localhost", "username", "password", "database_name");
if (!$db) {
    die("连接数据库失败" . mysqli_connect_error());
}

// 验证用户凭据
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
$sql = "SELECT id FROM users WHERE username='$username' and password='$password'";
$result = mysqli_query($db, $sql);
$count = mysqli_num_rows($result);

// 根据验证结果执行相应操作
if ($count == 1) {
    session_start();
    $_SESSION['username'] = $username;
    header("location: home.php");
} else {
    echo "用户名或密码错误";
}

mysqli_close($db);
?>

在这个例子中,我们首先连接MySQL数据库。我们然后从$_POST数组中提取用户名和密码字段,并使用mysqli_real_escape_string函数对它们进行转义,以防止SQL注入攻击。接下来,我们将构建一个SELECT语句,使用提取的用户凭据查询名为"users"的表。我们将调用mysqli_query函数来执行查询,并使用mysqli_num_rows函数获取结果集中的行数。如果行数等于1,则表示提供的凭据有效,我们将创建一个新会话并向用户主页重定向。否则,我们将返回一个错误消息。

请注意,为了在服务器端跨多个页面存储用户会话数据,我们将使用PHP的session_start函数。此函数在启动或继续会话操作时开启会话。

步骤3:创建用户主页

用户主页将显示用户在登录时提供的用户名,并提供一个注销按钮。

<?php
session_start();
if (!isset($_SESSION['username'])) {
    header("location: login.php");
    exit();
}
$username = $_SESSION['username'];
?>

<!DOCTYPE html>
<html>
<head>
    <title>主页 - PHP登录示例</title>
</head>
<body>
    <h1>欢迎回来,<?php echo $username; ?>!</h1>
    <form method="post" action="logout.php">
        <button type="submit" name="logout-btn">注销</button>
    </form>
</body>
</html>

在上面的HTML代码中,我们首先调用session_start函数来获取当前用户的用户名。我们使用$_SESSION数组来存储在从登录页面中接收到的用户名。如果$_SESSION数组未设置,我们将使用header函数将用户重定向到登录页面。

如果当前用户已经通过身份验证,则我们将在用户主页中显示欢迎消息和注销按钮。注销按钮将提交注销表单,并将用户重定向到登录页面。

步骤4:创建注销表单

用户注销表单将包含一个注销按钮。在提交该表单时,当前用户的会话将被销毁。

<form method="post" action="logout.php">
    <button type="submit" name="logout-btn">注销</button>
</form>

请注意,此表单的操作路径是"logout.php"。我们将在下一个步骤中创建这个文件。

步骤5:创建logout.php文件

在logout.php文件中,我们将销毁用户的会话,并将其重定向到登录页面。

<?php
session_start();
unset($_SESSION['username']);
session_destroy();
header("location: login.php");
?>

在这个例子中,我们首先使用session_start函数来启动当前会话。接下来,我们使用unset函数删除当前会话中的用户名$_SESSION['username']。最后,我们使用session_destroy函数销毁当前会话。这将删除会话文件并释放所有会话变量。

最后,我们使用header函数将用户重定向到登录页面。现在,用户已经完全注销,并且必须重新验证其凭据才能访问受保护的页面。

结论

在本示例中,我们演示了如何使用PHP和MySQL数据库创建一个基本的用户登录系统。我们学习了如何创建登录表单、验证用户凭据、创建会话、创建用户主页和注销表单,并在必要时重定向到登录页面。注意,本示例仅包含基本功能,并不能防范高级攻击。为了保护网站和用户,我们应该采用额外的安全措施,如使用密码哈希函数和防止CSRF攻击。