本站所有资源均免费下载无需付费。
登录账号后访问“个人中心”点击“我的余额”在右上角签到后即可免费下载
其资源在源站什么样下载就是什么样,并非本站制作发布,代码是否完整、是否有教程及使用说明需自行判断,本站不保证其资源可用。
在本教程中,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 语句检查用户是否单击了注销按钮。如果是,系统会将它们注销并将它们重定向回登录页面。
就是这样!