Mysql
 sql >> база данни >  >> RDS >> Mysql

Пълна система за регистрация на потребители, използваща PHP и MySQL база данни

В този урок ви превеждам през пълния процес на създаване на система за регистрация на потребители, където потребителите могат да създадат акаунт, като предоставят потребителско име, имейл и парола, влизане и излизане с помощта на PHP и MySQL. Също така ще ви покажа как можете да направите някои страници достъпни само за влезли потребители. Всеки друг потребител, който не е влязъл, няма да има достъп до страницата.

Първото нещо, което трябва да направим, е да настроим нашата база данни.

Създайте база данни, наречена регистрация . В регистрацията база данни, добавете таблица, наречена потребители . Таблицата с потребители ще заеме следните четири полета.

  • идентификатор
  • потребителско име  -  varchar(100)
  • имейл  -  varchar(100)
  • парола  -  varchar(100)

Можете да създадете това с MySQL клиент като PHPMyAdmin.

Или можете да го създадете в подканата на MySQL, като използвате следния SQL скрипт:

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 сървър).

В папката registration,  създайте следните файлове: 

 

Отворете тези файлове в текстов редактор по ваш избор. Моят е Sublime Text 3.

Регистриране на потребител

Отворете файла register.php и поставете следния код в него:

regiser.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>

Засега нищо сложно, нали?

Тук трябва да отбележите няколко неща:

Първото е, че действието на нашия формуляр атрибутът е зададен на register.php. Това означава, че когато се щракне върху бутона за изпращане на формуляра, всички данни във формуляра ще бъдат изпратени на същата страница (register.php). Частта от кода, която получава тези данни от формуляра, е записана във файла server.php и затова го включваме в най-горната част на файла register.php.

Забележете също, че включваме файла errors.php за показване на грешки във формуляра. Ще стигнем до това скоро.

Както можете да видите в главната секция, ние се свързваме към файл 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 и поставете този код в него:

server.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 проверява дали потребителят е щракнал върху бутона за излизане. Ако да, системата ги излиза и ги пренасочва обратно към страницата за вход.

И това е!

Сега продължете, персонализирайте го така, че да отговаря на вашите нужди и създайте страхотен сайт. Ако имате някакви притеснения или нещо, което трябва да изясните, оставете го в коментарите по-долу и помощта ще дойде.

Винаги можете да подкрепите, като споделите в социалните медии или препоръчате блога ми на вашите приятели и колеги.

С най-добри пожелания :D


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция MySQL ATAN() – Връща дъгата на тангенса на стойност (или стойности)

  2. Как мога да изброя същите идентификационни данни с while цикъл в PHP?

  3. mysql изберете от n последни реда

  4. Защо MySQL позволява групиране по заявки БЕЗ агрегатни функции?

  5. Извикване на PHP скрипт от MySQL тригер