آموزش ساخت سیستم ثبت نام در PHP و پایگاه داده MySQL

آموزش ساخت سیستم ثبت نام در PHP و پایگاه داده MySQL

بروزرسانی : 5 ماه پیش

سورس کد به انتهای آموزش اضافه شد / دمو ویدیویی به انتهای اموزش اضافه شد 

 

آموزش ساخت سیستم ثبت نام و ورود با PHP و MySQL

در این مقاله ی آموزشی قراره به شما یاد بدم که با استفاده از زبان PHP چطور میتوانید یک سیستم ثبت نام کاربران بسازید . همچنین کاربر بتواند عمل ورود و خروج را انجام دهد و همچنین یاد بگیریم چطور بخشی از وب سایت را فقط برای کاربرانی که ثبت نام کردن و وارد شدن ، نمایش دهیم. در این مقاله از زبان برنامه نویسی PHP و پایگاه داده MYSQL استفاده خواهیم کرد . 

اولین کاری که باید انجام دهید تنظیم کردن یک پایگاه داده است : 

یک پایگاه داده جدید بسازید و نام آنرا registration قرار دهید در این پایگاه داده یک جدول جدید بسازید به نام users . جدول users باید فیلدهای زیر را داشته باشد : 

  • id
  • username  -  varchar(100)
  • email  -  varchar(100)
  • password  -  varchar(100)

 

شما میتوانید پایگاه داده و جدول های درون آن و همچنین فیلدهای درون جدول را با استفاده از برنامه PHPMyAdmin بسازید . اگر از XAMPP استفاده میکنید در مرورگرخود به آدرس localhost/phpmyadmin بروید . 

بعد از اینکه جدول و فیلد های آنرا ساختید باید مشابه تصویر زیر باشد : 

 

آموزش ساخت ثبت نام و ورود کاربران با استفاده از php و mysql

 

اگر قصد دارید بدون استفاده از phpmyadmin و با استفاده از کدهای زبان 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;

 

اتمام ساخت پایگاه داده ثبت نام و ورود با PHP - MySQL

حالا باید یک دایرکتوری ( فولدر ) جدید بسازیم که مربوط به پروژه ی ما میباشد و قرار است فایل های php ما درون آن قرار بگیرد پس در روت اصلی وب سرور مجازی که استفاده میکنیم ( فرض ما این است که شما از xampp استفاده میکنید ) یک دایرکتوری جدید به نام registration  میسازیم . مسیر اصلی روت در xampp درون پوشه ی htdocs میباشد . 

بعد از ساختن پوشه ی registration فایل های php زیر را درون آن بسازید : 

آموزش ثبت نام و ورود در php و mysql 

اگر در دیدن تصویر بالا مشکل دارید من لیست فایل ها را دوباره اینجا نوشتم : 

  • errors.php
  • index.php
  • login.php
  • register.php
  • server.php
  • style.css

 

دایرکتوری یا پوشه ی پروژه را درون یک ادیتور یا ide وب مثل phpstorme یا sublime یا atom باز کنید . 

 

ثبت نام کاربر با استفاده از PHP و MYSQL

فایل  register.php را باز کنید و کدهای زیر را درون آن کپی کنید : 

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

 

تا کنون هیچ چیز پیچیده ای وجود ندارد . 

فقط چندتا نکته وجود دارد که باید به آنها توجه کنید : 

اولا که action فرم در کدهای بالا روی فایل register.php میباشد . معنی این بخش این است که وقتی فرم ارسال میشود یا روی ثبت نام کلیک میشود داده های فرم به خود صفحه ی register.php ارسال میشود نه جای دیگری . 

بخشی که وظیفه ی دریافت داده های فرم را دارد در server.php نوشته شده است به همین علت ما در بالای کدهای خود فایل server.php را اینکلود کرد یم . 

توجه کنید که ما فایل errors.php را هم اینکلود کردیم که وظیفه ی نمایش خطاها را دارد ، جلوتر آنرا توضیح خواهیم داد . 

 

در کدهای بالا درون تگ head ما یک فایل استایل به نام style.css را به صفحه ی خودمان لینک کردیم . style.css  شامل کدهای CSS مربوط به استایل صفحه ی ما است . کدهای زیر را درون style.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;
}

 

حالا اگر صفحه را ریفرش بزنید فرم کمی استایل میگیرد و زیباتر به نظر میرسد . 

خب حالا وقت آن رسیده است داده های ثبت نامی را دریافت کنیم و آنها را بواسطه ی زبان برنامه نویسی پی اچ پی در پایگاه داده MYSQL خودمان ذخیره کنیم همانطور که قبلا گفتیم دریافت اطلاعات فرم ثبت نامی را درون فایل 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 های php استفاده میکنیم تا متوجه شویم که کاربر عمل لاگین یا ورود را انجام داده است یا نه ! خب به همین خاطر session_start() را نوشتیم . 

کامنت های موجود در کدهای بالا همه چیز را مشخص میکند ولی خب چند نکته ی دیگه هم اینجا باید بدانید 

ما از طریق یک شرط بررسی میکنیم که آیا دکمه ی reg_user  در فرم ثبت نام کلیک شده است یا نه . 

به همین خاطر در فرم خودمان برای دکمه ی ثبت نام خاصیت name تعریف کردیم و مقدار انرا reg_user  قرار دادیم تا قابلیت شناسایی داشته باشد . 

تمام داده های کاربر دریافت میشود و بررسی میشود تا صحت آنها ارزیابی شود . همچنین فیلد پسورها بررسی میشود تا یکسان باشند ( منظور رمز و تکرار رمز است که باید یکسان باشند )

اگر هیچ خطایی رخ ندهد . داده ها درون جدول users در پایگاه داده ذخیره میشود البته پسورد همینطوری ذخیره نمیشود و برای امنیت بیشتر مقدار آن هش یا رمزگذاری میشود . این کار را به این خاطر انجام میدهیم تا اگر حتی هکر به پایگاه داده دسترسی داشت ، پسورد واقعی دستش نرسد ! 

خب حالا اگر خطایی وجود داشته باشد هیچ چیز نمایش داده نخواهد شد چون 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 و mysql انجام دادیم و به همین سادگی تمام شد . حالا بریم سراغ ورود یا لاگین : 

 

ورود کاربر توسط php : 

خب حالا بعد از پیاده سازی قسمت ثبت نام رسیدیم به بخش ورود کاربرانی که از قبل ثبت نام را انجام دادن و الان در دیتابیس وجود دارن . 

ورود کاربران راحت تر از پیاده سازی ثبت نام آنهاست کدهای زیر را درون فایل login.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>

 

همانطور که عمل ثبت نام کاربر را درون فایل 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 چه چیزی رخ میدهد . فایل 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>

 

شرط اول بررسی میکند تا ببیند کاربر آیا قبلا وارد شده است یا نه ، اگر وارد نشده باشد به صفحه ی login هدایت میشود . این شرط را به این دلیل گذاشتیم که این صفحه یا بخش فقط برای کاربرانی قابل دسترسی باشد که عمل ورود را انجام داده باشند  اگر دوست دارید با php کاری کنید بخشی از سایت شما فقط برای اعضا نمایش داده شود اساس کار همین است . 

شرط دوم بررسی میکند تا ببیند کاربر وارد شده آیا روی دکمه ی logout یا خروج کلیک کرده است یا نه ؟ اگر کلیک کرده باشد عمل خروج را انجام میدهد و کاربر را به صفحه ی login هدایت میکند . 

 

و به همین سادگی شما سیستم ثبت نام و ورود را نوشتید تبریک میگوئیم . 

در زیر دموی ویدیویی نتیجه ی نهایی آموزش ساخت ثبت نام و ورود با php و mysql را مشاهده میکنید : 

 

سورس کد کامل این دوره را میتوانید از اینجا دانلود کنید : 

 

سورس کد آموزش ساخت سیستم ثبت نام با PHP MySQL

تمام 

 

لینک کوتاه این مقاله : https://avasam.ir/post/117
این سیستم برپایه ی علاقه مندی شما یک دوره ی مناسب به شما پیشنهاد میدهد
مرا بسوی بهترین دوره ی آموزشی که برای من مناسب است هدایت کن 🤖
برای استفاده ی دیگران و حمایت از ما در جامعه های زیر به اشتراک بگذارید

.:: نظرهای کاربران ::.
احسان / 2 ماه پیش

سلام 

میخواهم که رمز عبور هم در mySQL نمایش داده شود کدام قسمت از کد را باید تغییر دهم 

heidar / 10 ماه پیش

سلام چرا با VPN  فقط باز میشه ؟ همون صفحه ای که چک میکنه حساب کاربری داره یا نه ؟ ممنون میشم بگید !

مهمان / 12 ماه پیش

سلام من سورس هارو هم دانلود میکنم و میریزم تو htdocs در زمپ این ارورو میده

Fatal error: Uncaught mysqli_sql_exception: Table 'registration.users' doesn't exist in C:\xampp\htdocs\registration\server.php:32 Stack trace: #0 C:\xampp\htdocs\registration\server.php(32): mysqli_query(Object(mysqli), 'SELECT * FROM u...') #1 C:\xampp\htdocs\registration\register.php(1): include('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\registration\server.php on line 32

محسن / 1 سال پیش

سلام ، عالی بود ، ممنون

محسن / 1 سال پیش

سلام ، عالی بود ، ممنون

حسین / 1 سال پیش

هرچی دکمه ورود را میزنم میگه نام کاربری اجباریست.

با اینکه وارد کردم

حسین / 1 سال پیش

سلام

این کدتون عالی بود. ممنون

فقط اینکه چطور روی صفحه اول سایتم یه جایی مثل بالای صفحه کسایی که ثبت نام کردند و توی اکانتشونن یوزر نیم شون و کسایی ثبت نام نکردند بهشون دکمه با لینک صفحه ثبت نام نشون داده بشه؟ 

مشتری / 2 سال پیش

هرچی دکمه ورود را میزنم میگه نام کاربری اجباریست.

با اینکه وارد کردم

یونسم / 2 سال پیش

عالی بود دمتون گرم

فروزان پناهی / 2 سال پیش

سلام چرا سورس کد دانلود نمیشه؟

صدرا کریم زاده / 2 سال پیش

با سلام و خسته نباشید.

ببخشید من گذاشتم ولی اینطوری شد ( https://s6.uupload.ir/files/screenshot_2022-02-16_205804_1201.png ).

صدرا کریم زاده / 2 سال پیش

وقتی کاربر روی دکمه خروج میزنه کلا نام کاربری حذف میشه

پشتیبانی آواسام :

باگ کدنویسی هست کدهای پی اچ پی2 و کوئری های اس کیو ال را مجددا بررسی کنید

صدرا کریم زاده / 2 سال پیش

سلام

ببخشید من همه این کار ها را انجام دادم ولی وقتی روی خروج میزنم کامل حساب حذف میشه

پشتیبانی آواسام :

سلام منظورتون چیه که کامل حساب حذف میشه ؟‌ توی دیتابیس رو از طریق phpmyadmin چک کنید

محمد ضرغامی / 3 سال پیش

سلام میخواستم بدونم چطوری توی صفحه index.php علاوه بر username کاربر رمز یا ایمیل کاربر رو هم نشان بده؟

پشتیبانی آواسام :

سلام متوجه منظورتون نشدیم اما این کار دقیقا مثل نمایش همون یوزرنیم است

Parsa Bahrambeik / 3 سال پیش

سلام, خسته نباشید. من در حال درست کردن یک وب سایت سفارش غذای آنلاین جهت سفارش پیتزا هستم.
من چند سوال دارم که اگر جواب آن را بگیرم بابت کمک حد اقل 200 هزار تومان و اگر با این کمک شما ؛ کاملا مشکل من حل شد 500 هزار تومان به حساب شما خواهم ریخت.
چون کار من برنامه نویسی است و با “ویژوال سی” و “اس کیو ال سرور”و “پایتون” و “سی پلاس پلاس” کسی از من درخواست کمک کرده و حتما برای کارش وب سایت نیاز دارد و من در حال حاضر فقط “اچ تی ام ال و سی اس اس” آن را آماده کرده ام. اگر می توانید.. لطفا من را راهنمایی کنید که:
آیا برای تمام 32 نوع غذا باید برای هر یک فیلدی بسازم؟
چگونه بعد از پر کردن فرم ثبت نام و سپس ورود کاربر ؛ برای هر کاربر یک پروفایل ذخیره اطلاعات سفارش ایجاد کنم؟
چگونه بعد از سفارش مجموع خرید مشتری محاسبه شده و بصورت یک اطلاعات سفارش ؛ برای فروشنده از پرینتر خارج شود؟
اگر مشتری نقد بوسیله “پای پل” پرداخت کند راه آن ارتباط با این نوع پرداخت چگونه است؟
و…….
امیدوارم بتوانید که به من کمک کنید. بسیار متشکر می شوم
لطفا بانک اطلاعاتی آن “مای اس کیو ال” و برنامه آن “پی اچ پی” . از “زمپ” استفاده کنید.
ایمیل من : parsa.bahrambeik@gmail.com
متشکرم

اکر سورس کد و توضیحات کامل باشد و حد اکثر تا آخر هفته آماده کردید 700 هزار تومان می پردازم.

علی / 3 سال پیش

سلام خواهشا بگید چطوری اطلاعات هر کاربر رو ویرایش کنم یا اطلاعاتشو تغییر بدم یا حذف کنم 

پشتیبانی آواسام :

سلام این مورد نیاز به کمی کدنویسی داره درصورت تمایل میتونین از آموزش های که برای php داریم استفاده کنین . بخش محصولات سایت برید

دوره ی آموزش پروژه محور ساخت کافه بازار دوره ی آموزش پروژه محور ساخت فروشگاه دیجیکالا آموزش لاراول دوره ی آموزش ویو جی اس