Cách tạo trang đăng ký. Tạo một hệ thống đăng ký người dùng đơn giản trong PHP và MySQL

Việc tạo một trang web dựa trên thành viên ban đầu có vẻ như là một nhiệm vụ khó khăn. Nếu bạn từng muốn tự mình làm việc này thì hãy từ bỏ khi bạn bắt đầu suy nghĩ bạn thế nào bạn sẽ kết hợp nó lại bằng kỹ năng PHP của mình thì bài viết này là dành cho bạn. Chúng tôi sẽ hướng dẫn bạn mọi khía cạnh của việc tạo trang web dựa trên tư cách thành viên, với khu vực thành viên an toàn được bảo vệ bằng mật khẩu.

Toàn bộ quá trình bao gồm hai phần lớn: Đăng ký người dùng và xác thực người dùng. Trong phần đầu tiên, chúng ta sẽ đề cập đến việc tạo biểu mẫu đăng ký và lưu trữ dữ liệu trong cơ sở dữ liệu MySQL. Trong phần thứ hai, chúng ta sẽ tạo biểu mẫu đăng nhập và sử dụng nó để cho phép người dùng truy cập vào khu vực bảo mật.

Tải mã xuống

Bạn có thể tải xuống toàn bộ mã nguồn cho hệ thống đăng ký/đăng nhập từ liên kết bên dưới:

Cấu hình & Tải lên
Tệp ReadMe chứa hướng dẫn chi tiết.

Mở nguồn\include\membersite_config.php tập tin trong trình soạn thảo văn bản và cập nhật cấu hình. (Đăng nhập cơ sở dữ liệu, tên trang web của bạn, địa chỉ email của bạn, v.v.).

Tải lên toàn bộ nội dung thư mục. Kiểm tra register.php bằng cách gửi biểu mẫu.

Mẫu đăng ký

Để tạo tài khoản người dùng, chúng tôi cần thu thập một lượng thông tin tối thiểu từ người dùng. Chúng tôi cần tên, địa chỉ email cũng như tên người dùng và mật khẩu mong muốn của anh ấy. Tất nhiên, chúng tôi có thể yêu cầu thêm thông tin vào thời điểm này, nhưng một biểu mẫu dài luôn gây khó chịu. Vì vậy, hãy giới hạn bản thân trong những lĩnh vực đó.

Đây là mẫu đăng ký:

Đăng ký

Vì vậy, chúng tôi có các trường văn bản cho tên, email và mật khẩu. Lưu ý rằng chúng tôi đang sử dụng để có khả năng sử dụng tốt hơn.

Xác thực mẫu

Tại thời điểm này, bạn nên đặt một số mã xác thực biểu mẫu để đảm bảo rằng chúng tôi có tất cả dữ liệu cần thiết để tạo tài khoản người dùng. Chúng ta cần kiểm tra xem tên, email và mật khẩu đã được điền chưa và email có ở định dạng phù hợp hay không.

Xử lý việc gửi biểu mẫu

Bây giờ chúng ta phải xử lý dữ liệu biểu mẫu được gửi.

Đây là trình tự (xem tệp fg_membersite.php trong nguồn đã tải xuống):

hàm RegisterUser() ( if(!isset($_POST["submit"])) ( return false; ) $formvars = array(); if(!$this->ValidateRegistrationSubmission()) ( return false; ) $this- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( return false; ) if(!$this->SendUserConfirmationEmail($formvars)) ( return false; ) $this->SendAdminIntimationEmail($ formvars); trả về true; )

Đầu tiên, chúng tôi xác nhận việc gửi biểu mẫu. Sau đó, chúng tôi thu thập và 'làm sạch' dữ liệu gửi biểu mẫu (luôn thực hiện việc này trước khi gửi email, lưu vào cơ sở dữ liệu, v.v.). Việc gửi biểu mẫu sau đó được lưu vào bảng cơ sở dữ liệu. Chúng tôi gửi email đến người dùng yêu cầu xác nhận. Sau đó chúng tôi thân mật với quản trị viên mà người dùng đã đăng ký.

Lưu dữ liệu vào cơ sở dữ liệu

Bây giờ chúng tôi đã thu thập tất cả dữ liệu, chúng tôi cần lưu trữ nó vào cơ sở dữ liệu.
Đây là cách chúng tôi lưu biểu mẫu gửi vào cơ sở dữ liệu.

function SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Database login failed!"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Email này đã được đăng ký"); return false; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Tên người dùng này đã được sử dụng. Vui lòng thử tên người dùng khác"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Chèn vào cơ sở dữ liệu không thành công!"); return false; ) trả về true; )

Lưu ý rằng bạn đã định cấu hình chi tiết đăng nhập Cơ sở dữ liệu trong tệp membersite_config.php. Hầu hết các trường hợp, bạn có thể sử dụng “localhost” làm máy chủ cơ sở dữ liệu.
Sau khi đăng nhập, chúng ta kiểm tra xem bảng đã tồn tại chưa. (Nếu không, script sẽ tạo bảng theo yêu cầu).
Sau đó, chúng tôi đảm bảo rằng tên người dùng và email là duy nhất. Nếu nó không phải là duy nhất, chúng tôi sẽ trả lại lỗi cho người dùng.

Cấu trúc bảng cơ sở dữ liệu

Đây là cấu trúc bảng. Hàm CreateTable() trong tệp fg_membersite.php sẽ tạo bảng. Đây là mã:

function CreateTable() ( $qry = "Tạo bảng $this->tablename (". "id_user INT NOT NULL AUTO_INCREMENT ," "name VARCHAR(128) NOT NULL ," "email VARCHAR(64) NOT NULL ," " "phone_number VARCHAR(16) NOT NULL ," "tên người dùng VARCHAR(16) NOT NULL ," "mật khẩu VARCHAR(32) NOT NULL ," "confirmcode VARCHAR(32) ," "PRIMARY KEY (id_user)." ")"; if( !mysql_query($qry,$this->connection)) ( $this->HandleDBError("Lỗi khi tạo bảng \nquery was\n $qry"); return false; ) return true; )

Trường id_user sẽ chứa id duy nhất của người dùng và cũng là khóa chính của bảng. Lưu ý rằng chúng tôi cho phép 32 ký tự cho trường mật khẩu. Chúng tôi làm điều này vì, như một biện pháp bảo mật bổ sung, chúng tôi sẽ lưu trữ mật khẩu trong cơ sở dữ liệu được mã hóa bằng MD5. Xin lưu ý rằng vì MD5 là phương thức mã hóa một chiều nên chúng tôi sẽ không thể khôi phục mật khẩu trong trường hợp người dùng quên.

Chèn đăng ký vào bảng

Đây là đoạn mã chúng tôi sử dụng để chèn dữ liệu vào cơ sở dữ liệu. Chúng tôi sẽ có tất cả dữ liệu có sẵn trong mảng $formvars.

hàm InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = "insert to ".$this->tablename."(name, email, username, pass, confirmcode) giá trị ("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this->SanitizeForSQL($formvars["email"]) . "", "" . $ this->SanitizeForSQL($formvars["username"]) . "", "" . md5($formvars["password"]) . "", "" . $confirmcode . "")"; if(! mysql_query( $insert_query ,$this->connection)) ( $this->HandleDBError("Lỗi chèn dữ liệu vào bảng\nquery:$insert_query"); return false; ) return true; )

Lưu ý rằng chúng tôi sử dụng hàm PHP md5() để mã hóa mật khẩu trước khi chèn nó vào cơ sở dữ liệu.
Ngoài ra, chúng tôi tạo mã xác nhận duy nhất từ ​​địa chỉ email của người dùng.

Gửi e-mail

Bây giờ chúng tôi đã đăng ký trong cơ sở dữ liệu của mình, chúng tôi sẽ gửi email xác nhận cho người dùng. Người dùng phải nhấp vào liên kết trong email xác nhận để hoàn tất quá trình đăng ký.

hàm SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["name"]) ; $mailer->Subject = "Đăng ký của bạn với ".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email" ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Xin chào ".$formvars["name"]."\r\ n\r\n." "Cảm ơn cho bạnđăng ký với ".$this->sitename."\r\n". "Vui lòng nhấp vào liên kết bên dưới để xác nhận đăng ký của bạn.\r\n". "$confirm_url\r\n". "\r\n". "Trân trọng,\r\n". "Webmaster\r\n". $this->sitename; if(!$mailer->Send()) ( $this->HandleError("Không gửi được email xác nhận đăng ký.") ; trả về sai; ) trả về đúng; )

Cập nhật

Ngày 9 tháng 1 năm 2012
Tính năng Đặt lại mật khẩu/Đổi mật khẩu được thêm vào
Mã hiện được chia sẻ tại GitHub.

Chào mừng trở lạiTên người dùngFullName(); ?>!

Giấy phép


Mã được chia sẻ theo giấy phép LGPL. Bạn có thể tự do sử dụng nó trên các trang web thương mại hoặc phi thương mại.

Không có bài viết liên quan.

Bình luận về cụm từ này được đóng.

Quá trình tạo ra một hệ thống đăng ký có khá nhiều công việc. Bạn cần viết mã để kiểm tra kỹ tính hợp lệ của địa chỉ email, gửi email xác nhận, cung cấp khả năng khôi phục mật khẩu, lưu trữ mật khẩu ở nơi an toàn, xác thực biểu mẫu nhập, v.v. Ngay cả khi bạn làm tất cả những điều này, người dùng sẽ miễn cưỡng đăng ký, vì ngay cả việc đăng ký tối thiểu nhất cũng yêu cầu hoạt động của họ.

Trong hướng dẫn hôm nay, chúng ta sẽ phát triển một hệ thống đăng ký đơn giản không yêu cầu bất kỳ mật khẩu nào! Kết quả sẽ là một hệ thống có thể dễ dàng sửa đổi hoặc tích hợp vào trang web PHP hiện có. Nếu bạn quan tâm, hãy tiếp tục đọc.

PHP

Bây giờ chúng ta đã sẵn sàng để bắt đầu với mã PHP. Chức năng chính của hệ thống đăng ký được cung cấp bởi lớp Người dùng, bạn có thể xem bên dưới. Lớp này sử dụng (), là một thư viện cơ sở dữ liệu tối giản. Lớp Người dùng chịu trách nhiệm truy cập cơ sở dữ liệu, tạo mã thông báo đăng nhập và xác thực chúng. Nó cung cấp cho chúng ta một giao diện đơn giản có thể dễ dàng tích hợp vào hệ thống đăng ký của các trang web dựa trên PHP của bạn.

Người dùng.class.php

// Phiên bản ORM riêng
riêng tư $orm;

/**
* Tìm người dùng theo chuỗi mã thông báo. Chỉ những mã thông báo hợp lệ mới được đưa vào
* Sự xem xét. Mã thông báo có hiệu lực trong 10 phút sau khi được tạo.
* @param string $token Mã thông báo cần tìm kiếm
* Người dùng @return
*/

Hàm tĩnh công khai findByToken($token)(

// tìm nó trong cơ sở dữ liệu và đảm bảo dấu thời gian là chính xác


->where("mã thông báo", $mã thông báo)
->where_raw("token_validity > NOW()")
->find_one();

Nếu(!$kết quả)(
trả về sai;
}

Trả về người dùng mới($result);
}

/**
* Đăng nhập hoặc đăng ký người dùng.
* Người dùng @return
*/

Hàm tĩnh công khai loginOrRegister($email)(

// Nếu người dùng đó đã tồn tại, hãy trả lại nó

If(User::exists($email))(
trả về Người dùng mới($email);
}

// Ngược lại thì tạo và trả về

Return User::create($email);
}

/**
* Tạo người dùng mới và lưu nó vào cơ sở dữ liệu
* @param string $email Địa chỉ email của người dùng
* Người dùng @return
*/

Hàm tĩnh riêng tạo ($ email)(

// Viết một người dùng mới vào cơ sở dữ liệu và trả về nó

$result = ORM::for_table("reg_users")->create();
$kết quả->email = $email;
$kết quả->lưu();

Trả về người dùng mới($result);
}

/**
* Kiểm tra xem người dùng đó có tồn tại trong cơ sở dữ liệu hay không và trả về một boolean.
* @param string $email Địa chỉ email của người dùng
* @return boolean
*/

Hàm tĩnh công khai tồn tại($email)(

// Người dùng có tồn tại trong cơ sở dữ liệu không?
$result = ORM::for_table("reg_users")
->where("email", $email)
->đếm();

Trả về kết quả $ == 1;
}

/**
* Tạo đối tượng người dùng mới
* @param $param Ví dụ ORM, id, email hoặc null
* Người dùng @return
*/

Hàm công khai __construct($param = null)(

If($param instanceof ORM)(

// Một instance ORM đã được truyền
$this->orm = $param;
}
nếu không thì if(is_string($param))(

// Một email đã được chuyển
$này->
->where("email", $param)
->find_one();
}
khác(

Nếu(is_numeric($param))(
// Id người dùng được truyền dưới dạng tham số
$id = $param;
}
khác nếu(isset($_SESSION["loginid"]))(

// Không có ID người dùng nào được chuyển, hãy xem phiên
$id = $_SESSION["loginid"];
}

$this->orm = ORM::for_table("reg_users")
-> ở đâu("id", $id)
->find_one();
}

/**
* Tạo mã thông báo đăng nhập SHA1 mới, ghi nó vào cơ sở dữ liệu và trả về.
* @return chuỗi
*/

Hàm công khai generateToken())(
// tạo mã thông báo cho người dùng đã đăng nhập. Lưu nó vào cơ sở dữ liệu.

$token = sha1($this->email.time().Rand(0, 1000000));

// Lưu mã thông báo vào cơ sở dữ liệu,
// và đánh dấu nó là hợp lệ chỉ trong 10 phút tiếp theo

$this->orm->set("mã thông báo", $token);
$this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")");
$this->orm->save();

Trả lại mã thông báo $;
}

/**
* Đăng nhập người dùng này
* @return void
*/

Đăng nhập chức năng công cộng()

// Đánh dấu người dùng là đã đăng nhập
$_SESSION["loginid"] = $this->orm->id;

// Cập nhật trường db Last_login
$this->orm->set_expr("last_login", "NOW()");
$this->orm->save();
}

/**
* Phá hủy phiên và đăng xuất người dùng.
* @return void
*/

Đăng xuất chức năng công cộng()
$_SESSION = mảng();
unset($_SESSION);
}

/**
* Kiểm tra xem người dùng đã đăng nhập chưa.
* @return boolean
*/

Hàm công khai postedIn())(
return isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id;
}

/**
* Kiểm tra xem người dùng có phải là quản trị viên không
* @return boolean
*/

Hàm công khai làAdmin())(
return $this->rank() == "quản trị viên";
}

/**
* Tìm loại người dùng. Nó có thể là quản trị viên hoặc thường xuyên.
* @return chuỗi
*/

Xếp hạng chức năng công cộng())(
if($this->orm->rank == 1)(
trả về "quản trị viên";
}

Trả về "thường xuyên";
}

/**
* Phương pháp kỳ diệu để truy cập các phần tử riêng tư
* Ví dụ $orm là thuộc tính của đối tượng người dùng
* @param string $key Tên thuộc tính được truy cập
* @return hỗn hợp
*/

Hàm công khai __get($key)(
if(isset($this->orm->$key))(
trả về $this->orm->$key;
}

Trả về giá trị rỗng;
}
}
Mã thông báo được tạo bằng thuật toán và được lưu trữ trong cơ sở dữ liệu. Chúng tôi sử dụng MySQL để đặt cột token_validity thành 10 phút. Khi xác thực mã thông báo, chúng tôi thông báo với công cụ rằng chúng tôi cần mã thông báo, trường token_validity vẫn chưa hết hạn. Bằng cách này, chúng tôi giới hạn thời gian mà mã thông báo sẽ hợp lệ.

Lưu ý rằng chúng ta sử dụng phương thức ma thuật __get() ở cuối tài liệu để truy cập các thuộc tính của đối tượng người dùng. Điều này cho phép chúng ta truy cập dữ liệu được lưu trữ trong cơ sở dữ liệu dưới dạng các thuộc tính: $user->email, $user->token. Ví dụ: hãy xem cách chúng ta có thể sử dụng lớp này trong đoạn mã sau:


Một tệp khác lưu trữ chức năng cần thiết là hàm.php. Ở đó, chúng tôi có một số hàm trợ giúp cho phép chúng tôi giữ phần còn lại của mã gọn gàng hơn.

Hàm.php

Hàm send_email($from, $to, $subject, $message)(

// Hàm trợ giúp gửi email

$headers = "Phiên bản MIME: 1.0" . "\r\n";
$headers .= "Loại nội dung: text/plain; charset=utf-8" . "\r\n";
$headers .= "Từ: ".$from . "\r\n";

Trả lại thư($to, $subject, $message, $headers);
}

hàm get_page_url())(

// Tìm URL của file PHP

$url = "http".(empty($_SERVER["HTTPS"])?"":""")."://".$_SERVER["SERVER_NAME"];

If(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")(
$url.= $_SERVER["REQUEST_URI"];
}
khác(
$url.= $_SERVER["PATH_INFO"];
}

Trả về url $;
}

hàm rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)(

// Số lần đăng nhập trong giờ qua theo địa chỉ IP này

$count_hour = ORM::for_table("reg_login_attempt")
->
->where_raw("ts > SUBTIME(NOW(),"1:00")")
->đếm();

// Số lần đăng nhập trong 10 phút qua bằng địa chỉ IP này

$count_10_min = ORM::for_table("reg_login_attempt")
->where("ip", sprintf("%u", ip2long($ip)))
->where_raw("ts > SUBTIME(NOW(),"0:10")")
->đếm();

Nếu($count_hour > $limit_hour || $count_10_min > $limit_10_min)(
ném ngoại lệ mới ("Quá nhiều lần đăng nhập!");
}
}

hàm rate_limit_tick($ip, $email)(

// Tạo bản ghi mới trong bảng lần đăng nhập

$login_attempt = ORM::for_table("reg_login_attempt")->create();

$login_attempt->email = $email;
$login_attempt->ip = sprintf("%u", ip2long($ip));

$login_attempt->save();
}

chức năng chuyển hướng($url)(
header("Vị trí: $url");
lối ra;
}
Các hàm rate_limit và rate_limit_tick cho phép chúng tôi giới hạn số lần thử ủy quyền trong một khoảng thời gian nhất định. Các nỗ lực ủy quyền được ghi lại trong cơ sở dữ liệu reg_login_attempt. Các hàm này được kích hoạt khi biểu mẫu đăng nhập được xác minh, như bạn có thể thấy trong đoạn mã sau.

Mã bên dưới được lấy từ index.php và chịu trách nhiệm xác thực biểu mẫu đăng nhập. Nó trả về một phản hồi JSON được điều khiển bởi mã jQuery, mà chúng ta đã thấy trong assets/js/script.js.

chỉ mục.php

If(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))(

// Xuất tiêu đề JSON

Header("Loại nội dung: ứng dụng/json");

// Địa chỉ email có hợp lệ không?

If(!isset($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))(
ném ngoại lệ mới ("Vui lòng nhập email hợp lệ.");
}

// Điều này sẽ đưa ra một ngoại lệ nếu người đó ở trên
// giới hạn số lần đăng nhập được phép (xem hàm.php để biết thêm):
rate_limit($_SERVER["REMOTE_ADDR"]);

// Ghi lại lần đăng nhập này
rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["email"]);

// Gửi tin nhắn cho người dùng

$tin nhắn = "";
$email = $_POST["email"];
$subject = "Liên kết đăng nhập của bạn";

If(!User::exists($email))(
$subject = "Cảm ơn bạn đã đăng ký!";
tin nhắn $ = " Cảm ơnđể đăng ký tại trang web của chúng tôi!\n\n";
}

// Cố gắng đăng nhập hoặc đăng ký người đó
$user = Người dùng::loginOrRegister($_POST["email"]);

$message.= "Bạn có thể đăng nhập từ URL này:\n";
$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";

$message.= "Liên kết sẽ tự động hết hạn sau 10 phút.";

$result = send_email($fromEmail, $_POST["email"], $subject, $message);

Nếu(!$kết quả)(
ném ngoại lệ mới("Đã xảy ra lỗi khi gửi email của bạn. Vui lòng thử lại.");
}

Die(json_encode(array(
"message" => "Cảm ơn bạn! Chúng tôi đã gửi một liên kết tới hộp thư đến của bạn. Hãy kiểm tra cả thư mục thư rác của bạn."
)));
}
}
bắt(Ngoại lệ $e)(

Die(json_encode(array(
"lỗi"=>1,
"tin nhắn" => $e->getMessage()
)));
}
Sau khi ủy quyền hoặc đăng ký thành công, mã trên sẽ gửi gửi email cho người với một liên kết để ủy quyền. Mã thông báo được cung cấp dưới dạng biến $_GET "tkn" do URL được tạo.

chỉ mục.php

If(isset($_GET["tkn"]))(

// Đây có phải là mã thông báo đăng nhập hợp lệ không?
$user = Người dùng::findByToken($_GET["tkn"]);

//Đúng! Đăng nhập người dùng và chuyển hướng đến trang được bảo vệ.

$người dùng->đăng nhập();
redirect("protected.php");
}

// Mã không hợp lệ. Chuyển hướng trở lại hình thức đăng nhập.
redirect("index.php");
}
Chạy $user->login() sẽ tạo các biến phiên cần thiết, cho phép người dùng duy trì trạng thái đăng nhập trong những lần đăng nhập tiếp theo.

Việc đăng xuất khỏi hệ thống được thực hiện theo cách tương tự:

Index.php

If(isset($_GET["đăng xuất"]))(

$user = Người dùng mới();

If($user->loggedIn())(
$người dùng->đăng xuất();
}

Chuyển hướng("index.php");
}
Ở cuối mã, chúng tôi chuyển hướng người dùng đến index.php một lần nữa, do đó tham số ?logout=1 trong URL bị loại bỏ.

Tệp index.php của chúng tôi cũng sẽ cần được bảo vệ - chúng tôi không muốn người dùng đã đăng nhập nhìn thấy biểu mẫu. Để làm điều này, chúng tôi sử dụng phương thức $user->loggedIn():

Index.php

$user = Người dùng mới();

if($user->loggedIn())(
redirect("protected.php");
}
Cuối cùng, hãy xem cách bạn có thể bảo vệ trang web của mình và làm cho trang đó chỉ có thể truy cập được sau khi được ủy quyền:

được bảo vệ.php

// Để bảo vệ bất kỳ trang php nào trên trang web của bạn, hãy bao gồm main.php
// và tạo một đối tượng User mới. Nó đơn giản mà!

require_once "gồm/main.php";

$user = Người dùng mới();

if(!$user->loggedIn())(
redirect("index.php");
}
Sau bước kiểm tra này, bạn có thể chắc chắn rằng người dùng đã đăng nhập thành công. Bạn cũng sẽ có quyền truy cập vào dữ liệu được lưu trữ trong cơ sở dữ liệu dưới dạng thuộc tính của đối tượng $user. Để hiển thị email của người dùng và thứ hạng của họ, hãy sử dụng mã sau:

Echo "Email của bạn: ".$user->email;
echo "Thứ hạng của bạn: ".$user->rank();
Ở đây Rank() là phương thức vì cột thứ hạng trong cơ sở dữ liệu thường chứa các số (0 cho người dùng thông thường và 1 cho quản trị viên) và chúng ta cần chuyển đổi tất cả những thứ này thành tên thứ hạng, được triển khai bằng cách sử dụng phương pháp này. Để chuyển đổi Người sử dụng thường xuyên với tư cách là quản trị viên, chỉ cần chỉnh sửa mục nhập người dùng trong phpmyadmin (hoặc bất kỳ chương trình cơ sở dữ liệu nào khác). Với tư cách là quản trị viên, người dùng sẽ không được cấp bất kỳ khả năng đặc biệt nào. Bản thân bạn có quyền lựa chọn những quyền nào để cấp cho quản trị viên.

Sẵn sàng!

Với điều này, hệ thống đăng ký đơn giản của chúng tôi đã sẵn sàng! Bạn có thể sử dụng nó trên trang PHP hiện có hoặc hiện đại hóa nó để phù hợp với yêu cầu của riêng bạn.

Xin chào! Bây giờ chúng ta sẽ cố gắng triển khai nhiều nhất đăng ký đơn giản trên trang web với sử dụng PHP+ MySQL. Để thực hiện việc này, Apache phải được cài đặt trên máy tính của bạn. Nguyên tắc làm việc của tập lệnh của chúng tôi được hiển thị dưới đây.

1. Hãy bắt đầu bằng cách tạo bảng người dùng trong cơ sở dữ liệu. Nó sẽ chứa dữ liệu người dùng (đăng nhập và mật khẩu). Hãy truy cập phpmyadmin (nếu bạn đang tạo cơ sở dữ liệu trên PC của mình http://localhost/phpmyadmin/). Tạo một bảng người dùng, nó sẽ có 3 trường.

Tôi tạo nó trong cơ sở dữ liệu mysql, bạn có thể tạo nó trong cơ sở dữ liệu khác. Tiếp theo, thiết lập các giá trị như trong hình:

2. Cần có kết nối với bảng này. Hãy tạo một tập tin bd.php. Nội dung của nó:

$db = mysql_connect("máy chủ MySQL của bạn","đăng nhập vào máy chủ này","mật khẩu cho máy chủ này");
mysql_select_db ("tên cơ sở dữ liệu chúng tôi đang kết nối", $db);
?>

Trong trường hợp của tôi nó trông như thế này:

$db = mysql_connect("localhost","user","1234");
mysql_select_db("mysql",$db);
?>

Cứu bd.php.
Tuyệt vời! Chúng tôi có một bảng trong cơ sở dữ liệu và kết nối với nó. Bây giờ bạn có thể bắt đầu tạo một trang mà người dùng sẽ để lại dữ liệu của họ.

3. Tạo tệp reg.php có nội dung (tất cả các nhận xét bên trong):



Sự đăng ký


Sự đăng ký
















4. Tạo một tập tin, sẽ nhập dữ liệu vào cơ sở dữ liệu và lưu người dùng. save_user.php(bình luận bên trong):



{
}
// nếu thông tin đăng nhập và mật khẩu được nhập thì chúng tôi sẽ xử lý chúng để thẻ và tập lệnh không hoạt động, bạn không bao giờ biết mọi người có thể nhập gì


// loại bỏ khoảng trắng thừa
$đăng nhập = cắt($đăng nhập);
$password = cắt($password);
// kết nối với cơ sở dữ liệu
// kiểm tra sự tồn tại của người dùng có cùng thông tin đăng nhập
$result = mysql_query("CHỌN id TỪ người dùng Ở ĐÂU login="$login"",$db);
if (!empty($myrow["id"])) (
exit("Xin lỗi, thông tin đăng nhập bạn nhập đã được đăng ký. Vui lòng nhập thông tin đăng nhập khác.");
}
// nếu không đúng thì lưu dữ liệu
$result2 = mysql_query("XÁC NHẬN VÀO người dùng (đăng nhập,mật khẩu) GIÁ TRỊ("$login","$password")");
// Kiểm tra xem có lỗi không
nếu ($result2=="TRUE")
{
echo "Bạn đã đăng ký thành công! Bây giờ bạn có thể vào trang web. Trang chủ";
}
khác(
echo "Lỗi! Bạn chưa đăng ký.";
}
?>

5. Bây giờ người dùng của chúng tôi có thể đăng ký! Tiếp theo, bạn cần tạo một “cánh cửa” cho những người dùng đã đăng ký để vào trang web. chỉ mục.php(bình luận bên trong):

// toàn bộ quy trình hoạt động theo phiên. Đó là nơi dữ liệu của người dùng được lưu trữ khi anh ta ở trên trang web. Điều rất quan trọng là khởi chạy chúng ngay từ đầu trang!!!
session_start();
?>


<a href="https://viws.ru/vi/sdelat-nachalnoi-stranicei-kak-sdelat-glavnuyu-stranicu.html">Trang chủ</a>


Trang chủ











Đăng ký



// Kiểm tra xem biến đăng nhập và id người dùng có trống không
if (trống($_SESSION["đăng nhập"]) hoặc trống($_SESSION["id"]))
{
// Nếu trống thì chúng ta không hiển thị link
echo "Bạn đang đăng nhập với tư cách là khách
Liên kết này chỉ có sẵn cho người dùng đã đăng ký";
}
khác
{

Trong tập tin chỉ mục.php Chúng tôi sẽ hiển thị một liên kết chỉ mở cho người dùng đã đăng ký. Đây là toàn bộ mục đích của tập lệnh - để hạn chế quyền truy cập vào bất kỳ dữ liệu nào.

6. Vẫn còn một tệp xác minh thông tin đăng nhập và mật khẩu đã nhập. testreg.php (bình luận bên trong):

session_start();// toàn bộ quy trình hoạt động trên các phiên. Đó là nơi dữ liệu của người dùng được lưu trữ khi anh ta ở trên trang web. Điều rất quan trọng là khởi chạy chúng ngay từ đầu trang!!!
if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //nhập thông tin đăng nhập được nhập bởi người dùng vào biến $login, nếu nó trống thì hủy biến
if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
// đặt mật khẩu do người dùng nhập vào biến $password, nếu nó trống thì hủy biến
if (empty($login) hoặc trống($password)) // nếu người dùng không nhập thông tin đăng nhập hoặc mật khẩu thì chúng tôi sẽ báo lỗi và dừng tập lệnh
{
exit("Bạn chưa nhập đầy đủ thông tin, quay lại điền đầy đủ thông tin!");
}
// nếu thông tin đăng nhập và mật khẩu được nhập thì chúng tôi sẽ xử lý chúng để thẻ và tập lệnh không hoạt động, bạn không bao giờ biết mọi người có thể nhập gì
$đăng nhập = Striplashes($đăng nhập);
$login = htmlspecialchars($đăng nhập);
$password = Striplashes($password);
$password = htmlspecialchars($password);
// loại bỏ khoảng trắng thừa
$đăng nhập = cắt($đăng nhập);
$password = cắt($password);
// kết nối với cơ sở dữ liệu
include("bd.php");// file bd.php phải nằm trong cùng thư mục với tất cả các file khác, nếu không thì chỉ cần thay đổi đường dẫn

$result = mysql_query("CHỌN * TỪ người dùng Ở ĐÂU login="$login"",$db); // lấy từ cơ sở dữ liệu tất cả dữ liệu về người dùng với thông tin đăng nhập đã nhập
$myrow = mysql_fetch_array($result);
if (trống($myrow["mật khẩu"]))
{
// nếu người dùng có thông tin đăng nhập đã nhập không tồn tại
}
khác(
// nếu tồn tại thì kiểm tra mật khẩu
if ($myrow["password"]==$password) (
// nếu mật khẩu trùng khớp thì chúng tôi sẽ khởi chạy một phiên cho người dùng! Bạn có thể chúc mừng anh ấy, anh ấy đã vào được!
$_SESSION["đăng nhập"]=$myrow["đăng nhập"];
$_SESSION["id"]=$myrow["id"];//dữ liệu này được sử dụng rất thường xuyên, vì vậy người dùng đã đăng nhập sẽ “mang theo bên mình”
echo "Bạn đã vào trang thành công! Trang chủ";
}
khác(
// nếu mật khẩu không khớp

Thoát ("Xin lỗi, thông tin đăng nhập hoặc mật khẩu bạn nhập không chính xác.");
}
}
?>

Được rồi, mọi chuyện đã kết thúc rồi! Bài học có thể nhàm chán nhưng rất hữu ích. Ở đây chỉ có ý tưởng đăng ký được hiển thị, sau đó bạn có thể cải thiện nó: thêm bảo vệ, thiết kế, trường dữ liệu, tải hình đại diện, đăng xuất khỏi tài khoản (để thực hiện việc này, chỉ cần hủy các biến khỏi phiên bằng chức năng bỏ đặt) và như thế. Chúc may mắn!

Tôi đã kiểm tra mọi thứ, nó hoạt động bình thường!

Các biểu mẫu HTML là các thành phần giao diện phức tạp. Chúng bao gồm nhiều loại yếu tố chức năng: trường đầu vào