ایجاد پنل مدیریت سایت با PHP – لیست سفارش ها

php-show-orders-lists

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

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

لیست سفارش های مشتریان در سایدبار

حالا بیایید به کدهای فایل Right_Sidebar.php برویم و پشت پرده تصویر بالا را بهتر ببینیم. لذا توجه شما را به لینک "مشاهده تمامی سفارش ها" که در تصویر زیر آن را آورده ام، جلب می کنم.

لینک مشاهده ی تمامی سفارش ها در فایل Right_sidbar

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

فعال سازی لینک "مشاهده تمامی سفارش ها"

برای فعال سازی لینک "مشاهده تمامی سفارش ها"، مانند قسمت گذشته، باید اول از همه به سراغ فایل index.php برویم و این فایل را برای این کار تغییر دهیم. بنابراین به آدرس C:\wamp\www\ecommerce\admin_area بروید و فایل index.php را با استفاده از Notepad++ باز کرده و کدهای زیر را در آن پیدا کنیم.

			if(isset($_GET['view_customers']))
			{
				include('view_customers.php');
			}

آنها را حذف نمایید و کدهای زیر را به جای آنها قرار دهید.

			if(isset($_GET['view_customers']))
			{
				include('view_customers.php');
			}			
			
			if(isset($_GET['view_orders']))
			{
				include('view_orders.php');
			}

ما این نکته را در نظر گرفته ایم که اگر مدیر سایت بر روی گزینه ی "مشاهده تمامی سفارش ها" کلیک کرد، با استفاده از یک دستور شرطی if(isset($_GET['view_orders']))، جهت اجرای برنامه را تغییر دهیم و فایل view_orders.php را include کنیم.

بنابراین اقدامی که باید در مرحله بعدی انجام دهیم، ساخت فایل view_orders.php است.

ساخت فایل view_orders.php

برای ساخت فایل view_orders.php  ، شما باید به آدرس C:\wamp\www\ecommerce\admin_area بروید و همانند تصویر زیر، این فایل را در آنجا ایجاد کنید.

ایجاد فایل view_orders

حالا پس از ایجاد این فایل، باید به سراغ کدهای درون آن برویم، به همین خاطر این فایل را با استفاده از Notepad++ باز کنید و کدهای زیر را درون آن قرار دهید.

<table  width="700" align="center">
	<caption ><b>مشاهده همه سفارشات</b></caption >
	<tr>
		<th colspan="5">
			<b style="background-color:green;">&nbsp&nbspفاکتور های پرداخت شده سبز رنگ هستند.&nbsp&nbsp</b>
			
		<b style="background-color:red;">&nbsp&nbspفاکتور های پرداخت نشده قرمز رنگ هستند.&nbsp&nbsp</b></th>
	</tr>
	<tr>
		<td><b>ردیف</b></td >
		<td><b>ایمیل مشتری</b></td >
		<td><b>تاریخ فاکتور</b></td >
		<td><b>قیمت کل فاکتور</b></td >
		<td><b>مشاهده سفارش</b></td >
	</tr>
	<tr align="center">
		<?php
			$i=0;
			$select_order="SELECT * FROM `order` ";
			$run_order=mysqli_query($con,"SET NAMES SET utf8");
			$run_order=mysqli_query($con,"SET CHARACTER SET utf8");
			$run_order=mysqli_query($con,$select_order);
			while($row_order = mysqli_fetch_array($run_order))
			{
				$id_order=$row_order['order_id'];
				$order_total_price=$row_order['order_total_price'];
				$order_is_verified=$row_order['order_is_verified'];
				/*
				Since the creation of a record
				in the order data table is different from
				the time the record is created
				in the pay_cart data table,
				therefore, we should consider
				the time to create the record
				in the pay_cart data table, 
				not the time when the record was
				created in the order data table
				*/
				$time_pay_order="";
				if($order_is_verified=="true"){
					$run_time_pay_order=mysqli_query($con,"select `order_time` from `pay_cart` where `order_id`=$id_order order by `id_cart` desc limit 1 ");
					while($run_time_pay_order	=	@mysqli_fetch_array($run_time_pay_order))
						{
						 $time_pay_order=$run_time_pay_order["order_time"];
						}
					}else{
					$order_time=$row_order['order_time'];
				}
				
				$order_email_customer=$row_order['order_email_customer'];
				$i++;
				
			?>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>"><?php echo $i ?></td>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>"><?php echo $order_email_customer ?></td>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>"><?php if($order_is_verified=="true"){echo $time_pay_order;}else{echo $order_time;} ?></td>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>"><p><?php echo $order_total_price ?></p></td>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>">
			<a style="color:#fff;" href="index.php?pay=<?php if($order_is_verified=="true"){echo"yes";}else{echo"no";}?>&order_customer=<?php echo $order_email_customer; ?>&Total_Amount=<?php echo $order_total_price ?>&id_order=<?php echo $id_order; ?>">مشاهده</a>	
			</td>
			</tr>
			<?php } ?>		
			</table>

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

جدول لیست سفارش ها با PHP

در ادامه، کدهایی که ردیف های این جدول را ایجاد کنند را باید بهتر بشناسیم. ما ردیف های این جدول را با توجه به اطلاعاتی که از پایگاه داده ecommerce و جدول داده ی order به دست آورده ایم، مرتب می کنیم. لذا دستور SQL زیر را برای این امر تدارک دیدم.

$select_order="SELECT * FROM `order` ";

بعد از این که این دستور را به حالت اجرایی درآوردیم، با استفاده از حلقه ی while تمامی اطلاعات را، یکی یکی در ردیف های جدول قرار دادم.

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

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

$time_pay_order="";
				if($order_is_verified=="true"){
					$run_time_pay_order=mysqli_query($con,"select `order_time` from `pay_cart` where `order_id`=$id_order order by `id_cart` desc limit 1 ");
					while($run_time_pay_order	=	@mysqli_fetch_array($run_time_pay_order))
						{
						 $time_pay_order=$run_time_pay_order["order_time"];
						}
					}else{
					$order_time=$row_order['order_time'];
				}

اما نکته دوم که باقی می ماند که به نظر من بسیار مهم است. به دستور شرطی زیر که در بین کدها قرار دارد، دقت کنید.

if($order_is_verified=="true")

این دستور به شکل بهتر برای ما پرداخت، یا عدم پرداخت مبلغ فاکتور توسط مشتری را روشن می کند.

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

البته کدهای زیر هم در بین کدهای فایل view_orders.php دیده می شوند که، دارای مباحث پیچیده ایی هستند و انشاالله در قسمت آینده به طور مفصل در مورد آنها صحبت خواهم کرد و برای شما در مورد اینکه چرا لینک "مشاهده " به این شکل کد نویسی شده است، توضیح خواهم داد.

			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>">
			<a style="color:#fff;" href="index.php?pay=<?php if($order_is_verified=="true"){echo"yes";}else{echo"no";}?>&order_customer=<?php echo $order_email_customer; ?>&Total_Amount=<?php echo $order_total_price ?>&id_order=<?php echo $id_order; ?>">مشاهده</a>	
			</td>

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

دسترسی به جزئیات هر سفارش

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

//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'];
}

آنها را حذف کنید و به جای آنها کد زیر را قرار دهید.

//Gaining customer email
	$order_email = $_SESSION['customer_email'];

بعد از انجام تغییر بالا، حالا باید تغییراتی در جدول  داده ایی cart ایجاد نماییم، که در ادامه به آن خواهم پرداخت. محیط PhpMyAdmin را باز کرده و وارد پایگاه داده ی ecommerce شوید و جدول داده ایی cart را انتخاب نمایید:

تغییر دادن جدول داده ایی cart قسمت اولبا توجه به تصویر بالا شما باید بر روی گزینه ی More از گوشه راست سمت بالای صفحه، فشار دهید، تا به صورت کشویی همانند تصویر زیر باز شود.

تغییر دادن جدول داده ایی cart قسمت دوم

با کلیک بر روی گزینه ی Operations؛ صفحه ایی جدید برای شما باز می شود، در این صفحه ی جدید شما به دنبال تصویر زیر بگردید.

تغییر دادن جدول داده ایی cart قسمت سومهمانطور که در تصویر بالا مشاهده می نمایید، من جدول داده ایی cart را حذف کردم، اکنون جدول داده ایی  cart جدیدی (مطابق با نیاز های جدید خودمان) ایجاد می کنیم. برای یاد آوری چگونگی ایجاد جدول داده ایی میتوانید به قسمت " ایجاد پایگاه داده فروشگاه اینترنتی با Phpmyadmin در PHP " مراجعه نمایید.

نام جدول داده ایی : cart
Name Type ویژگی A_I یا همان AUTO_INCREMENT Index
id_cart int(11) تیک خورده باشد از لیست کشویی باز شونده، بر روی PRIMARY تنظیم شود.
p_id int(11) ------- -------
ip_add varchar(255) ------- -------
qty int(11) ------- -------

بعد از ساخت جدول داده ایی cart (البته جدول داده ایی جدید cart) من تصویری از آن در زیر برای شما آورده ام.

جدول جدید cart

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

نام جدول داده ایی : pay_cart
Name Type Default ویژگی A_I یا همان AUTO_INCREMENT Index
id_cart int(11) None تیک خورده باشد از لیست کشویی باز شونده، بر روی PRIMARY تنظیم شود.
p_id int(11) None ------- -------
ip_add varchar(255) None ------- -------
qty int(11) None ------- -------
order_time timestamp CURRENT_TIMESTAMP ------- -------
order_id int(11) None ------- -------

بعد از ایجاد جدول داده ی pay_cart ، شکل کلی آن در پایگاه داده ی ecommerce، باید تصویری شبیه به تصویر زیر باشد.

 

تصویری از جدول داده ایی pay_cart

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

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

فایل های نهایی

فایل index.php که در آدرس C:\wamp\www\ecommerce\admin_area قرار دارد.

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

<div id="templatemo_content">
	
	
	<!-- start of ocntent left -->
	<div id="templatemo_content_left">
		
		<?php 
			
			if(isset($_GET['insert_pro']))
			{
				include('insert_product.php');
			}			
			
			if(isset($_GET['view_pro']))
			{
				include('view_product.php');
			}
			
			if(isset($_GET['edit_pro']))
			{
				include('edit_product.php');
			}			
			
			if(isset($_GET['insert_cat']))
			{
				include('insert_cat.php');
			}
			
			if(isset($_GET['view_cats']))
			{
				include('view_cats.php');
			}
			
			if(isset($_GET['edit_cat']))
			{
				include('edit_cat.php');
			}
			
			if(isset($_GET['insert_brand']))
			{
				include('insert_brand.php');
			}
			
			if(isset($_GET['view_brands']))
			{
				include('view_brands.php');
			}
			
			if(isset($_GET['edit_brand']))
			{
				include('edit_brand.php');
			}			
			
			if(isset($_GET['view_customers']))
			{
				include('view_customers.php');
			}			
			
			if(isset($_GET['view_orders']))
			{
				include('view_orders.php');
			}
			
		?>
		
		<div class="cleaner_with_height">&nbsp;</div>
	</div> 
	<!-- end of ocntent left -->
	
	<!-- start of right content -->
	<?php	include('include/Right_Sidebar.php');	?>
	<!-- end of right content -->
	
	<div class="cleaner">&nbsp;</div>
</div>

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

فایل view_orders.php که در آدرس C:\wamp\www\ecommerce\admin_area قرار دارد.

<table  width="700" align="center">
	<caption ><b>مشاهده همه سفارشات</b></caption >
	<tr>
		<th colspan="5">
			<b style="background-color:green;">&nbsp&nbspفاکتور های پرداخت شده سبز رنگ هستند.&nbsp&nbsp</b>
			
		<b style="background-color:red;">&nbsp&nbspفاکتور های پرداخت نشده قرمز رنگ هستند.&nbsp&nbsp</b></th>
	</tr>
	<tr>
		<td><b>ردیف</b></td >
		<td><b>ایمیل مشتری</b></td >
		<td><b>تاریخ فاکتور</b></td >
		<td><b>قیمت کل فاکتور</b></td >
		<td><b>مشاهده سفارش</b></td >
	</tr>
	<tr align="center">
		<?php
			$i=0;
			$select_order="SELECT * FROM `order` ";
			$run_order=mysqli_query($con,"SET NAMES SET utf8");
			$run_order=mysqli_query($con,"SET CHARACTER SET utf8");
			$run_order=mysqli_query($con,$select_order);
			while($row_order = mysqli_fetch_array($run_order))
			{
				$id_order=$row_order['order_id'];
				$order_total_price=$row_order['order_total_price'];
				$order_is_verified=$row_order['order_is_verified'];
				/*
				Since the creation of a record
				in the order data table is different from
				the time the record is created
				in the pay_cart data table,
				therefore, we should consider
				the time to create the record
				in the pay_cart data table, 
				not the time when the record was
				created in the order data table
				*/
				$time_pay_order="";
				if($order_is_verified=="true"){
					$run_time_pay_order=mysqli_query($con,"select `order_time` from `pay_cart` where `order_id`=$id_order order by `id_cart` desc limit 1 ");
					while($run_time_pay_order	=	@mysqli_fetch_array($run_time_pay_order))
						{
						 $time_pay_order=$run_time_pay_order["order_time"];
						}
					}else{
					$order_time=$row_order['order_time'];
				}
				
				$order_email_customer=$row_order['order_email_customer'];
				$i++;
				
			?>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>"><?php echo $i ?></td>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>"><?php echo $order_email_customer ?></td>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>"><?php if($order_is_verified=="true"){echo $time_pay_order;}else{echo $order_time;} ?></td>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>"><p><?php echo $order_total_price ?></p></td>
			<td align="center" style="background:<?php if($order_is_verified=="true"){echo"green";}else{echo"red";}?>">
			<a style="color:#fff;" href="index.php?pay=<?php if($order_is_verified=="true"){echo"yes";}else{echo"no";}?>&order_customer=<?php echo $order_email_customer; ?>&Total_Amount=<?php echo $order_total_price ?>&id_order=<?php echo $id_order; ?>">مشاهده</a>	
			</td>
			</tr>
			<?php } ?>		
			</table>

فایل payment.php که در آدرس C:\wamp\www\ecommerce قرار دارد.

<?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
	$order_email = $_SESSION['customer_email'];

	
	//Submit the record in the order table
	$query = "INSERT INTO `order`(`order_total_price`, `order_is_verified`, `order_email_customer`, `ip_user`) VALUES ($order_total_price,'false','$order_email','$ip')";
	$run_order = mysqli_query($con, $query);
	
	//Last id based on customer email
	$query_sql="SELECT `order_id` FROM `order` WHERE `order_email_customer`='$order_email'";
	$run_myqurey = mysqli_query($con, $query_sql);
	$array_order_id=array();
	while($myqurey_array=mysqli_fetch_array($run_myqurey))
	{
		array_push($array_order_id,$myqurey_array['order_id']);
	}
	
	$Last_id_based_customer_email=end($array_order_id);
	
	//Gaining last id
	$_SESSION["order_id"]=$Last_id_based_customer_email;
	
	// Set session variables
	$_SESSION["order_total_price"] = $order_total_price;	
	
	if($run_order){
		echo "<script>window.open('request.php','_self')</script>";
	} 
	
?>
تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری فروشگاه اینترنتی با PHP توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (2 دیدگاه)

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

abas
26 بهمن 1399
سلام خسته نباشید ی سوالی ک داشتم میخواسم بدونم چطوری به طور مثال مشتری بدون اینکه به پایگاه زرین پال بره و پولی پرداخت کنه ادمین سایت ببینه ک چ چیزایی مشاری سفارش داده

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

سحر
24 دی 1399
سلام و وقت بخیر، جدول order توی کدوم قسمت از آموزش های قبلی طراحی شده؟ شماره آموزش چنده؟

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

سحر
24 دی 1399
پیداش کردم ممنونم

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