在本教程中,Q9源码网将引导您完成创建用户注册系统的完整过程,用户可以通过提供用户名、电子邮件和密码、使用 PHP 和 MySQL 登录和注销来创建帐户。我还将向您展示如何使某些页面仅供登录用户访问。任何其他未登录的用户将无法访问该页面。

我们需要做的第一件事是建立我们的数据库。 

创建一个名为 registration的数据库。在注册数据库中,添加一个名为 users的表。users 表将采用以下四个字段。

  • ID
  • 用户名 – varchar(100)
  • 电子邮件 – varchar(100)
  • 密码 – varchar(100)

您可以使用像 PHPMyAdmin 这样的 MySQL 客户端来创建它。

或者,您可以使用以下 SQL 脚本在 MySQL 提示符下创建它:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `username` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

脚本就是这样。 

现在在我们的服务器可访问的目录中创建一个名为 registration的文件夹。即在 htdocs(如果您使用 XAMPP 服务器)或 www (如果您使用 wampp 服务器)内创建文件夹。

在文件夹注册中, 创建以下文件: 

在您选择的文本编辑器中打开这些文件。我的是崇高文本3。

注册用户

打开 register.php 文件并在其中粘贴以下代码:

注册器.php:

<?php include('server.php') ?>
<!DOCTYPE html>
<html>
<head>
  <title>Registration system PHP and MySQL</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
  <div class="header">
  	<h2>Register</h2>
  </div>
	
  <form method="post" action="register.php">
  	<?php include('errors.php'); ?>
  	<div class="input-group">
  	  <label>Username</label>
  	  <input type="text" name="username" value="<?php echo $username; ?>">
  	</div>
  	<div class="input-group">
  	  <label>Email</label>
  	  <input type="email" name="email" value="<?php echo $email; ?>">
  	</div>
  	<div class="input-group">
  	  <label>Password</label>
  	  <input type="password" name="password_1">
  	</div>
  	<div class="input-group">
  	  <label>Confirm password</label>
  	  <input type="password" name="password_2">
  	</div>
  	<div class="input-group">
  	  <button type="submit" class="btn" name="reg_user">Register</button>
  	</div>
  	<p>
  		Already a member? <a href="login.php">Sign in</a>
  	</p>
  </form>
</body>
</html>

到目前为止没有什么复杂的吧?那么跟Q9源码网继续吧

这里有几点需要注意:

首先是我们表单的 action 属性设置为register.php。这意味着当点击表单提交按钮时,表单中的所有数据都会被提交到同一个页面(register.php)。接收此表单数据的代码部分写在 server.php 文件中,这就是我们将其包含在 register.php 文件最顶部的原因。

另请注意,我们包含 errors.php 文件以显示表单错误。我们很快就会谈到这一点。

正如您在 head 部分中看到的,我们正在链接到 style.css 文件。打开 style.css 文件并在其中粘贴以下 CSS:

* {
  margin: 0px;
  padding: 0px;
}
body {
  font-size: 120%;
  background: #F8F8FF;
}

.header {
  width: 30%;
  margin: 50px auto 0px;
  color: white;
  background: #5F9EA0;
  text-align: center;
  border: 1px solid #B0C4DE;
  border-bottom: none;
  border-radius: 10px 10px 0px 0px;
  padding: 20px;
}
form, .content {
  width: 30%;
  margin: 0px auto;
  padding: 20px;
  border: 1px solid #B0C4DE;
  background: white;
  border-radius: 0px 0px 10px 10px;
}
.input-group {
  margin: 10px 0px 10px 0px;
}
.input-group label {
  display: block;
  text-align: left;
  margin: 3px;
}
.input-group input {
  height: 30px;
  width: 93%;
  padding: 5px 10px;
  font-size: 16px;
  border-radius: 5px;
  border: 1px solid gray;
}
.btn {
  padding: 10px;
  font-size: 15px;
  color: white;
  background: #5F9EA0;
  border: none;
  border-radius: 5px;
}
.error {
  width: 92%; 
  margin: 0px auto; 
  padding: 10px; 
  border: 1px solid #a94442; 
  color: #a94442; 
  background: #f2dede; 
  border-radius: 5px; 
  text-align: left;
}
.success {
  color: #3c763d; 
  background: #dff0d8; 
  border: 1px solid #3c763d;
  margin-bottom: 20px;
}

现在表格看起来很漂亮。

现在让我们编写将接收从表单提交的信息并将信息存储(注册)到数据库中的代码。如前所述,我们在 server.php 文件中执行此操作。

打开 server.php 并将此代码粘贴到其中:

服务器.php

<?php
session_start();

// initializing variables
$username = "";
$email    = "";
$errors = array(); 

// connect to the database
$db = mysqli_connect('localhost', 'root', '', 'registration');

// REGISTER USER
if (isset($_POST['reg_user'])) {
  // receive all input values from the form
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $email = mysqli_real_escape_string($db, $_POST['email']);
  $password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
  $password_2 = mysqli_real_escape_string($db, $_POST['password_2']);

  // form validation: ensure that the form is correctly filled ...
  // by adding (array_push()) corresponding error unto $errors array
  if (empty($username)) { array_push($errors, "Username is required"); }
  if (empty($email)) { array_push($errors, "Email is required"); }
  if (empty($password_1)) { array_push($errors, "Password is required"); }
  if ($password_1 != $password_2) {
	array_push($errors, "The two passwords do not match");
  }

  // first check the database to make sure 
  // a user does not already exist with the same username and/or email
  $user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
  $result = mysqli_query($db, $user_check_query);
  $user = mysqli_fetch_assoc($result);
  
  if ($user) { // if user exists
    if ($user['username'] === $username) {
      array_push($errors, "Username already exists");
    }

    if ($user['email'] === $email) {
      array_push($errors, "email already exists");
    }
  }

  // Finally, register user if there are no errors in the form
  if (count($errors) == 0) {
  	$password = md5($password_1);//encrypt the password before saving in the database

  	$query = "INSERT INTO users (username, email, password) 
  			  VALUES('$username', '$email', '$password')";
  	mysqli_query($db, $query);
  	$_SESSION['username'] = $username;
  	$_SESSION['success'] = "You are now logged in";
  	header('location: index.php');
  }
}

// ... 

会话用于跟踪登录用户,因此我们在文件顶部包含一个 session_start()。

代码中的注释几乎解释了一切,但我将在这里强调一些事情。

if 语句确定是否单击注册表单上的 reg_user 按钮。请记住,在我们的表单中,提交按钮的 name 属性设置为 reg_user,这就是我们在 if 语句中引用的内容。

从表单接收所有数据并检查以确保用户正确填写了表单。还比较密码以确保它们匹配。

如果没有遇到错误,用户将  使用散列密码在数据库的用户表中注册。哈希密码是出于安全原因。它确保即使黑客设法访问您的数据库,他们也无法读取您的密码。

但是现在没有显示错误消息,因为我们的 errors.php 文件仍然是空的。要显示错误,请将此代码粘贴到 errors.php 文件中。

<?php  if (count($errors) > 0) : ?>
  <div class="error">
  	<?php foreach ($errors as $error) : ?>
  	  <p><?php echo $error ?></p>
  	<?php endforeach ?>
  </div>
<?php  endif ?>

当用户在数据库中注册时,他们会立即登录并重定向到 index.php 页面。

这就是注册。让我们看看用户登录。

登录用户

让用户登录是一件更容易的事情。只需打开登录页面并将此代码放入其中:

<?php include('server.php') ?>
<!DOCTYPE html>
<html>
<head>
  <title>Registration system PHP and MySQL</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
  <div class="header">
  	<h2>Login</h2>
  </div>
	 
  <form method="post" action="login.php">
  	<?php include('errors.php'); ?>
  	<div class="input-group">
  		<label>Username</label>
  		<input type="text" name="username" >
  	</div>
  	<div class="input-group">
  		<label>Password</label>
  		<input type="password" name="password">
  	</div>
  	<div class="input-group">
  		<button type="submit" class="btn" name="login_user">Login</button>
  	</div>
  	<p>
  		Not yet a member? <a href="register.php">Sign up</a>
  	</p>
  </form>
</body>
</html>

此页面上的所有内容都与 register.php 页面非常相似。

现在将用户登录的代码写入同一个 server.php 文件中。因此打开 server.php 文件并在文件末尾添加以下代码:

// ... 

// LOGIN USER
if (isset($_POST['login_user'])) {
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $password = mysqli_real_escape_string($db, $_POST['password']);

  if (empty($username)) {
  	array_push($errors, "Username is required");
  }
  if (empty($password)) {
  	array_push($errors, "Password is required");
  }

  if (count($errors) == 0) {
  	$password = md5($password);
  	$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
  	$results = mysqli_query($db, $query);
  	if (mysqli_num_rows($results) == 1) {
  	  $_SESSION['username'] = $username;
  	  $_SESSION['success'] = "You are now logged in";
  	  header('location: index.php');
  	}else {
  		array_push($errors, "Wrong username/password combination");
  	}
  }
}

?>

同样,所有这些都是检查用户是否正确填写了表单,验证他们的凭据是否与数据库中的记录匹配,如果匹配,则将其登录。登录后,用户将被重定向到 index.php 文件并显示成功消息。

现在让我们看看 index.php 文件中发生了什么。打开它并在其中粘贴以下代码:

<?php 
  session_start(); 

  if (!isset($_SESSION['username'])) {
  	$_SESSION['msg'] = "You must log in first";
  	header('location: login.php');
  }
  if (isset($_GET['logout'])) {
  	session_destroy();
  	unset($_SESSION['username']);
  	header("location: login.php");
  }
?>
<!DOCTYPE html>
<html>
<head>
	<title>Home</title>
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>

<div class="header">
	<h2>Home Page</h2>
</div>
<div class="content">
  	<!-- notification message -->
  	<?php if (isset($_SESSION['success'])) : ?>
      <div class="error success" >
      	<h3>
          <?php 
          	echo $_SESSION['success']; 
          	unset($_SESSION['success']);
          ?>
      	</h3>
      </div>
  	<?php endif ?>

    <!-- logged in user information -->
    <?php  if (isset($_SESSION['username'])) : ?>
    	<p>Welcome <strong><?php echo $_SESSION['username']; ?></strong></p>
    	<p> <a href="index.php?logout='1'" style="color: red;">logout</a> </p>
    <?php endif ?>
</div>
		
</body>
</html>

第一个 if 语句检查用户是否已经登录。如果他们没有登录,他们将被重定向到登录页面。因此,只有登录用户才能访问此页面。如果您想让任何页面只对登录用户访问,您所要做的就是将此 if 语句放在文件的顶部。

第二个 if 语句检查用户是否单击了注销按钮。如果是,系统会将它们注销并将它们重定向回登录页面。

就是这样!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。