آموزش ورود و عضویت کاربران در PHP و MySQL

09 مهر 1397
flat-login-register-psd-ui-db

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

ورود و عضویت کاربران در زبان PHP معمولا همراه با پایگاه داده MySQL می باشد. لذا به دلیل فراگیر بودن این دو سیستم، آموزش زیر بر اساس این زبان و پایگاه داده مذکور می باشد.

در این مقاله از PHP ۷ استفاده شده است. لذا در صورتیکه با زبان PHP نسخه 7 آشنایی ندارید توصیه می شود حتما دوره رایگان آموزش PHP را از طریق لینک زیر مطالعه بفرمایید:

در یک نگاه

مراحل ساخت اسکریپت ورود و عضویت کاربران در زبان PHP و پایگاه داده MySQL به شرح زیر می باشد:

  1. ساخت پایگاه داده
  2. ساخت جدول کاربران در پایگاه داده با فیلدهای: id, username, email, password, trn_date
  3. ساخت فرم عضویت
  4. ساخت فرم ورود
  5. اتصال به پایگاه داده با استفاده از PHP
  6. احزار هویت (Authenticate) کاربران
  7. ساخت صفحه ایندکس و داشبورد
  8. ساخت صفحه خروج کاربر
  9. ساخت فایل CSS برای فرم ها و ظاهر آنها

ساخت پایگاه داده

برای ساخت یک پایگاه داده ابتدا وارد phpmyadmin شوید و سپس با کلیک کردن روی زبانه database نام دیتابیس خود را وارد کنید، سپس روی دکمه ی create کلیک کرده و دیتابیس خود را ایجاد نمایید. در غیر اینصورت می توانید با وارد کردن کوئری زیر در زبانه SQL به صورت مستقیم پایگاه داده خود را ایجاد نمایید:

CREATE DATABASE register;

با این کار یک پایگاه داده در MySQL به نام register ایجاد می گردد.

ساخت جدول کاربران

برای ساخت جدول کاربران ابتدا در phpmyadmin وارد دیتابیس ایجاد شده شوید و سپس دستور کوئری زیر را درون زبانه SQL دیتابیس register وارد کنید:

CREATE TABLE IF NOT EXISTS `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(50) NOT NULL,
 `email` varchar(50) NOT NULL,
 `password` varchar(50) NOT NULL,
 `trn_date` datetime NOT NULL,
 PRIMARY KEY (`id`)
 );

با این کار یک جدول به نام users در پایگاه داده register با فیلدهای id و username و email و password و trn_date ایجاد می گردد. همچنین ستون id به عنوان یک ستون ایندکس primary درنظر گرفته شده و از قابلیت AUTO_INCREMENT برخوردار است.

ساخت فرم ورود و عضویت کاربران در PHP (ثبت نام کاربران)

در مجموعه کدهای زیر یک فرم بسیار ساده به زبان HTML نوشته شده است که در آن یک سری توابع و دستورهای PHP اجرا می شود. و در ادامه به توضیح تک به تک دستورات می پردازیم.

درون فولدری که میخواهید این ساختار را پیاده سازی کنید یک فایل به نام registration.php ایجاد نمایید و سپس دستورات زیر را درون آن کپی کنید.

توجه داشته باشید که برای بارگذاری style ها نیازی به استفاده از بوت استراپ نیست بلکه می توانید از فایل css که در ادامه کدها قرار داده شده است بهره ببرید:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ثبت نام کاربران</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body dir="rtl">
	<?php
	require('db.php');
	// If form submitted, insert values into the database.
	if (isset($_REQUEST['username'])){
			// removes backslashes
		$username = stripslashes($_REQUEST['username']);
			//escapes special characters in a string
		$username = mysqli_real_escape_string($con,$username); 
		$email = stripslashes($_REQUEST['email']);
		$email = mysqli_real_escape_string($con,$email);
		$password = stripslashes($_REQUEST['password']);
		$password = mysqli_real_escape_string($con,$password);
		$trn_date = date("Y-m-d H:i:s");
			$query = "INSERT into `users` (username, password, email, trn_date)
	VALUES ('$username', '".md5($password)."', '$email', '$trn_date')";
			$result = mysqli_query($con,$query);
			if($result){
				echo "<div class='form'>
	<h3>ثبت نام شما با موفقیت انجام شد.</h3>
	<br/>برای ورود روی  <a href='login.php'>اینجا</a> کلیک کنید</div>";
			}
		}else{
	?>
	<div class="form">
	<h3>ثبت نام کاربران</h1>
	<form name="registration" action="" method="post">
		<input type="text" name="username" placeholder="نام کاربری" required />
		<input type="email" name="email" placeholder="ایمیل" required />
		<input type="password" name="password" placeholder="رمز عبور" required />
		<input type="submit" name="submit" value="ثبت نام" />
	</form>
	</div>
	<?php } ?>
</body>
</html>

فایل style.css:

body {
     font-family:Arial, Sans-Serif;
}
body{
	font-family: "tahoma" !important;
}
.clearfix:before, .clearfix:after{
     content: "";
     display: table;
}
.clearfix:after{
     clear: both;
}
a{
     color:#0067ab;
     text-decoration:none;
}
a:hover{
     text-decoration:underline;
}
.form{
     width: 300px;
     margin: 0 auto;
}
input[type='text'], input[type='email'],
input[type='password'] {
     width: 200px;
     border-radius: 2px;
     border: 1px solid #CCC;
     padding: 10px;
     color: #333;
     font-size: 12px;
     margin-top: 10px;
	 font-family: "tahoma" !important;
}
input[type='submit']{
     padding: 10px 25px 8px;
     color: #fff;
     background-color: #0067ab;
     text-shadow: rgba(0,0,0,0.24) 0 1px 0;
     font-size: 12px;
     box-shadow: rgba(255,255,255,0.24) 0 2px 0 0 inset,#fff 0 1px 0 0;
     border: 1px solid #0164a5;
     border-radius: 2px;
     margin-top: 10px;
     cursor:pointer;
	 font-family: "tahoma" !important;
}
input[type='submit']:hover {
     background-color: #024978;
}

در ابتدا فرم ثبت نام در PHP را با دستورات HTML آغاز کرده ایم و پس از تگ body اولین دستور PHP خود را نوشته ایم. در این دستور با استفاده از تابع require می توان یک فایل db.php را فراخوانی کرد که در آن روش اتصال به پایگاه داده توضیح داده شده است.

سپس با استفاده از تابع isset بررسی کرده ایم که آیا درخواست username ارسال می شود یا نه؟ اگر این درخواست (یعنی ارسال نام کاربری) ارائه شود، نام کاربری را با استفاده از تابع stripslashes پاکسازی می کنیم. به عبارت دیگر با استفاده از این تابع بک اسلش ها را از نام کاربری برای افزایش امنیت حذف می کنیم.

در خط بعدی با استفاده از تابع mysqli_real_escape_string نام کاربری را از کاراکترهای اضافی فیلتر کرده و تمام این مراحل را برای ایمیل و پسورد انجام می دهیم.

در متغییر trn_date فرمت زمان ذخیره کاربر را مشخص می کنیم. سپس کوئری مشخص برای ثبت نام کاربران در جدول users را می نویسم.

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

عضویت کاربران در PHP و Mysql

ساخت فرم ورود و عضویت کاربران در PHP (ورود کاربران)

برای ساخت فرم ورود کاربران یک فایل به نام login.php در مسیر روت (اصلی) پوشه درست کرده و سپس کدهای زیر را درون آن قرار دهید:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ورود کاربران</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body dir="rtl">
	<?php
	require('db.php');
	session_start();
	// If form submitted, insert values into the database.
	if (isset($_POST['username'])){
			// removes backslashes
		$username = stripslashes($_REQUEST['username']);
			//escapes special characters in a string
		$username = mysqli_real_escape_string($con,$username);
		$password = stripslashes($_REQUEST['password']);
		$password = mysqli_real_escape_string($con,$password);
		//Checking is user existing in the database or not
			$query = "SELECT * FROM `users` WHERE username='$username'
	and password='".md5($password)."'";
		$result = mysqli_query($con,$query) or die(mysql_error());
		$rows = mysqli_num_rows($result);
			if($rows==1){
			$_SESSION['username'] = $username;
				// Redirect user to index.php
			header("Location: index.php");
			 }else{
		echo "<div class='form'>
	<h3>نام کاربری یا رمز عبور شما اشتباه است</h3>
	<br/>برای ورود روی <a href='login.php'>اینجا</a> کلیک کنید</div>";
		}
		}else{
	?>
	<div class="form">
		<h3>ورود</h1>
		<form action="" method="post" name="login">
			<input type="text" name="username" placeholder="نام کاربری" required />
			<input type="password" name="password" placeholder="رمز عبور" required />
			<input name="submit" type="submit" value="ورود" />
		</form>
		<p style="font-size: 12px;">هنوز عضو سایت نشده اید؟<a href='registration.php'>هم اکنون ثبت نام کنید</a></p>
	</div>
	<?php } ?>
</body>
</html>

در این فرم ابتدا تگ های HTML را ایجاد کرده و سپس با استفاده از دستور require فایل db.php را فراخوانی می کنیم. از تابع session_start() جهت ثبت و ذخیره سشن (نشست) کاربران بهره می بریم. در نهایت با تابع isset بررسی می کنیم که آیا نام کاربری از طریق فرم ورود کاربران در php ارسال شده است یا خیر؟ اگر ارسال شده بود، نام کاربری و رمز عبور را دریافت کرده و در نهایت با استفاده از یک کوئری، کاربر موردنظر را پیدا می کنیم.

توجه داشته باشید که برای دستیابی به رمز عبور از تابع md5 جهت رمزگذاری استفاده می کنیم. اگر نام کاربری یافت شد مقدار username را در نشست (سشن) کاربر ذخیره کرده و در نهایت کاربر را به صفحه index.php که در ادامه خواهیم ساخت، با استفاده از تابع header، ریدایرکت (هدایت) خواهیم کرد.

در صورتیکه تمام کدهای فوق را به درستی وارد کرده باشید، با ورود به آدرس yoursite.com/login.php با تصویر زیر روبه رو خواهید شد:

ورود کاربران در PHP و MySQL

اتصال به پایگاه داده در PHP

برای اتصال به پایگاه داده برای سیستم ورود و عضویت کاربران در PHP کافیست کدهای زیرا درون فایل db.php در مسیر روت (اصلی) پوشه خود وارد کنید:

<?php
// Enter your Host, username, password, database below.
// I left password empty because i do not set password on localhost.
$con = mysqli_connect("localhost","root","","register");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
?>

همانطور که در جریان هستید از دستور mysqli_connect برای اتصال به پایگاه داده استفاده می شود که این تابع دارای چهار آرگومان اصلی است. آرگومان اول نام هاست، آرگومان دوم نام کاربری دیتابیس، آرگومان سوم رمز عبور دیتابیس و آرگومان چهارم نام پایگاه داده را دریافت می کند.

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

احراز هویت کاربران در PHP

برای احراز هویت کاربران PHP یک صفحه به نام auth.php درون فولدر روت ایجاد می کنیم و سپس کدهای زیر را درون آن قرار می دهیم:

<?php
session_start();
if(!isset($_SESSION["username"])){
header("Location: login.php");
exit(); }
?>

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

صفحه ایندکس کاربران

کاربرانی که پس از احراز هویت با موفقیت وارد سایت شده باشند با یک صفحه ایندکس روبه رو خواهند شد. که در این صفحه لینک صفحه داشبورد و خروج کاربران قرار دارد. بنابراین کدهای زیر را درون یک فایل به نام index.php ذخیره می کنیم:

<?php
//include auth.php file on all secure pages
include("auth.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>صفحه داشبورد</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body dir="rtl">
	<div class="form">
		<p>خوش آمدی <?php echo $_SESSION['username']; ?>!</p>
		<p>This is secure area.</p>
		<p><a href="dashboard.php">داشبورد</a></p>
		<a href="logout.php">خروج</a>
	</div>
</body>
</html>

ساخت صفحه داشبورد

برای ایجاد صفحه داشبورد کاربران کافیست کدهای زیر را درون یک فایل به نام dashboard.php هم رده با سایر فایل ها قرار دهید:

<?php
require('db.php');
include("auth.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>صفحه محافظت شده داشبورد</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body dir="rtl">
	<div class="form">
		<p>داشبورد</p>
		<p>این صفحه تنها برای کاربرانی که عضو سایت شده اند در دسترس است.</p>
		<p><a href="index.php">صفحه اصلی</a></p>
		<a href="logout.php">خروج</a>
	</div>
</body>
</html>

ساخت دستور خروج کاربران

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

<?php
session_start();
// Destroying All Sessions
if(session_destroy())
{
// Redirecting To Home Page
header("Location: login.php");
}
?>

بسیار عالی عزیزان، به شما تبریک می گوییم در یک مقاله ی کاملا خلاصه و مفید توانستیم نحوه ی آموزش ساخت فرم ورود و عضویت با زبان PHP و پایگاه داده MySQL را خدمت شما عزیزان ارائه دهیم. امیدواریم این آموزش مورد توجه شما واقع شده باشد.

در ضمن دوستان برای دریافت فایل های این پروژه به ادامه ی این پست در پایین صفحه مراجعه نمایید.

نویسنده شوید
دیدگاه‌های شما (16 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

رضایی
23 آذر 1402
سلام و درود عالی بود. من این پروژه را در لوکال و هاست اجرا کردم بدون خطا کار کرد بسیار تشکر میکنم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

رضایی
22 آذر 1402
بسیار عالی بود من این پروژه را لوکال و در هاست سی پنل اجرا کردم و کاملا جواب داد فقط میتونم تشکر کنم چون مشابه این آموزش را خیلی دنبالش بودم اما پیدا نمیکردم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

حمید
07 فروردین 1401
سلام، خیلی عالی بود، استفاده شد ممنون، همیشه موفق باشید

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
12 اردیبهشت 1401
خوشحالیم که کاربردی و مفید بود.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

......
17 شهریور 1400
سلام خسته نباشید خیلی خیلی عالیه همه سایت ها رو گشتم تا این رو پیدا کردم خدا خیرتون بده انشاءالله

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

دانیال
10 اردیبهشت 1400
سلام. واقعا ممنون از این اسکریپت تا الان این تنها اسکیریپت خوبی بوده که دیدم. واقعا متشکرم بسیار کاربری بود همه ی قسمت هاش کار کرد. ولی اگه یک فایل style.css هم قرار میدادید عالی میشد! باز هم متشکرم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

قاسم
28 اسفند 1399
خوبه ممنون ، در لوکال خوب اجرا میشه ولی در هاست آنلاین فارسی رو ارور میده

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

علی جمالی
23 اسفند 1399
ممنون خیلی خوب و عالی بود

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

حسن زنگنه
29 شهریور 1399
اگر در سایت فرمی پر بشه از کجا باید بفهمیم کدام کاربر با چه id بوده و این کجا ذخیره میشه؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

mohammad Danaei
20 شهریور 1399
پروژه کجاست از کجا دانلودش کنم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Aqmp
30 تیر 1399
سلام من هم این مشکل رو دارم یعنی در صفحه ورود Failed to connect to MySQL: No such file or directory و بعد یه سوال دیگه فایل استایل . سی اس اس رو باید داخل فولدر سی اس اس قرار بدم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

احمدرضا
28 بهمن 1398
سلام; این فرم چند تا مشکل داره: 1- کاربر با همون نام کاربری و با ایمیل متفاوت میتونه ثبت نام کنه و برعکس. 2- حتی با همون نام کاربری و ایمیل که قبلا تو دیتابیس هست بازم میشه ثبت نام کرد و اینطوری نمیزاره دیگه کسی با اون نام کاربری وارد بشه 3- این فرم password match نداره چطوری این موارد رو میشه درست کرد؟ ممنون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

یاسین
02 اردیبهشت 1398
سلام برای اپلود اواتار میشه در همین فرم کمک کنید ؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

mzh
13 دی 1397
ممنون واقعا عالی بود موفق باشید

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

مسعود
04 آبان 1397
با سلام ممنون از آموزش کاملتون.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امامی
31 شهریور 1397
با سلام کد های بالا رو روی هاست قرار دادم و تنظیمات دیتابیس مو انجام دادم ولی یه مشکلی تو لاگین دارم و اونم اینه که بعد وارد کردن یوزر پس به صفحه مورد نظر ریدایرکت نمیشه. تو ثبت نام مشکلی ندارم یعنی ثبت نام با موفقیت انجام میشه.ولی همون اطلاعات رو وقتی وارد میکنم یه صفحه سفید میاد و به صفحه ایندکس ریدایرکت نمیشه. اگه میشه راهنمایی کنین با تشکر

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
01 مهر 1397
سلام وقتتون بخیر هنگام ساخت فرم ورود کاربران در PHP شما از یک سری کد که داخل آموزش هست استفاده می کنید. داخل این کدها توجه کنید که وقتی username یعنی نام کاربری داخل پایگاه داده وجود داشته باشد و $row مورد نظر پیدا شد بدین معنی است که این کاربر داخل دیتابیس است. پس کاربر با موفقیت وارد شده است. بنابراین پس از اینکه این کاربر پیدا شد با دستور header("Location: index.php"); کاربر را به صفحه ایندکس ریدایرکت می کنیم. اگر مشکلی هست بفرمایید تا راهنمایی های لازم را ارائه کنیم.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Aqmp
30 تیر 1399
Failed to connect to MySQL: No such file or directory

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

sss
22 تیر 1397
سلام علیکم احسنت اقا

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.