با عرض سلام و خسته نباشید به شما عزیزان، همراهان گرامی، گام به گام با هم پیش آمدیم تا بتوانیم پنل مدیریت سایت را تا به این مرحله تکمیل کنیم. در این قسمت به بخش "مشاهده تمامی سفارش ها" پرداخته و کدهایی خواهیم نوشت تا اگر مشتری سفارشی داده باشد (فارغ از اینکه آیا پول پرداخت کرده است یا خیر)، آن سفارش را در قالب یک لیست مرتب، به مدیر سایت نشان دهیم.
یکبار دیگر جهت یادآوری سایدبار سمت راست پنل مدیریت سایت را برای شما عزیزان در تصویر زیر آماده کرده ام.
حالا بیایید به کدهای فایل Right_Sidebar.php برویم و پشت پرده تصویر بالا را بهتر ببینیم. لذا توجه شما را به لینک "مشاهده تمامی سفارش ها" که در تصویر زیر آن را آورده ام، جلب می کنم.
با توجه به توضیحات مکرر من در قسمت های قبلی، من توضیح اضافی در مورد تصویر بالا خدمت شما ندارم که بگویم، برای یادآوری بیشتر می توانید به قسمت گذشته، رجوع کنید.
برای فعال سازی لینک "مشاهده تمامی سفارش ها"، مانند قسمت گذشته، باید اول از همه به سراغ فایل 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 ، شما باید به آدرس C:\wamp\www\ecommerce\admin_area بروید و همانند تصویر زیر، این فایل را در آنجا ایجاد کنید.
حالا پس از ایجاد این فایل، باید به سراغ کدهای درون آن برویم، به همین خاطر این فایل را با استفاده از Notepad++ باز کنید و کدهای زیر را درون آن قرار دهید.
<table width="700" align="center"> <caption ><b>مشاهده همه سفارشات</b></caption > <tr> <th colspan="5"> <b style="background-color:green;">  فاکتور های پرداخت شده سبز رنگ هستند.  </b> <b style="background-color:red;">  فاکتور های پرداخت نشده قرمز رنگ هستند.  </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>
کدهای بالا، با هم یک جدول را تشکیل می دهند؛ که قرار است در ردیف های این جدول، همه سفارشات را قرار دهیم، به تصویر زیر نگاه کنید، این تصویر سطرهای ابتدایی این جدول را به شما نشان می دهد و یک شمای کلی را در اختیار شما، قرار خواهد داد تا درک کدها برایتان آسان تر شود.
در ادامه، کدهایی که ردیف های این جدول را ایجاد کنند را باید بهتر بشناسیم. ما ردیف های این جدول را با توجه به اطلاعاتی که از پایگاه داده 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 را انتخاب نمایید:
با توجه به تصویر بالا شما باید بر روی گزینه ی More از گوشه راست سمت بالای صفحه، فشار دهید، تا به صورت کشویی همانند تصویر زیر باز شود.
با کلیک بر روی گزینه ی Operations؛ صفحه ایی جدید برای شما باز می شود، در این صفحه ی جدید شما به دنبال تصویر زیر بگردید.
همانطور که در تصویر بالا مشاهده می نمایید، من جدول داده ایی 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 جدید، این بار باید جدول داده ایی جدیدی تحت عنوان 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، باید تصویری شبیه به تصویر زیر باشد.
خب دوستان عزیزم، من نمی خواهم حجم این قسمت بیش از این افزایش پیدا کند، لذا ادامه کارهایی که باید انجام دهیم را به قسمت آینده موکول می کنم.
در قسمت آینده، انشاالله برای شما توضیح می دهم که چرا این دو جدول را ایجاد کردم و خواهم گفت که چگونه بین این دو جدول و گزینه ی "مشاهده ی تمامی سفارشها" ارتباط برقرار خواهد شد؛ در ضمن به صورت عملی کدهای نوشته شده را با همدیگر تست خواهیم کرد. قسمت آینده را از دست ندهید. در انتهای این قسمت فایلهایی که آنها را ساختیم و یا کدهای آنها را تغییر دادیم را برای شما عزیزان قرار داده ام.
فایل 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"> </div> </div> <!-- end of ocntent left --> <!-- start of right content --> <?php include('include/Right_Sidebar.php'); ?> <!-- end of right content --> <div class="cleaner"> </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;">  فاکتور های پرداخت شده سبز رنگ هستند.  </b> <b style="background-color:red;">  فاکتور های پرداخت نشده قرمز رنگ هستند.  </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>"; } ?>
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.