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:///login.php”

PHP MySQL Login 1

輸入使用者名稱和密碼。按提交按鈕後,將根據 admin 表中的行檢查這些輸入。成功後,您將收到以下訊息:

PHP MySQL Login 2

如果查詢未獲取任何匹配的行,則會顯示錯誤訊息,如下所示:

PHP MySQL Login 3
廣告