در این قسمت مفاهیم زیر پوشش داده می شوند:
قبل از اینکه شروع به کار کنیم، به نظر من، قرار گرفتن کادر سبد خرید در بالا سمت چپ صفحه ی cart.php یک کار اشتباه است، چرا که در این صفحه (cart.php) همه اطلاعات در مورد محصولات آورده شده است.
بنابراین این کادر را از صفحه cart.php پاک می کنیم. برای انجام اینکار فایل cart.php را باز و کدهای زیر را در آن پیدا کنید.
<!---- Start Online Shopping Cart ----> <?php include('includes/Shopping_Cart.php'); ?> <!---- end Online Shopping Cart ---->
حالا این کدها را حذف کنید. نتایج را در تصاویر زیر مشاهده می نمایید.
برای اینکه بتوانیم تعداد موردنیاز محصول را از مشتری دریافت کنیم و آنها را در نتیجه کلی (مبلغ مجموع) تاثیر دهیم. اولین کار این است که تگ ورودی مربوط به تعداد محصولات را به دست آوریم. به همین خاطر فایل cart.php را باز کرده و کدهای زیر را در آن بیابید:
<td style="padding: 15px;"> <input type='text' size='4' name='qty'> </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>
حالا به شرح خط به خط کد بالا می پردازیم. کدهای php را، قبل از تگ input که به تعداد محصولات اشاره می کند، قرار دادیم. چرا که اگر بعد از تگ input کدها را قرار می دادیم، دید درستی از پایگاه داده به ما نمی داد (برای درک بهتر یک بار خودتان آزمایش کنید تا اثر آن را به خوبی متوجه شوید.)
البته برای اینکه به درستی کد های بالا اجرا شوند، باید خط کدی که در تصویر زیر آورده ام را به cart.php اضافه نمایید.
دقت کنید که کد را در همان مکانی که در تصویر بالا مشاهده می کنید، قرار دهید. همچنین باید یک اصلاح دیگر نیز انجام دهیم و کدهایی که در تصویر زیر مشخص شده است را حذف نماییم.
سپس به کد زیر دقت کنید:
<?php //enter qty user in table cart if(isset($_POST['update_cart'])) {
در اینجا ما یک شرط را قرار داده ایم. این شرط به این شکل است :
"اگر مشتری بر روی دکمه (به روز رسانی خریدهای شما) فشار داده است آنگاه".
بعد کد زیر را داریم.
$str_ip = str_replace(".", "", "$ip");
در اینجا یک متغییر تحت عنوان $str_ip را قرار داده ایم که با استفاده از تابع str_replace، نقطه ها را از آدرس ip حذف می کند. اینکه چرا اینکار را انجام می دهیم، در ادامه توضیح داده شده است. به تصویر زیر دقت کنید.
در واقع ما ip را اصلاح کردیم ، زیرا قصد داریم از آن برای یکتاسازی تعداد خریدهای یک مشتری خاص، استفاده کنیم. به همین منظور کد زیر را آوردیم.
$qty = $_POST["$str_ip$product_id"];
همانطور که در کد بالا مشاهده می نمایید، ما ip کاربر را اصلاح کردیم (نقطه های موجود در آن را حذف کردیم) و آن را با کد محصولی که کاربر خریده است، ترکیب کردیم و سپس به عنوان یک نام منحصر به فرد به تگ input ی که مشتری تعداد دلخواه را درون آن قرار می دهد، ذخیره می کنیم . آنگاه هر وقت آن را نیاز داشتیم کافی است با دستور زیر به آن دسترسی داشته باشیم:
$_POST["$str_ip$product_id"]
به تصویر زیر نگاه کنید:
ما در هر بار تکرار حلقه، مقدار $_POST["$str_ip$product_id"] را در متغییر $qty ذخیره می کنیم.
حالا به کد زیر می پردازیم:
$update_qty = "update cart set qty='$qty' where p_id='$product_id' ";
برای ویرایش رکوردهای یک جدول داده از دستور update به صورت زیر استفاده می شود.
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
در دستور بالا table_name نام جدول، column نام ستون یا ستونهایی ست که ویرایش می شوند و condition شرط ویرایش اطلاعات است.
متغییر $update_qty یک دستور SQL است که فیلد qty از جدول cart را بروزرسانی می کند. معنی آن به این شکل است که qty را برای محصولی که شناسه آن $product_id است، بروز رسانی کن".
اگر دقت کنید به قابلیت تابع str_replace پی خواهید برد (str_replace تابعی است که توسط آن علامت های دات یا نقطه را از ip حذف کردیم). اگر نقطه های موجود در ip را حذف نکنیم، دستور SQL بالا اجرا نمی شود.
سپس به کدهای زیر می رسیم:
$run_qty=@mysqli_query($con,$update_qty); $_SESSION["$str_ip"]["$product_id"]=$qty;
خط اول در واقع اجرای دستور SQL هست که گفته شد. اما خط دوم بسیار مهم است.
به صورت خیلی خیلی خلاصه Session به ما اجازه می دهد که در سمت سرور مقادیری را ذخیره کنیم و از آنها در صفحات مختلف استفاده کنیم. این کار توسط یک آرایه فوق سراسری به نام $_session انجام می شود.
دوستان عزیز در قسمت آینده Session را به طور کامل برای شما شرح می دهم.
بنابراین ما مقداری که مشتری وارد کرده را در آرایه فوق سراسری $_session ذخیره می کنیم. چرا که بعدا وقتی کاربر به همین صفحه cart.php بازگشت بتواند تعداد خریدهایش را به درستی مشاهده نماید.
برای اینکه session به درستی کار کند، به آدرس C:\wamp\www\ecommerce\includes بروید و فایل Header.php را با Notepad++ باز کنید و کد زیر را در آن بیابید.
<?php include('functions/functions.php'); ?>
و آن را پاک کنید و کد زیر را به جای آن قرار دهید.
<?php session_start(); include('functions/functions.php'); ?>
حال به ادامه شرح کدهای فایل cart.php می پردازیم. در این بین ابتدا کد زیر را مشاهده می کنید:
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"];
من در مورد خط اول کد قبلا به صورت کامل توضیح دادم. اما خط دوم در واقع تعداد جدیدی را که مشتری وارده کرده در متغییر $quantity ذخیره می کند. سپس کد زیر را داریم:
$total +=($single_price*$quantity);
در اینجا ما متغییر $total را در اختیار داریم که قیمت تکی محصول را، در تعداد درخواست شده توسط کاربر ضرب می کند و با مقدار قبلی متغیر $total جمع می کند. سپس می پردازیم به کدهای موجود در بلاک else:
else{ echo "<input type='text' size='4' name='$str_ip$product_id' value='$pro_qty'>"; $total+=($single_price*$pro_qty); }
این else برای زمانی است که کاربر تعداد جدیدی را در تگ input ورودی، وارد نکرده باشد. در آن صورت تعدادی که در پایگاه داده موجود هست را نمایش می دهد.
خب برای اینکه شما دچار سردگمی نشوید، من فایل کامل cart.php را در زیر برای شما قرار می دهم. شما می توانید به آدرس C:\wamp\www\ecommerce بروید و cart.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"> <h1>به سایت جهانگیر پچکم دات کام خوش آمدید </h1> <p>امروزه با افزایش روز افزون تولیدکنندگان مطرح داخلی و خارجی انواع لوازم، قدرت انتخاب مشتری به شدت بالا رفته است. اما با توجه به اینکه هیچ فروشگاهی به طور فیزیکی، گنجایش تمامی این محصولات را نداشته و نیز هیچ فروشندهای اطلاعات کاملی از تمامی محصولات موجود در فروشگاه خود ندارد و حتی در صورت داشتن تمامی اطلاعات، توضیح تک تک آنها، نیازمند صرف انرژی و زمان بسیار زیادی خواهد بود، جهانگیر پچکم دات کام بر آن شد تا یک مرجع جامع و کامل تخصصی ارزیابی، مشاوره و فروش محصولات تولید داخل و خارج کشور را بصورت یک فروشگاه اینترنتی در اختیار عموم مردم ایران قرار دهد.</p> <div class="cleaner_with_height"> </div> <?php //operator button chekout ,continue , update_cart <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;">//creating or using cookie if(isset($_COOKIE["ipUserEcommerce"])) { $ip = $_COOKIE["ipUserEcommerce"]; }else{ $ip=getIp(); setcookie('ipUserEcommerce',$ip,time()+1206900); } </span> 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>"; } ?> <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; <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;"> //creating or using cookie if(isset($_COOKIE["ipUserEcommerce"])) { $ip = $_COOKIE["ipUserEcommerce"]; }else{ $ip=getIp(); setcookie('ipUserEcommerce',$ip,time()+1206900); } </span> $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." تومان "; ?></b> </td> </tr> </table> </form> <div class="cleaner_with_height"> </div> </div> <!-- end of left content --> <!-- start of right content --> <?php include('includes/Right_Sidebar.php'); ?> <!-- end of right content --> <div class="cleaner"> </div> </div> <!-- end of content --> <!-- start of footer --> <?php include('includes/Footer.php'); ?> <!-- end of footer -->
حالا به صورت تصویر هم به شما نشان می دهم که چه روندی را باید در پیش بگیرید. به تصاویر زیر به دقت نگاه کنید و طبق روند نشان داده شده جلو بروید.
وقتی بر روی دکمه "بروزرسانی خریدهای شما " کلیک می کنید، تصویر زیر پدید می آید.
خب دوستان گلم به انتهای این قسمت از آموزش ساخت فروشگاه اینترنتی با php رسیدیم. میدونم که خیلی اذیت شدید ولی اگر چند بار مطالب بالا را بخوانید و کد زنی کنید از تلخی به شیرینی می رسید؛ دقیقا مثل "گر صبر کنی ز غوره حلوا سازی" اینجا صدق می کنه؛
ضمنا نگران نباشید هر کجاش رو متوجه نشدید، من در کنار شما پاسخگوی سوالات شما در قسمت نظردهی هستم.
اگر در مورد session هم دچار مشکل بودید، همانطور که در حین آموزش عرض کردم، جلسه آینده منحصرا در مورد session برای شما صحبت می کنم.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.