آموزش ارسال لینک فعال سازی به ایمیل در PHP – قسمت دوم

15 آبان 1397
php-activation-link-2

همانطور که در قسمت قبل دیدید، برای ارسال ایمیل به کاربر و دریافت جواب از او ما به برنامه ngrok نیاز داریم که توضیح مفصلی در مورد آن ارائه کردیم؛ ضمنا با همدیگر یک ایمیل از لوکال هاست به ایمیل کاربر فرستادیم.

در این قسمت، لینک فعال سازی موجود در ایمیل کاربر خواهیم پرداخت و برای شما مشخص خواهیم کرد که هنگامی که کاربر بر روی لینک فرستاده شده (این لینک در ایمیل فرستاده شده از لوکال هاست به کاربر موجود است) کلیک می کند باید چه اتفاقی بیفتد (در حین این مبحث فایل emailconfirm.php را با همدیگر خواهیم ساخت).

نحوی ساخت فایل emailconfirm.php جهت تایید ایمیل مشتریان

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

ابتدا باید فایل emailconfirm.php را بسازیم برای انجام اینکار به آدرس C:\wamp\www\ecommerce بروید و فایل را ایجاد نمایید. به تصویر زیر نگاه کنید.

ایجاد فایل emailconfirm

حالا نوبت به آن رسیده است که کدهای زیر را در آن قرار دهید. برای انجام اینکار ابتدا فایل emailconfirm.php را با استفاده از Notepad++ باز کنید. و سپس کدهای زیر را در آن قرار دهید.

<!-- start of Header -->
<?php	
	
	include('includes/Header.php');
	
	
?>
<!-- end of Header -->


<!-- start of content -->   
<div id="templatemo_content">
	
	<!-- start of left ocntent -->
	<div id="templatemo_content_left">
		<div class="cleaner_with_height">&nbsp;</div>
		<?php
			
			if(isset($_GET["customer_ip"])){
				
				$con=mysqli_connect("localhost","root","","ecommerce");
				
				if(mysqli_connect_errno())
				{
					echo "ارتباط با پایگاه داده برقرار نیست . شماره خطا :".mysqli_connect_errno();
				}
				
				$ip=$_GET["customer_ip"];
				
				$code=$_GET["code"]; 
				
				$query="SELECT * FROM customers WHERE customer_ip LIKE '%{$ip}%'";
				
				$result=mysqli_query($con,$query);
				
				while ($row = mysqli_fetch_array($result))
				{
					$confirm_code=$row['confirm_code'];
					$c_name = $row['customer_name'];
					$c_lastname = $row['customer_lastname'];
					$c_email = $row['customer_email'];
					
				}
				
				if( $confirm_code == $code){
					
					mysqli_query($con,"update customers set confirmed='1' ");
					
					mysqli_query($con,"update customers set confirm_code='0' ");
					
					echo "<script>alert(' ایمیل آدرس شما تایید و ثبت نام شما تکمیل شد. ')</script>";
					
					$sel_cart = "select * from cart where ip_add='$ip'";
					$run_cart = mysqli_query($con,$sel_cart);
					$check_cart = mysqli_num_rows($run_cart);
										
					if($check_cart == 0){
						
						$_SESSION['customer_name'] = $c_name;
						$_SESSION['customer_lastname'] = $c_lastname;
						$_SESSION['customer_email'] = $c_email;
						echo "<script>window.open('customer/my_account.php','_self')</script>";
						
						}else{
						
						$_SESSION['customer_name'] = $c_name;
						$_SESSION['customer_lastname'] = $c_lastname;
						$_SESSION['customer_email'] = $c_email;
						echo "<script>window.open('checkout.php','_self')</script>";
					}
					
					}else{
					
					echo "<script>alert('ایمیل با کد تایید مطابقت ندارد.')</script>";
					echo "<script>window.open('customer_register.php','_self')</script>";
					
				}	
				
				
				}else{
				echo "<p style='background: red; padding: 27px;	font-size: 20px; border-radius: 15px;border: 5px dashed white;'>  باید به ایمیلتان مراجعه کرده و لینک فرستاده شده را تایید نمایید!!!</p>";
				}
			
			
		?>				
		
		<div class="cleaner_with_height">&nbsp;</div>
	</div>
	<!-- end of left content  -->
	
	
	<div class="cleaner">&nbsp;</div>
</div>
<!-- end of content -->

<!-- start of footer -->
<?php include('includes/Footer.php');	?>
			<!-- end of footer -->

توضیح خط به خط کدهای فایل emailconfirm.php

همانطور که در کدهای بالا مشاهده می نمایید ابتدا باید بررسی کنیم که آیا در لینک بالای صفحه مقدار customer_ip داده شده است یا نه؟

if(isset($_GET["customer_ip"])){

اگر جواب خیر باشد، اینکار باعث می شود که کاربر بعد از اینکه بر روی دکمه "ایجاد نام کاربری" فشار داد، پیغام "باید به ایمیل تان مراجعه کرده و لینک فرستاده شده را تایید نمایید!!!" را مشاهده کند.

دقت کنید که اگر در لینک بالای صفحه، مقدار customer_ip تنظیم شده بود (جواب بله بود) if(isset($_GET["customer_ip"])){یعنی اینکه کاربر به ایمیل خود مراجعه نموده و لینک فرستاده شده توسط سایت را تایید کرده است. حالا باید اقدامات زیر را انجام دهیم.

1- ابتدا به پایگاه داده متصل می شویم تا اطلاعات مورد نیاز را که در مراحل بعدی به آنها نیاز داریم را استخراج نماییم. کدهای زیر نمایانگر این مسئله هستند.

$con=mysqli_connect("localhost","root","","ecommerce");
				
				if(mysqli_connect_errno())
				{
					echo "ارتباط با پایگاه داده برقرار نیست . شماره خطا :".mysqli_connect_errno();
				}

2- ip کاربر و همچنین کدی (code) که در لینک بالای صفحه قرار دارد را از لینک با استفاده از متغییر $_GET بیرون می کشیم.

				$ip=$_GET["customer_ip"];
				
				$code=$_GET["code"];

3- در ادامه با نوشتن یک دستور SQL با استفاده از ip کاربر که در مرحله قبل آن را به دست آورده بودیم، مقدار فیلد confirm_code را از دیتابیس بیرون می کشیم. ضمنا مقدار فیلدهای customer_name و customer_lastname و customer_email نیز اطلاعاتی هستند که در ادامه و در جلسات آتی به آنها نیاز خواهیم داشت بنابراین اکنون آنها را استخراج کرده ایم.

				$query="SELECT * FROM customers WHERE customer_ip LIKE '%{$ip}%'";
				
				$result=mysqli_query($con,$query);
				
				while ($row = mysqli_fetch_array($result))
				{
					$confirm_code=$row['confirm_code'];
					$c_name = $row['customer_name'];
					$c_lastname = $row['customer_lastname'];
					$c_email = $row['customer_email'];
					
				}

4- در این مرحله کد موجود در لینک بالای صفحه را با کد موجود در دیتابیس مقایسه می کنیم؛ اگر یکی بودند، باید دو عمل update انجام دهیم و در حین آنها مقدار فیلد confirmed را از 0 به 1 تغییر دهیم (دقت نمایید در جلسه قبل به این فیلد مقدار 0 داده بودیم و در دیتابیس ذخیره کرده بودیم) و مقدار فیلد confirm_code را از عدد تصادفی به 0 تغییر می دهیم.

انجام این دو عمل update نشان می دهد که کاربر بر روی لینک تایید ثبت نام که برای ایمیل او ارسال شد است، فشار داده است (بنابراین ایمیل او تایید می شود).

دقت کنید بعد ها (در جلسات بعدی) در هنگام login کردن علاوه بر ایمیل و پسورد ما باید مقدار فیلد confirmed را نیز بررسی کنیم تا متوجه شویم که آیا کاربر ایمیل خود را تایید کرده است یا خیر.

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

				if( $confirm_code == $code){
					
					mysqli_query($con,"update customers set confirmed='1' ");
					
					mysqli_query($con,"update customers set confirm_code='0' ");
					
					echo "<script>alert(' ایمیل آدرس شما تایید و ثبت نام شما تکمیل شد. ')</script>";

در ادامه باید خرید هایی را که مشتری انجام داده با استفاده از ip او از جدول داده ایی cart استخراج کنیم و چک کنیم ببینیم آیا مشتری خریدی انجام داده است یا خیر؟ اگر مشتری محصولی نخریده است if($check_cart == 0)، او را به صفحه پروفایل اش (my_account.php) هدایت کنیم.
دقت کنید در جلسات آتی فایل my_account.php را با هم خواهیم ساخت. در غیر اینصورت (یعنی مشتری محصولی را خریداری کرده است) او را به صفحه پرداخت پول هدایت می کنیم (که توضیح این قسمت را نیز در جلسات آتی خواهم داد).

در ضمن اطلاعاتی مثل نام، فامیل و ایمیل مشتری را در متغییرهای SESSION قرار می دهیم که در ادامه با آنها کار خواهیم داشت (یکی از کاربردهای انجام اینکار این است که نشان می دهیم که اکنون کاربر علاوه بر اینکه ایمیل خود را تایید کرده و عملیات ورود را انجام داده است).

					$sel_cart = "select * from cart where ip_add='$ip'";
					$run_cart = mysqli_query($con,$sel_cart);
					$check_cart = mysqli_num_rows($run_cart);
										
					if($check_cart == 0){
						
						$_SESSION['customer_name'] = $c_name;
						$_SESSION['customer_lastname'] = $c_lastname;
						$_SESSION['customer_email'] = $c_email;
						echo "<script>window.open('customer/my_account.php','_self')</script>";
						
						}else{
						
						$_SESSION['customer_name'] = $c_name;
						$_SESSION['customer_lastname'] = $c_lastname;
						$_SESSION['customer_email'] = $c_email;
						echo "<script>window.open('checkout.php','_self')</script>";
					}

5- در ادامه نیز اگر کدی که در لینک قرار گرفته با کدی که در دیتابیس وجود دارد یکسان نباشد پیام "ایمیل با کد تایید مطابقت ندارد". به کاربر نشان داده شود و کاربر را در ادامه به صفحه ثبت نام هدایت کند.

					}else{
					
					echo "<script>alert('ایمیل با کد تایید مطابقت ندارد.')</script>";
					echo "<script>window.open('customer_register.php','_self')</script>";
					
				}

خب توضیحات خط به خط برنامه پایان یافت حالا بیایید با همدیگر ببینیم که در عمل باید چه کاری انجام شود.

عملیاتی کردن ارسال لینک فعال سازی به ایمیل در PHP

1- قبل از همه چیز اینترنت خود را روشن کنید.

2- حالا WAMP را روشن کنید. به تصویر زیر نگاه کنید در این تصویر آیکن wamp سبز رنگ شده است.

روشن کردن wamp

3- حالا باید به سراغ برنامه ngrok بروید و آن را اجرا نمایید.

راه اندازی برنامه ngrok

4 - حالا باید دستور ngrok http 80 را در خط فرمان وارد نمایید.

راه اندازی دستور ngrok http 80

5-حالا برنامه ngrok به ما آدرس اینترنتی لوکال هاست را می دهد.

دریافت آدرس اینترنتی لوکال هاست

6 - باید آدرس اینترنتی را که برنامه ngrok در مرحله قبل به ما داده است را در متغییر message$ که به ایمیل کاربر قرار است بفرستیم (دقت کنید که متغییر message$ در فایل server.php قرار دارد) قرار دهیم.

قرار دادن آدرس اینترنتی ngrok در متغییر message7- حالا آدرس اینترنتی لوکال هاست را که برنامه ngrok به ما داده است، وارد مرورگر می کنیم؛ تا از درستی آدرس اینترنتی لوکال هاست آگاه شویم.

نمایش آدرس اینترنتی ngork در مرورگر

8- حالا آدرس صفحه ثبت نام که در زیر و در کادر قرمز رنگ قرار دارد را وارد می کنیم . دقت کنید آن قسمتی که زیر آن خط زرد رنگ کشیده شده است (/ecommerce/customer_register.php) را شما بعد از آدرس اینترنتی لوکال هاست خودتان باید قرار دهید.

حالا آدرس صفحه ثبت نام را وارد می کنیم

9 - حالا باید صفحه شبیه به تصویر زیر برای شما نمایان شود کافی است که اطلاعات را به درستی وارد کرده و بر روی دکمه "ایجاد نام کاربری" فشار دهید.

حالا اطلاعات را به درستی وارد کرده و ثبت نام می کنیم

10- بعد از زدن دکمه " ایجاد نام کاربری" می توانید تصویر زیر را مشاهده نمایید. این تصویر یک پیام است که کاربر را برای تایید لینک ثبت نام به سمت ایمیلش سوق می دهد.

پیامی که برای کاربر ارسال می شود و او را به ایمیل خودش ارجاع می دهد.

11 - بعد از زدن دکمه ok در کادر مرحله قبل صفحه زیر نمایان می شود.

پیامی که به کاربر نشان داده می شود.

12 - بعد از انجام اقدامات بالا، حالا به phpmyadmin بروید و در پایگاه داده ecommerce بر روی جدول داده ایی customers کلیک کنید.

به phpmyadmin بروید و در پایگاه داده ecommerce بر روی جدول داده ایی customers کلیک کنید.

13- رکوردی به جدول داده ایی customers اضافه شده است. به فیلدهای confirmed و confirm_code دقت کنید. confirmed با مقدار صفر و  confirm_code با عدد تصادفی که با تابع rand() ایجاد می شود پر شده اند.

در رکورد اضافه شده به فیلدهای confirmed,confirm_code دقت کنید

14- حالا به آدرس ایمیلی که در هنگام ثبت نام وارد کرده بودید، بروید. یک پیام جدید دریافت کرده اید، پیامی که دریافت کرده اید باید چیزی شبیه به تصویر زیر باشد. دقت کنید که، ما آن عدد تصادفی را که در مرحله قبل در موردش توضیح دادم؛ در لینک تایید ثبت نام قرار داده ایم تا کاربر را به خوبی شناسایی کنیم. به کادر قرمز رنگ دقت کنید.

پیام دریافت شده در gmsil

15 - حالا بر روی لینک داده شده کلیک کنید.

حالا بر روی لینک داده شده کلیک کنید.

16 - حالا باید تصویری شبیه به تصویر زیر را مشاهده نمایید. این پیام در واقع پیام تایید ایمیل شما می باشد که نمایش داده شده است؛ حالا بر روی ok کلیک کنید.

پیام تایید ایمیل شما به شما نمایش داده می شود بر روی ok کلیک کنید.

17- چون من محصولی خریداری نکرده بودم مرا به برگه my_account.php هدایت کرد (دقت کنید که هنوز این برگه را نساخته ایم برای همین خطای Not Found داده است در قسمت های بعدی حتما آن را خواهیم ساخت).

اگر محصولی خریداری کرده بودم مرا به برگه payment.php هدایت می کرد (برای درک بهتر فایل checkout.php را مشاهده نمایید و کلمه payment را جستجو کنید ).

چون خریدی انجام نداده اید شما را به برگه my_account.php هدایت می کند

18- حالا اگر به phpmyadmin مراجعه کنید تغییرات در رکورد را خواهید دید. این تغییرات باعث خواهند شد که بفهمیم کاربر لینک تایید ایمیل را فشار داده است (طبق آنچه که من قبلا به شما عرض کردم).

حالا اگر به phpmyadmin مراجعه کنید تغییرات در رکورد را خواهید دید.

خب دوستان عزیزم، به پایان این قسمت فوق العاده زیبا از سری آموزش های ساخت فروشگاه اینترنتی با php رسیدیم. در قسمت آینده به سراغ فایل payment.php (برگه پرداخت) خواهیم رفت. قسمت آینده نیز نکات مهمی دارد که انشاالله با هم دیگر آنها را مرور می کنیم. موفق باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری فروشگاه اینترنتی با PHP توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما (2 دیدگاه)

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

mohammad Danaei
12 آبان 1399
و

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

mohammad Danaei
12 آبان 1399
همه چی درسته فقط چرا اینه مال شما کد و ائن یکی عوض نمیشه

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