PHP - MySQL 登录



MySQL 是 PHP 驱动 Web 应用的流行后端数据库选择。在本章中,我们将学习为 PHP 应用开发一个登录页面,该页面验证给定的用户名和密码。

您应该有一个安装了 PHP 和 MySQL 的 Web 服务器,以便试验本章中讨论的示例。您可以轻松安装 Apache、PHP 和 MySQL (MariaDB) 的捆绑二进制文件(例如 XAMPP)。

在运行示例代码之前,您应该有一个名为 mydb 的 MySQL 数据库,其中必须有一个名为 admin 的表。您可以使用以下 SQL 脚本创建表并插入测试数据:

use mydb;

CREATE TABLE `admin` (
   `username` varchar(10) NOT NULL,
   `passcode` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

INSERT INTO `admin` (`username`, `passcode`) VALUES
('guest', 'abc123'),
('manager', 'secret'),
('user', 'test');

ALTER TABLE `admin`
   ADD PRIMARY KEY (`username`);
COMMIT;

PHP 登录应用程序的第一部分是建立数据库连接对象。我们使用 mysqli API 获取连接对象。将以下代码保存为“config.php”

Config.php

<?php
   define('DB_SERVER', 'localhost');
   define('DB_USERNAME', 'root');
   define('DB_PASSWORD', '');
   define('DB_DATABASE', 'mydb');
   $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>

此 PHP 脚本在登录脚本中调用。它向用户提供一个 HTML 表单以输入用户名和密码。如果提交表单,PHP 将运行一个 SELECT 查询以检索 admin 表中用户名和密码与用户输入匹配的行。

$myusername = mysqli_real_escape_string($db,$_POST['username']);
$mypassword = mysqli_real_escape_string($db,$_POST['password']); 
      
$sql = "SELECT * FROM admin WHERE username = '$myusername' and passcode = '$mypassword'";
      
$result = mysqli_query($db,$sql);
$row = mysqli_num_rows($result);

如果行数为 1,则表示输入的用户名和密码匹配。用户名将保存到 $_SESSION 变量中,并且浏览器将定向到 welcome.php 脚本。

Login.php

将以下代码保存为“login.php”:

<?php
   include("config.php");
   session_start();
   $error='';
   if($_SERVER["REQUEST_METHOD"] == "POST") {
   
      // username and password sent from form 
      $myusername = mysqli_real_escape_string($db,$_POST['username']);
      $mypassword = mysqli_real_escape_string($db,$_POST['password']); 

      $sql = "SELECT * FROM admin WHERE username = '$myusername' and passcode = '$mypassword'";

      $result = mysqli_query($db,$sql);      
      $row = mysqli_num_rows($result);      
      $count = mysqli_num_rows($result);

      if($count == 1) {
	  
         // session_register("myusername");
         $_SESSION['login_user'] = $myusername;
         header("location: welcome.php");
      } else {
         $error = "Your Login Name or Password is invalid";
      }
   }
?>
<html>
<head>
   <title>Login Page</title>
   <style type = "text/css">
      body {
         font-family:Arial, Helvetica, sans-serif;
         font-size:14px;
      }
      label {
         font-weight:bold;
         width:100px;
         font-size:14px;
      }
      .box {
         border:#666666 solid 1px;
      }
   </style>
</head>
<body bgcolor = "#FFFFFF">
   <div align = "center">
      <div style = "width:300px; border: solid 1px #333333; " align = "left">
         <div style = "background-color:#333333; color:#FFFFFF; padding:3px;"><b>Login</b></div>
         <div style = "margin:30px">
            <form action = "" method = "post">
               <label>UserName  :</label><input type = "text" name = "username" class = "box"/><br /><br />
               <label>Password  :</label><input type = "password" name = "password" class = "box" /><br/><br />
               <input type = "submit" value = " Submit "/><br />
            </form>
            <div style = "font-size:11px; color:#cc0000; margin-top:10px"><?php echo $error; ?></div>
         </div>
      </div>
   </div>
</body>
</html>

Session.php

以下是 session.php 代码文件。它检查是否设置了 session 变量;然后用户凭据将被分配给 $login_session 变量。如果没有,用户将被重定向回 login.php 文件。

<?php
   // Start the session
   session_start();

   if(!isset($_SESSION['login_user'])){
      header("location: login.php");
      die();
   }
   $login_session = $_SESSION['login_user'];
?>

Welcome.php

当用户经过身份验证时,“welcome.php”脚本将被调用。它读取 session 变量以显示欢迎消息。

<?php
   include('session.php');
?>
<html>
<head>
   <title>Welcome </title>
</head>
<body>
   <h1>Welcome <?php echo $login_session; ?></h1> 
   <h2><a href = "logout.php">Sign Out</a></h2>
</body>
</html>

Logout.php

最后,注销脚本将删除 session 并将用户重定向到登录页面。

<?php
   session_start();

   if(session_destroy()) {
      header("Location: login.php");
   }
?>

要启动登录应用程序,请访问“https://127.0.0.1/login.php”

PHP MySQL Login 1

输入用户名和密码。按提交按钮后,将根据 admin 表中的行检查这些输入。成功后,您将收到以下消息:

PHP MySQL Login 2

如果查询未获取任何匹配的行,则会显示错误消息,如下所示:

PHP MySQL Login 3
广告