Đăng nhập PHP với cơ sở dữ liệu

Có các tập lệnh đăng nhập dựng sẵn trong PHP mà bạn có thể sử dụng. Tuy nhiên, chúng phải luôn được cập nhật. Các kỹ thuật chúng ta từng sử dụng không còn được khuyến khích ngày nay

Tùy thuộc vào hệ thống bạn muốn sử dụng. Nếu bạn muốn lập trình, bạn có thể sử dụng CMS làm sẵn như WordPress, Redaxo, Joomla, Typo3, v.v.

Nhưng nếu bạn muốn xây dựng thứ gì đó của riêng mình, thì bạn chắc chắn muốn nó đến từ một nguồn duy nhất

Trong hướng dẫn này, chúng ta sẽ xem cách viết một tập lệnh đăng nhập đơn giản

Nó chỉ là một khung cơ bản. Nhưng chúng tôi sẽ xem xét cách tiến hành và những gì bạn phải xem xét

chúng ta cần gì

Lý tưởng nhất là chúng tôi thử nghiệm và xây dựng nó trong một môi trường an toàn. Bạn có thể sử dụng XAMPP (hoặc. một hệ thống máy chủ cục bộ có thể so sánh được). Đây là môi trường cho máy cục bộ của bạn mô phỏng máy chủ. Nó chứa mọi thứ bạn cần cho nó. PHP, mySQL, Apache, phpMyAdmin, v.v.

Sau đó, bạn đã quen thuộc với PHP

Cá nhân tôi vẫn có một tài liệu văn bản đang mở ở bên cạnh nơi tôi ghi lại các bước của mình. Tài liệu trợ giúp hoặc hướng dẫn của chúng tôi, có thể nói như vậy, để bạn có thể nhanh chóng tìm đường quay lại tập lệnh sau này. Tất nhiên, bạn cũng nên ghi lại các bước quan trọng nhất trong chính tập lệnh

Chúng ta sẽ làm gì?

Trước tiên, hãy nghĩ về cấu trúc của kịch bản của chúng tôi

Tất nhiên chúng ta có thể đặt tất cả vào một tệp PHP. Nhưng điều đó không có ý nghĩa và nhanh chóng trở nên khó hiểu. Bạn không cần mọi chức năng hoặc dòng mã tại mọi thời điểm để thực hiện bước tương ứng

Vì vậy, hãy chia kịch bản

Chúng tôi cần

  • Trang đăng nhập (logmein. php)
  • Trang đăng xuất (đăng xuất. php)
  • Trang người dùng (bảng điều khiển. php, có thể là hồ sơ. php)
  • Tập lệnh xác minh dữ liệu (xác thực. php)
  • Tập lệnh kết nối cơ sở dữ liệu (connect. php)
  • Phong cách (phong cách. css)

Trước hết, đây là cấu trúc cơ bản của chúng tôi mà chúng tôi muốn tạo

Tôi muốn lưu trữ cuộc gọi cơ sở dữ liệu trong tập lệnh của riêng mình, nhưng bạn không cần phải làm điều đó. Nó tạo điều kiện thay đổi dữ liệu vào cơ sở dữ liệu. Bạn chỉ phải thay đổi nó một lần

Bạn cũng có thể tạo trang đăng nhập dưới dạng trang HTML thuần túy, điều đó tùy thuộc vào bạn

Hãy đi theo thứ tự

Trang đăng nhập

đăng nhập. php

Ở đây chúng tôi chỉ cần HTML và CSS, nhưng tôi vẫn tạo trang dưới dạng tệp PHP


 
  
  Loginseite
  
 
 
  

Hier können Sie sich einloggen. Geben Sie dazu Ihre Zugangsdaten unten ein.

Benutzername Passwort

Bây giờ chúng tôi đã tạo trang đăng nhập. Chúng tôi sẽ định kiểu trang sau một chút

Chúng ta đã làm gì ở đây?

Đầu tiên chúng tôi tạo khung HTML

với

hãy yêu cầu trình duyệt sử dụng bộ ký tự UTF-8 để hiển thị dữ liệu

Tất nhiên chúng tôi cũng chỉ định một tiêu đề

trang đăng nhập

Chúng tôi bao gồm tệp biểu định kiểu. Chúng tôi sẽ xử lý tệp này sau

Để người dùng có thể đăng nhập, chúng tôi cần một biểu mẫu để người dùng nhập dữ liệu truy cập của mình. Chúng tôi đã giữ nó cổ điển ở đây và đã viết ra tên của các lĩnh vực. Chúng tôi cũng có thể sử dụng các biểu tượng, nhưng nhiều hơn về điều đó sau

Chúng tôi bao gồm các hình thức

Chúng tôi đã chỉ định tập lệnh xác thực của mình đang hoạt động, tập lệnh này sẽ được gọi khi tập lệnh được gửi. Với method=”post” chúng ta chỉ định cách truyền dữ liệu. Vui lòng luôn sử dụng phương thức đăng cho các biểu mẫu

Sau đó, chúng tôi vẫn có dữ liệu đăng nhập mà chúng tôi yêu cầu ở đây

Với chúng tôi nhập tên ở phía trước của trường, với chúng tôi tạo một trường nhập liệu. Trong trường hợp này, chúng tôi sử dụng trường văn bản trong đó trình giữ chỗ được lưu trữ. Chúng tôi chỉ ra điều này cho trình duyệt bằng cách chỉ định type="text" cho tên người dùng. Chúng tôi cũng có một trường văn bản cho trường mật khẩu, nhưng với loại = "mật khẩu", đầu vào không được hiển thị ở dạng văn bản thuần túy mà "ẩn". Với name="" chúng tôi chỉ định tên của trường. Sau đó, chúng tôi sẽ chuyển tên này vào tập lệnh xác thực với giá trị được liên kết mà người dùng nhập vào. Bắt buộc chỉ ra rằng người dùng phải điền vào trường này, nếu không sẽ có thông báo lỗi

Để gửi biểu mẫu, sau đó chúng tôi có nút có loại = "gửi" và văn bản chú thích "Đăng nhập ngay" làm giá trị

trang đăng xuất

Nếu bạn có thể đăng nhập, bạn sẽ có thể đăng xuất lại sau. Để người dùng có thể đăng xuất khỏi hệ thống, chúng ta tạo script đăng xuất đăng xuất. php. Chúng tôi tạo tệp này dưới dạng tệp PHP với nội dung sau

Chúng tôi không cần nhiều hơn ở đây. Và bây giờ chúng ta đã ở giữa vấn đề. Chúng tôi đã tạo một tập lệnh PHP hoạt động với các phiên. Phiên này được tạo và sử dụng riêng cho phiên này của người dùng. Nó hiển thị tập lệnh của chúng tôi và bất kỳ trang nào khác mà chúng tôi muốn sử dụng mà người dùng được phép xem dữ liệu liên quan. Nói rằng anh ấy đã đăng nhập

Vì vậy, ở đầu tập lệnh, chúng tôi viết session_start();

Vì chúng tôi vừa tạo tập lệnh đăng xuất, chúng tôi cũng muốn kết thúc phiên để không ai khác có thể đăng nhập bằng dữ liệu này

Chúng tôi kết thúc phiên này với session_destroy();

Cuối cùng nhưng không kém phần quan trọng, chúng tôi đưa người dùng trở lại trang bắt đầu

Bây giờ chúng tôi có thông tin đăng nhập và đăng xuất của người dùng

Chúng tôi sẽ chăm sóc thiết kế sau

Chúng tôi chưa thể làm gì nhiều với việc đăng nhập vì chúng tôi chưa có cơ sở dữ liệu chứa dữ liệu người dùng và bạn cũng chưa tạo tập lệnh truy xuất dữ liệu từ cơ sở dữ liệu

Chúng tôi sẽ xử lý cơ sở dữ liệu trước. Trên không gian web của bạn, bạn thường sẽ tìm thấy cơ sở dữ liệu được tạo sẵn có tên cơ sở dữ liệu và người dùng cơ sở dữ liệu

Thiết lập cơ sở dữ liệu

Bây giờ chúng ta cần xử lý cơ sở dữ liệu mySQL và tạo cơ sở dữ liệu tương ứng trong hệ thống của mình

Trong XAMPP chúng ta có thể dễ dàng làm điều này. . Sau khi khởi động hệ thống XAMPP, chúng ta chỉ cần truy cập vào hệ thống cơ sở dữ liệu bằng phpMyAdmin

Để làm điều này, bây giờ chúng tôi nhập http vào thanh địa chỉ của trình duyệt của chúng tôi. //localhost/phpmyadmin/

  • Bây giờ, hãy nhấp vào tab Cơ sở dữ liệu ở trên cùng
  • Trong Tạo cơ sở dữ liệu mới, bây giờ chúng tôi nhập demo tập lệnh đăng nhập làm tên cơ sở dữ liệu
  • Bộ ký tự Alz, chúng tôi nhất thiết phải chỉ định utf8_General_ci
  • Bây giờ chúng tôi bấm vào Tạo

Tất nhiên, bạn có thể sử dụng một tên khác làm tên cơ sở dữ liệu. Đặc biệt trong hệ thống sản xuất trên máy chủ, bạn sẽ phải sử dụng tên được xác định trước mà chúng tôi không phải tạo riêng ở đó

Bây giờ chúng tôi vẫn cần bảng có các cột trong bảng mà chúng tôi cần cho tập lệnh của mình. bảng này sau đó sẽ lưu trữ dữ liệu đăng nhập của chúng tôi, tức là tên người dùng, mật khẩu, địa chỉ email, v.v.
Sau khi chúng tôi đã tạo cơ sở dữ liệu, chúng tôi đã có trong cơ sở dữ liệu này. chúng ta cũng có thể nhấp chuột trái vào bản demo tập lệnh đăng nhập cơ sở dữ liệu và tạo bảng của mình

Tuy nhiên, chúng tôi tạo chúng bằng tập lệnh SQL mà chúng tôi tải từ tab SQL ở trên

CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(255) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `user` (`id`, `username`, `password`, `email`) VALUES (1, 'testuser', '$2y$10$SfhYIDtn.iOuCW7zfoFLuuZHX6lja4lF4XA4JqNmpiH/.P3zB8JCa', '[email protected]');

Với lệnh gọi SQL này, chúng tôi tạo bảng của mình và thêm trực tiếp người dùng đầu tiên. Người dùng này được gọi là người kiểm tra và đã kiểm tra mật khẩu. Nó được lưu trữ ở đây dưới dạng mã hóa. Chúng tôi cũng đã tạo một địa chỉ email

Kết nối với cơ sở dữ liệu thông qua PHP

Bây giờ chúng tôi đã tạo cơ sở dữ liệu và bảng của mình. Bây giờ chúng ta có thể sử dụng chúng trong tập lệnh PHP của mình. Nhưng để làm được điều đó, chúng ta phải kết nối với cô ấy. Để làm điều này, chúng tôi tạo một tập lệnh có tên là kết nối. php

Tất nhiên chúng ta cũng có thể kết nối cơ sở dữ liệu trong mỗi tập lệnh. Nhưng tôi nghĩ sẽ tốt hơn nếu chúng ta gọi cơ sở dữ liệu thông qua một tập lệnh riêng. Vì vậy, chúng tôi chỉ phải điều chỉnh dữ liệu truy cập một lần khi chúng tôi tải tập lệnh lên máy chủ hoặc trang web của mình sau này. chơi trên trang web của chúng tôi

loginskriptdemo';
// Try and connect using the info above.
$connect = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if ( mysqli_connect_errno() ) {
// If there is an error with the connection, stop the script and display the error.
exit('Failed to connect to MySQL: ' . mysqli_connect_error());
}
?>

Bây giờ chúng ta có thể gọi cơ sở dữ liệu bằng tập lệnh này. Để làm điều này, chúng tôi lưu nó dưới dạng kết nối. php

Sau đó, chúng tôi sẽ gọi tập lệnh này trong bất kỳ tập lệnh nào khác sẽ truy cập cơ sở dữ liệu bằng lệnh require_once

xác minh người dùng

Bây giờ chúng ta có thể chuyển sang xác minh dữ liệu đã nhập. Với kịch bản của chúng tôi xác thực. php bây giờ chúng ta kiểm tra xem dữ liệu được nhập trên trang đăng nhập có chính xác không

Đầu tiên, chúng tôi bắt đầu phiên, chúng tôi sẽ tiếp tục cho đến khi chúng tôi đăng xuất. Ngoài ra, chúng tôi tải tập lệnh kết nối. php để kết nối với cơ sở dữ liệu




Die if-Abfrage benötigen wir eigentlich nicht, da wir die Eingabefelder als required gekennzeichnet haben und der Browser hier bereits eine Fehlermeldung ausgibt. Zur Sicherheit haben wir sie aber integriert.

 if ($abfrage=$connect->prepare('SELECT id, password FROM user WHERE username=?'))
  {
   $abfrage->bind_param('s',$_POST['username']);
   $abfrage->execute();
   $abfrage->store_result();
 if ($abfrage->num_rows > 0) 
  {
   $abfrage->bind_result($id, $password);
   $abfrage->fetch();
   if (password_verify($_POST['password'], $password)) 
    { 
     session_regenerate_id(); 
     $_SESSION['loggedin'] = TRUE; 
     $_SESSION['name'] = $_POST['username']; 
     $_SESSION['id'] = $id;
     header('Location: dashboard.php');
    } 
   else 
    { 
     echo 'Leider ist entweder der Benutzername oder das Passwort falsch. '; 
    }
   } 
  else 
   { 
    echo 'Leider ist entweder der Benutzername oder das Passwort falsch.';
   }
  $abfrage->close();
 }
?>

Chúng ta đã làm gì cho đến nay?
Sau khi bắt đầu phiên và gọi tập lệnh cơ sở dữ liệu, chúng tôi đã bắt đầu truy vấn if sẽ truy vấn dữ liệu của chúng tôi một cách an toàn mà không có khả năng tiêm nhiễm SQL

Chúng tôi đã truy vấn các kết quả liên quan đến tên người dùng đã nhập. Chúng tôi đã làm điều này với một chức năng liên kết liên kết truy vấn tên người dùng của chúng tôi để nhập Chuỗi (bind_param('s', ...)

Trước tiên, chúng tôi đã kiểm tra xem tên người dùng có tồn tại hay không, nếu không, chúng tôi sẽ đưa ra thông báo lỗi rằng các mục nhập không chính xác

Chúng tôi cũng đã kiểm tra xem mật khẩu có đúng không. Chúng tôi đã làm điều này với password_verify

Cho đến nay, chúng tôi đã có tập lệnh đăng nhập và tập lệnh đăng xuất sẵn sàng.

Điều gì xảy ra sau khi đăng nhập

Bây giờ chúng ta phải suy nghĩ về những gì sẽ xảy ra sau khi đăng nhập

Bây giờ chúng tôi muốn tạo một khu vực khép kín. Điều này ban đầu giống nhau cho tất cả người dùng.

Đối với một dự án, tôi đã tạo hai nhóm người dùng có các quyền khác nhau. Nội dung tương ứng được kiểm soát với sự trợ giúp của một truy vấn đơn giản. Ví dụ: sau đó bạn có thể tạo khu vực quản trị có thể quản lý nội dung và người dùng
Toàn bộ hoạt động với cùng một truy vấn và tập lệnh. Sau đó, chúng tôi chỉ mở rộng tập lệnh bằng cách truy vấn các quyền được chỉ định cho từng người dùng. Nhưng điều đó trong một hướng dẫn khác

Sau khi xác minh thành công, chúng tôi hiện đang hướng người dùng đến một trang mà chúng tôi gọi là trang tổng quan. tên php.

Tương tự, chúng ta có thể tạo tất cả các trang khác mà chúng ta muốn tạo và sử dụng

Khung cho trang web của chúng tôi.

Chúng tôi yêu cầu các trang của chúng tôi luôn ở vị trí đầu tiên sau




Jetzt benötigen wir noch den User der Session. Diesen haben wir bereits gespeichert in $_SESSION[’name‘].
Damit aber nur der berechtigte User unser Dashboard sehen kann, fügen wir folgende Anweisung ein:

if (!isset($_SESSION['loggedin']))
{
header('Location: index.html');
exit;
}
?>

Chúng tôi chỉ đơn giản là truy vấn xem người dùng đã đăng nhập hay chưa. Chúng tôi đã chỉ định điều này trong tập lệnh xác minh của mình

Bây giờ, hãy tạo bảng điều khiển thực tế với một số thông tin. Đối với điều này, chúng ta cần HTML một lần nữa