آموزش ساخت درگاه پرداخت در PHP با زرین پال – قسمت دوم

29 آبان 1397
php-zarinpal

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

چرا باید این کار را در این مرحله انجام دهیم؟ دلیل انجام این کار، این است که وقتی ما قصد داریم درخواست اولیه را به بانک بفرستیم باید به همراه درخواست اولیه، شماره فاکتور مشتری را نیز بفرستیم تا هنگامی که بانک دارد به درخواست ما جواب می دهد، بدانیم منظور بانک با کدام مشتری است. حالا که متوجه شدید که چرا باید فاکتور فروش را برای مشتری بسازیم، به نحوی ساخت آن در ادامه خواهم پرداخت.

ساخت جدول داده ایی order (فاکتور فروش) در PHP

دقت نمایید که یک فاکتور فروش اینترنتی معمولا دارای چند ویژگی می باشد (البته فاکتور اینترنتی اندکی با فاکتور واقعی تفاوت دارد و می تواند اطلاعات کاملتری را شامل شود ).

در یک فاکتور اینترنتی ویژگی هایی چون شماره فاکتور، زمان سفارش فاکتور، مبلغ کل فاکتور، ایمیل مشتری و جواب این سوال که آیا فاکتور پرداخت شده است یا خیر؟ وجود دارد.

بنابراین ما ابتدا باید در پایگاه داده ecommerce یک جدول داده به نام order ایجاد نماییم و در این جدول داده، فیلد های زیر را با ویژگی های مشخص شده قرار دهیم.

Index Extra Default Type Name
PRIMARY AUTO_INCREMENT None int(11) order_id
CURRENT_TIMESTAMP timestamp order_time
None decimal(20,0) order_total_price
None text order_is_verified
None varchar(100) order_email_customer

تصاویر زیر به شکل بهتری شما را راهنمایی می کنند.

در تصویر زیر ابتدا .ارد محیط phpmyadmin می شویم و سپس بر روی ecommerce و بعد بر روی new فشار می دهیم.

ایجاد جدول فاکتور فروش در phpMyAdmin

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

اضافه کردن فیلدهای فاکتور فروش در phpMyAdmin

ادامه تصویر بالا در تصویر زیر آورده شده است.

ذخیره سازی جدول فاکتور فروش در phpMyAdmin

حالا که توانستیم جدول داده ایی order را ایجاد کنیم، حالا باید این جدول داده را با اطلاعاتی که در برگه های قبلی وجود دارد، پر کنیم.

توصیحات در مورد فیلدهای جدول order

همانطور که مشاهده می کنید فیلد اول جدول داده ایی order یعنی order_id (همان شماره فاکتور است) به صورت یکتا  و منحصر به فرد، هر بار که رکوردی ایجاد می شود، شماره منحصر به فرد خواهد گرفت (اگر دقت کرده باشید دو ویژگی این فیلد یعنی PRIMARY بودن و همچنین AUTO_INCREMENT باعث این اتفاق می شوند).

در مورد فیلد دوم که order_time می باشد، با توجه به تنظیماتی که ما انجام داده ایم (یعنی قرار دادن Type بر روی timestamp و همچنین قرار دادن Default بر روی CURRENT_TIMESTAMP ) هر بار که رکوردی به جدول داده ایی order اضافه می شود order_time، به طور خودکار تاریخ و ساعت روزی که این رکورد اضافه شده را در خودش ذخیره می کند.

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

فیلد چهارم order_is_verified، در واقع برای ما مشخص می کند که آیا پولی که باید مشتری به بانک پرداخت می کرد، پرداخت شده است یا خیر؟ در ابتدا ما این مقدار را false در نظر می گیریم وقتی کاربر با استفاده از درگاه زرین پال (که در قسمت های آینده در موردش توضیح خواهم داد) پول را پرداخت کرد، ( با استفاده از شماره فاکتور برگشتی از زرین پال ) مقدار این فیلد را به true تغییر می دهیم.

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

بدست آوردن مقادیر فیلدهای جدول order

برای به دست آوردن مقدار فیلد order_total_price ابتدا به تصویر زیر دقت نمایید.

ثبت مجموع قیمت فاکتور در پایگاه داده

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

در جدول داده total، فیلد ها با ویژگی های مشخص شده زیر قرار دارند.

Index Extra Type Name
PRIMARY AUTO_INCREMENT int(20) t_id
varchar(255) ip
decimal(20,0) price_total_purchase

در مورد نحوی ایجاد جدول داده ایی total در phpmyadmin باید بگویم که دقیقا مانند آنچه که کمی قبلتر در مورد جدول داده ایی order انجام دادیم را تکرار کنید.

خب حالا که ما جدول total را ساختیم به سراغ فایل cart.php خواهیم رفت. به همین خاطر ابتدا به آدرس C:\wamp\www\ecommerce مراجعه نمایید و فایل cart.php را با استفاده از Notepad++ باز کرده و در آن کدهای زیر را پیدا کنید.

<b>
	<?php 
		echo $total." تومان ";
	?>
</b>

حالا آنها را پاک کنید و به جای آن کد های زیر را قرار دهید.

<b>
	<?php 
		echo $total." تومان ";
		$_SESSION['price_total_purchase'] = $total;
	?>
</b>

با ایجاد تغییر بالا، اگر مشتری تغییری در لیست خریدهایش انجام دهد و قیمت دستخوش تغییر گردد، به طور خودکار آخرین تغییرات در متغییر سراسری$_SESSION['price_total_purchase'] که ما در ادامه با آن کار خواهیم داشت، ثبت می گردد.

بعد از انجام مراحل بالا، حالا از دوباره در فایل cart.php ، ایندفعه کدهای زیر را پیدا کنید.

if(isset($_POST['checkout']))
	{
		echo "<script>window.open('checkout.php','_self')</script>";
	}

این کدها را نیز پاک کنید و به جای آنها کدهای زیر را قرار دهید.

			if(isset($_POST['checkout']))
			
			{
				//creating or using cookie 
				if(isset($_COOKIE["ipUserEcommerce"]))
				{
					$ip	= $_COOKIE["ipUserEcommerce"];
					}else{
					$ip=getIp();
					setcookie('ipUserEcommerce',$ip,time()+1206900);
				}
				$total_price = $_SESSION['price_total_purchase'];
				
				
			    $query_search="SELECT * FROM total WHERE ip LIKE '%{$ip}%'";
				
				$result_search=mysqli_query($con,$query_search);
				
				while ($row = mysqli_fetch_array($result_search))
				{
					$ip_search=$row['ip'];
					
				}
				
				if($ip == $ip_search){
					mysqli_query($con,"update total set price_total_purchase='$total_price' ");
					}else{
					
					$query = "INSERT INTO total	(ip,price_total_purchase)VALUES('$ip','$total_price')";
					
					$run_c = mysqli_query($con, $query);
				}
				
				echo "<script>window.open('checkout.php','_self')</script>";
				
			}			

همانطور که در کدهای بالا مشاهده می کنید وقتی کاربر بر روی دکمه تسویه حساب فشار می دهد  (در کدهای بالا فشار دادن بر روی دکمه تسویه حساب یعنی این شرط  if(isset($_POST['checkout'])) برقرار باشد)، ابتدایی ترین کاری که انجام می شود این است که سایت ما نگاه می کند ببیند که آیا ip کاربر قبلا در cookie مربوطه ذخیره شده است یا خیر ؟ اگر همچنین کوکی وجود داشت ip کاربر را از آن بیرون می کشد، اما اگر همچنین کوکی وجود نداشت ابتدا با استفاده از تابع getIPو،ip کاربر را به دست می آورد و بعد از آن $_COOKIE["ipUserEcommerce"] را نیز ایجاد می کند.

اگر درمورد متغییر سراسری $_COOKIE ، اطلاعات جامعی در نظر دارید لطفا لینک زیر را مطالعه کنید:

سپس مقدار متغییر $total_price را با استفاده از $_SESSION['price_total_purchase'] که در مرحله قبل به دست آمده بود، مقدار دهی می کنیم. بعد از آن با استفاده از دستور sql زیر مقادیر به دست آمده را در جدول total  ذخیره می کنیم.

INSERT INTO total	(ip,price_total_purchase)VALUES('$ip','$total_price')

البته برای اینکه از تکرار ip با قیمت های مختلف جلوگیری کنیم باید کاری کنیم که در جدول داده ی total ، هر کاربر فقط یک رکورد داشته باشد، که در این رکورد ip ثابت باشد اما price_total_purchase با توجه به میزان خرید دائما update شود.

دقت کنید اگر این کار را انجام ندهیم، هربار که مشتری بر روی دکمه تسویه حساب فشار دهد، برای او در پایگاه داده یک رکورد ایجاد می شود، برای جلوگیری از این کار برای هر  مشتری یک رکورد در نظر می گیریم و با استفاده از ip آن کاربر را شناسایی می کنیم، حالا هر چقدر بر روی دکمه "تسویه حساب" فشار دهد، فقط همان یک رکورد update می شود و رکورد جدیدی ایجاد نمی شود

کار ما با فایل cart.php تمام شده است . توجه کنید که من در پایان همین قسمت فایل نهایی cart.php را برای شما قرار داده ام، کافی است که کدهای فایل cart.php خود را حذف نمایید و کدهای  فایل نهایی cart.php را در آن قرار دهید.

حالا برای به دست آوردن ایمیل مشتری (برای مقدار دهی به فیلد order_email_customer در جدول order)، کار راحت تری داریم؛ کافی است از جدول customers که پس از ثبت نام کاربر، اطلاعات کاربر را در خودش دارد، ایمیل را بیرون بکشیم.

اصلاحیه ثبت نام کاربر

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

ابتدا به آدرس C:\wamp\www\ecommerce مراجعه نمایید و فایل server.php را با استفاده از Notepad++ باز کنید و در آن کدهای زیر را پیدا کنید.

		// receive email value from the form and validation email value
		$c_email_no_empty = mysqli_real_escape_string($con ,$_POST['c_email']);
		if (empty($c_email_no_empty)) 
		{
			array_push($errors, "ایمیل خود را وارد کنید!"); 
			}else{
			$c_email_validate=$c_email_no_empty;
			if(filter_var($c_email_validate,FILTER_VALIDATE_EMAIL) == true){
				$c_email=$c_email_validate;
				}else{
				array_push($errors, "ایمیل نادرستی  وارد کرده اید!!! ایمیل درستی وارد کنید.");
			}
		}

آنها را پاک کنید و به جای آنها کدهای زیر را قرار دهید.

		// receive email value from the form and validation email value
		$c_email_no_empty = mysqli_real_escape_string($con ,$_POST['c_email']);
		if (empty($c_email_no_empty)) 
		{
			array_push($errors, "ایمیل خود را وارد کنید!"); 
			}else{
			$c_email_validate=$c_email_no_empty;
			if(filter_var($c_email_validate,FILTER_VALIDATE_EMAIL) == true){
				$c_exist_email=$c_email_validate;

				//Has this email already existed?				
				$query_exist_email="select * from customers where customer_email='$c_exist_email'";
				$run_exist_email=mysqli_query($con,$query_exist_email);
				$check_email = mysqli_num_rows($run_exist_email);
				if($check_email == 0)
				{
					$c_email=$c_exist_email;
				
				}else{
				
				array_push($errors, "با این ایمیل قبلا ثبت نام انجام شده است؛ لطفا ایمیل جدیدی وارد نمایید!!!");
				
				}				
				
				}else{
				array_push($errors, "ایمیل نادرستی  وارد کرده اید!!! ایمیل درستی وارد کنید.");
			}
		}

در کدهای بالا کاری کرده ایم که مشتری با یک ایمیل تنها یک بار می توان در سیستم ثبت نام کند. همانطور که مشاهده می کنید فهم کدها بسیار ساده است، اما اگر سوالی داشتید، می توانید در قسمت نظردهی عنوان نمایید تا شما را راهنمایی کنم.

ایجاد فاکتور فروش مشتریان در PHP

خب حالا وقت آن رسیده است که به سراغ فایل payment.php برویم و فاکتور فروش (رکوردی از مشتری که باید به جدول order اضافه نماییم) را ایجاد کنیم.

به همین خاطر ابتدا به آدرس C:\wamp\www\ecommerce مراجعه نمایید و فایل payment.php را با استفاده از Notepad++ باز کنید و کدهای زیر را در آن قرار دهید.

<?php
	include('includes/db.php');
	
	//creating or using cookie for ip customer
	if(isset($_COOKIE["ipUserEcommerce"]))
	{
		$ip	= $_COOKIE["ipUserEcommerce"];
		}else{
		$ip=getIp();
		setcookie('ipUserEcommerce',$ip,time()+1206900);
	}
	
	//Gaining the amount to be paid by the customer
	$sel_ip	=	"select * from total where ip='$ip'";
	$run_ip	=	mysqli_query($con,$sel_ip);
	while($p_ip = mysqli_fetch_array($run_ip))
	{
		$order_total_price = $p_ip['price_total_purchase'];
	}
	
	//Gaining customer email
	$sel_email	=	"select * from customers where customer_ip='$ip'";
	$run_email	=	mysqli_query($con,$sel_email);
	while($p_email = mysqli_fetch_array($run_email))
	{
		$order_email = $p_email['customer_email'];
	}
	
	//Submit the record in the order table
	$query = "INSERT INTO `order`(`order_total_price`, `order_is_verified`, `order_email_customer`) VALUES ($order_total_price,'false','$order_email')";
	$run_order = mysqli_query($con, $query);
	
?>	

در کدهای بالا، ابتدا پایگاه داده را include کرده ایم؛ چرا که در ادامه به آن نیاز خواهیم داشت. سپس ip مشتری را به دست آوردیم و در ادامه با استفاده از همین ip، هم مقدار پولی که باید مشتری پرداخت می کرد را از جدول order و هم ایمیل مشتری را از جدول داده ایی customers بیرون کشیدیم و در انتها یک رکورد که در واقع همان فاکتور فروش اولیه می باشد را ساختیم.

دقت نمایید در فاکتور فروش اولیه مقدار فیلد order_is_verified را برابر false قرار میدهیم تا زمانیکه زرین پال به ما جواب بدهد که کاربر پول خود را واریز کرده است، آنگاه باید این فیلد order_is_verified را به true تغییر دهیم.

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

در ادامه، فایل نهایی ، فایل هایی را که در این قسمت دستکاری کردیم برای شما قرار داده ام. بهتر است کدهای آنها را به جای کدهای قبلی قرار دهید.

فایل نهایی cart.php

<!-- 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">
		<h1>به سایت جهانگیر پچکم دات کام خوش آمدید </h1>
		<p>امروزه با افزایش روز افزون تولیدکنندگان مطرح داخلی و خارجی  انواع لوازم، قدرت انتخاب مشتری به شدت بالا رفته است. اما با توجه به اینکه هیچ فروشگاهی به طور فیزیکی، گنجایش تمامی این محصولات را نداشته و نیز هیچ فروشنده‌ای اطلاعات کاملی از تمامی محصولات موجود در فروشگاه خود ندارد و حتی در صورت داشتن تمامی اطلاعات، توضیح تک تک آنها، نیازمند صرف انرژی و زمان بسیار زیادی خواهد بود، جهانگیر پچکم دات کام بر آن شد تا یک مرجع جامع و کامل تخصصی ارزیابی، مشاوره و فروش محصولات  تولید داخل و خارج کشور را بصورت یک فروشگاه اینترنتی در اختیار عموم مردم ایران قرار دهد.</p>
		<div class="cleaner_with_height">&nbsp;</div>
		
		<?php
			
			//operator button chekout ,continue , update_cart
			
			//creating or using cookie 
			if(isset($_COOKIE["ipUserEcommerce"]))
			{
				$ip	= $_COOKIE["ipUserEcommerce"];
				}else{
				$ip=getIp();
				setcookie('ipUserEcommerce',$ip,time()+1206900);
			}
			
			if(isset($_POST['update_cart']))
			
			{
				if(isset($_POST['remove']))
				
				{
					
					foreach($_POST['remove'] as $remove_id)
					
					{
						
						$delete_product = "delete from cart where ip_add='$ip' AND p_id='$remove_id'";
						
						$run_delet =@mysqli_query($con,$delete_product);
						
						if ($run_delet){
							
							echo "<script>window.open('cart.php','_self')</script>";							
							
						}
						
					}
					
				}
				
			}
			
			
			if(isset($_POST['continue']))
			
			{
				
				echo "<script>window.open('index.php','_self')</script>";
				
			}
			
			if(isset($_POST['checkout']))
			
			{
				//creating or using cookie 
				if(isset($_COOKIE["ipUserEcommerce"]))
				{
					$ip	= $_COOKIE["ipUserEcommerce"];
					}else{
					$ip=getIp();
					setcookie('ipUserEcommerce',$ip,time()+1206900);
				}
				
				$total_price = $_SESSION['price_total_purchase'];
				
				$query_search="SELECT * FROM total WHERE ip LIKE '%{$ip}%'";
				
				$result_search=mysqli_query($con,$query_search);
				
				while ($row = mysqli_fetch_array($result_search))
				{
					$ip_search=$row['ip'];
					
				}
				
				if($ip == $ip_search){
					mysqli_query($con,"update total set price_total_purchase='$total_price' ");
					}else{
					
					$query = "INSERT INTO total	(ip,price_total_purchase)VALUES('$ip','$total_price')";
					
					$run_c = mysqli_query($con, $query);
				}
				
				echo "<script>window.open('checkout.php','_self')</script>";
				
			}			
			
		?>
		
		<form action="cart.php" method="post" enctype="multipart/form-data">
			
			<table align="center" width="100%" bgcolor="#be457c" style="border-collapse: collapse;">
				
				<tr align="center" style="border: 1px solid black;" >
				
				<td colspan="5" style="border: 1px solid black;text-align:center;background:#440522;" >
					<h2>**** محصولاتی که تا اکنون شما خریده اید ****</h2>
				</td>
				
				</tr>
				
				
				<tr  style="border: 1px solid black;" >
					<th colspan="2" style="border: 1px solid black;padding: 15px;text-align:right;">محصول</th>			
					<th style="border: 1px solid black;padding: 15px;text-align:right;">تعداد</th>			
					<th style="border: 1px solid black;padding: 15px;text-align:right;">قیمت</th>			
					<th style="border: 1px solid black;padding: 15px;text-align:right;">حذف</th>
				</tr>
				
				<?php
					$total	=	0;
					
					global $con;
					
					//creating or using cookie 
					if(isset($_COOKIE["ipUserEcommerce"]))
					{
						$ip	= $_COOKIE["ipUserEcommerce"];
						}else{
						$ip=getIp();
						setcookie('ipUserEcommerce',$ip,time()+1206900);
					}
					
					$sel_price	=	"select * from cart where ip_add='$ip'";
					
					$run_price	=	@mysqli_query($con,"SET NAMES SET utf8");
					
					$run_price	=	@mysqli_query($con,"SET CHARACTER SET utf8");
					
					$run_price	=	@mysqli_query($con,$sel_price);
					
					while($p_price 	=	@mysqli_fetch_array($run_price))
					
					{
						
						$pro_qty = $p_price['qty'];
						
						$pro_id	=	$p_price['p_id'];
						
						$pro_price	=	"select * from products where product_id='$pro_id'";
						
						$run_pro_price	=	@mysqli_query($con,$pro_price);
						
						while($pp_price	=	@mysqli_fetch_array($run_pro_price))
						
						{
							
							$product_title	=	$pp_price['product_title'];
							
							$product_image	=	$pp_price['product_image'];
							
							$single_price	=	$pp_price['product_price'];
							
							$product_id	=	$pp_price['product_id'];
							
						?>
						
						<tr align="center" style="border: 1px solid black;" >
							
							<td style="padding: 15px;">
								<?php echo $product_title ?>
							</td>
							
							<td style="padding: 15px;">
								<img src="Admin_area/<?php echo $product_image ?>" width="60" height="45" >
							</td>
							
							<td style="padding: 15px;">
								
								<?php
									//enter qty user in table cart
									
									if(isset($_POST['update_cart']))
									
									{
										
										$str_ip = str_replace(".", "", "$ip");
										
										$qty = $_POST["$str_ip$product_id"];
										
										$update_qty = "update cart set qty='$qty' where p_id='$product_id' ";
										
										$run_qty=@mysqli_query($con,$update_qty);
										
										$_SESSION["$str_ip"]["$product_id"]=$qty;
										
									}	
									
									
									$str_ip = str_replace(".", "", "$ip");
									
									if(isset($_SESSION["$str_ip"]["$product_id"]))
									
									{
										
										echo "<input type='text' size='4' name='$str_ip$product_id' value='". $_SESSION["$str_ip"]["$product_id"]."'>";
										
										$quantity = $_SESSION["$str_ip"]["$product_id"];
										
										$total +=($single_price*$quantity);
										
										
										
									}else
									{
										
										echo "<input type='text' size='4' name='$str_ip$product_id' value='$pro_qty'>";
										
										$total+=($single_price*$pro_qty);
										
										
									}
									
								?>  
							</td>
							
							<td style="padding: 15px;">
								<?php  echo $single_price ?>
							</td>
							
							<td style="padding: 15px;">
								<input type="checkbox" name="remove[]" value="<?php echo $product_id; ?>"/>
							</td>
							
						</tr>
						
						<?php
							
						}
						
					}
					
				?>
				<tr align="center" style="border:1px solid black;">
					
					<td style="padding:15px;">
						<input type="submit" name="continue" value="ادامه خرید"/>
					</td>
					
					<td></td>
					
					<td>
						<button name="checkout">
							تسویه حساب
						</button>
					</td>
					
					<td></td>
					
					<td>
						<input type="submit" name="update_cart" value="به روز رسانی خرید های شما"/>
					</td>
					
				</tr>
				
				
				<tr align="left" style="border:1px solid black;" >
					
					<td colspan="4" style="padding: 15px;">
						<b>جمع کل:</b>
					</td>
					
					<td style="padding: 15px;">
						<b>
							<?php 
								echo $total." تومان ";
								$_SESSION['price_total_purchase'] = $total;
							?>
						</b>
					</td>
					
				</tr>
				
			</table>
			
		</form>		
		
		<div class="cleaner_with_height">&nbsp;</div>
	</div>
	<!-- end of left content  -->
	
	<!-- start of right content -->
	<?php	include('includes/Right_Sidebar.php');	?>
	<!-- end of right content -->
	<div class="cleaner">&nbsp;</div>
</div>
<!-- end of content -->

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

فایل نهایی server.php

<?php
	include('includes/db.php');
	// initializing variables
	$c_name = "";
	$c_lastname    = "";
	$c_email    = "";
	$c_address    = "";
	$c_phone    = "";
	$c_password_1 = "";
	$errors = array(); 
	
	// REGISTER USER
	if(isset($_POST['register'])) {
		// receive all input values from the form
		// form validation: ensure that the form is correctly filled ...
		// by adding (array_push()) corresponding error unto $errors array
		
		// receive name value from the form
		$c_name = mysqli_real_escape_string($con , $_POST['c_name']);
		if (empty($c_name)) { array_push($errors, "نام خود را وارد نکردید!"); }
		
		// receive lastname value from the form
		$c_lastname = mysqli_real_escape_string($con ,$_POST['c_lastname']);
		if (empty($c_lastname)) { array_push($errors, "نام خانوادگی خود را وارد نکردید!"); }
		
		// receive gender value from the form
		$c_gender = $_POST['c_gender'];
		if (empty($c_gender)) { array_push($errors, "جنسیت خود را انتخاب نکردید!"); }
		
		// receive image value from the form and validation image value
		if(isset($_COOKIE["CustomerImage"]))
		{
			if(isset($_COOKIE["CustomerImageTmp"]))
			
			{
				$c_image = $_COOKIE["CustomerImage"];
				$c_image_tmp = $_COOKIE["CustomerImageTmp"];
				$new_address_image ="customer/customer_images/".$c_image;
				
			}
			}else{
			if (empty($_FILES["c_image"]["name"])) 
			{ 
				array_push($errors, "تصویر خود را انتخاب کنید!"); 
				}else{
				$Allowextension = array("jpeg" , "jpg" , "png");
				$FileExtension=explode(".",$_FILES["c_image"]["name"]);
				$extension=end($FileExtension);
				if(in_array($extension,$Allowextension )&&($_FILES["c_image"]["size"]<=20971520))
				{
					if($_FILES["c_image"]["error"]==0)
					{
						$c_image = $_FILES['c_image']['name'];
						$c_image_tmp = $_FILES['c_image']['tmp_name'];
						setcookie('CustomerImage',$c_image,time()+600);
						setcookie('CustomerImageTmp',$c_image_tmp,time()+600);
						
						$new_address_image ="customer/customer_images/".$c_image;
						move_uploaded_file($c_image_tmp,$new_address_image);
						
						}else{
						array_push($errors, "فایل به درستی آپلود نشد!!!");	
					}
					}else{
					array_push($errors, "تصویر مناسب را انتخاب کنید! پسوند مجاز برای تصویر شامل jpeg و jpg و png می باشد و حجم آن نباید بیشتر از 2 مگابایت باشد!!!");
				}
			}
		}
		
		// receive email value from the form and validation email value
		$c_email_no_empty = mysqli_real_escape_string($con ,$_POST['c_email']);
		if (empty($c_email_no_empty)) 
		{
			array_push($errors, "ایمیل خود را وارد کنید!"); 
			}else{
			$c_email_validate=$c_email_no_empty;
			if(filter_var($c_email_validate,FILTER_VALIDATE_EMAIL) == true){
				$c_exist_email=$c_email_validate;

				//Has this email already existed?				
				$query_exist_email="select * from customers where customer_email='$c_exist_email'";
				$run_exist_email=mysqli_query($con,$query_exist_email);
				$check_email = mysqli_num_rows($run_exist_email);
				if($check_email == 0)
				{
					$c_email=$c_exist_email;
				
				}else{
				
				array_push($errors, "با این ایمیل قبلا ثبت نام انجام شده است؛ لطفا ایمیل جدیدی وارد نمایید!!!");
				
				}				
				
				}else{
				array_push($errors, "ایمیل نادرستی  وارد کرده اید!!! ایمیل درستی وارد کنید.");
			}
		}
		
		// receive state value from the form
		$c_province = $_POST['state'];
		if (empty($c_province)) { array_push($errors, "استان خود را وارد نکردید!"); }  
		
		// receive city value from the form
		$c_city = $_POST['city'];
		if (empty($c_city)) { array_push($errors, "شهر خود را وارد نکردید!"); }		
		
		// receive address value from the form
		$c_address = mysqli_real_escape_string($con ,$_POST['c_address']);
		if (empty($c_address)) { array_push($errors, "آدرس خود را وارد نکردید!"); }
		
		// receive phone value from the form and validation phone value
		$c_phone_validate=mysqli_real_escape_string($con ,$_POST['c_phone']);
		if (empty($c_phone_validate)) 
		{
			array_push($errors, "تلفن خود را وارد نکردید!"); 
			}else{
			if(preg_match("/^[0]{1}[9]{1}\d{9}$/", $c_phone_validate))
			{
				// phone is valid
				$c_phone=$c_phone_validate;
				}else{
				array_push($errors, "تلفنی که وارد کردید صحیح نمی باشد!!!");
			} 
		}
		
		// receive password value from the form and validation password value
		$c_password_1_validate=mysqli_real_escape_string($con ,$_POST['c_password_1']);
		if (empty($c_password_1_validate)) 
		{
			array_push($errors, "پسورد خود را وارد نکرده اید!"); 
			}else{
			if(preg_match("/^(?=.*[A-z])(?=.*[0-9])(?=.*[$@])\S{6,12}$/", $c_password_1_validate))
			{
				// phone is valid
				$c_password_1 = $c_password_1_validate;
				}else{
				array_push($errors, "پسوردی که وارد کرده اید، طبق الگو نیست. دوباره پسورد را وارد نمایید!!!");
			} 
		}	
		
		
		$c_password_2 =mysqli_real_escape_string($con ,$_POST['c_password_2']);
		if (empty($c_password_2)){array_push($errors, "پسورد دوم را وارد نکرده اید!!!");}
		
		if((!empty($c_password_1_validate))&&(!empty($c_password_2)))
		{
			
			if ($c_password_1 != $c_password_2)
			{
				array_push($errors, "پسورد های وارد شده یکسان نیستند!");
			}
		}
		
		//creating or using cookie for ip customer
		if(isset($_COOKIE["ipUserEcommerce"]))
		{
			$ip	= $_COOKIE["ipUserEcommerce"];
			}else{
			$ip=getIp();
			setcookie('ipUserEcommerce',$ip,time()+1206900);
		}	
		
		// Finally, register user if there are no errors in the form
		if (count($errors) == 0) {
			//confirm email
			$confirmcode = rand();
			$query = "INSERT INTO customers 
			(customer_ip,customer_name,customer_lastname,customer_gender,customer_image,customer_email,customer_province,customer_city,customer_address,customer_phone,customer_pass,confirmed,confirm_code) 
			VALUES('$ip',N'$c_name',N'$c_lastname',N'$c_gender',N'$new_address_image',N'$c_email',N'$c_province',N'$c_city',N'$c_address',N'$c_phone',N'$c_password_1','0','$confirmcode')";
			
			$run_c = mysqli_query($con, $query);
			if($run_c)
			{
				$message="
				به منظور تکمیل کردن ثبت‌نام خود، لطفا با کلیک کردن روی لینک زیر آدرس ایمیل خود را تائید کنید.
				http://c8fcf067.ngrok.io/ecommerce/emailconfirm.php?customer_name=$c_name&customer_ip=$ip&code=$confirmcode";
				mail($c_email,"از طرف سایت جهانگیر پچکم", $message ,"Form:DoNotReplay@yoursite.com");
				
				echo "<script>alert('با تشکر از ثبت نام شما. برای تکمیل فرآیند ثبت نام لطفا بر روی لینک فعال سازی که از طریق ایمیل برای شما ارسال شده است، کلیک کنید. ')</script>";
				echo "<script>window.open('emailconfirm.php','_self')</script>";
				
			}
			
		}		
		
	}
?>

فایل نهایی payment.php

<?php

	include('includes/db.php');
	
	//creating or using cookie for ip customer
	if(isset($_COOKIE["ipUserEcommerce"]))
	{
		$ip	= $_COOKIE["ipUserEcommerce"];
		}else{
		$ip=getIp();
		setcookie('ipUserEcommerce',$ip,time()+1206900);
	}
	
	//Gaining the amount to be paid by the customer
	$sel_ip	=	"select * from total where ip='$ip'";
	$run_ip	=	mysqli_query($con,$sel_ip);
	while($p_ip = mysqli_fetch_array($run_ip))
	{
		$order_total_price = $p_ip['price_total_purchase'];
	}
	
	//Gaining customer email
	$sel_email	=	"select * from customers where customer_ip='$ip'";
	$run_email	=	mysqli_query($con,$sel_email);
	while($p_email = mysqli_fetch_array($run_email))
	{
		$order_email = $p_email['customer_email'];
	}
	
	//Submit the record in the order table
	$query = "INSERT INTO `order`(`order_total_price`, `order_is_verified`, `order_email_customer`) VALUES ($order_total_price,'false','$order_email')";
	$run_order = mysqli_query($con, $query);
	
?>	
تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری فروشگاه اینترنتی با PHP توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (2 دیدگاه)

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

محمدرضا
01 فروردین 1399
سلام وقت بخیر من فایل این پروژه رو خریدم و عین اون رو اپلود کردم و کانفیگ کردم مشکلی که حالا دارم اینه که تو جدول order چیزی ثبت نمیشه و در نهایت به مرحله پرداخت نمیره

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

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

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

جمیله رستمی
08 اسفند 1398
سلام روزتون بخیر . استاد من تا قسمتی که مربوط به جدول cart که ip و id و تعداد هستش رو کامل کردم طبق مراحلی که شما فرمودین و حتی total رو هم کاملا در سبد خرید مشاهده کردم و حالا وقتی که در صفحه cart.php هستم و روی دکمه تسویه حساب میزنم باید مقدار total به همراه ip کاربر وارد جدول total بشه ولی چنین اتفاقی نیافتاده. از دستور( if(isset هم برای گرفتن خطا استفاده کردم ولی دیدم هیچ چیزی ست نمیشه . میشه بفرمایین الان مشکل من کجاست؟ بینهایت از محبت شما ممنونم.

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

جهانگیر پچکم
09 اسفند 1398
سلام به شما خانم رستمی لطفا به ایمیلتون مراجعه کنید. با تشکر، جهانگیر پچکم

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