در قسمت قبل محصولاتی که مشتری در سبد خرید قرار داده بود را در جدول مشخصی آوردیم و مجموع قیمت کل را نیز مشخص کردیم. در این قسمت قصد داریم کاری کنیم که اگر مشتری، از خرید یکی از محصولات منصرف شد، بتواند به راحتی این محصول را از لیست سبد خریدش حذف کند.
وقتی که می گوییم حذف کردن یعنی اگر کاربر (مشتری) کادر چک باکس را تیک دار و بعد بر روی دکمه تغییر (آپدیت) کلیک کرد بتواند محصولی را که نمی خواهد، حذف کند.
از طرفی در این صفحه از یک دکمه برای انتقال کاربران به صفحه اصلی سایت استفاده کرده ایم.
نکته: دقت کنید که من در قسمت قبل هنگامی که تگ form را می نوشتم، ویژگی action را بر روی cart.php تنظیم کردم.
این نکته فوق العاده مهم است، چرا که نتایج عملیاتی (مانند حذف محصول) باعث می شود که کاربر به همان صفحه cart.php باز گردد.
خب با توجه به مطالب بالا، برای اینکه درک بهتری از مفهوم حذف محصول برای شما ایجاد شود مراحل زیر را به ترتیب انجام دهید.
ابتدا باید فایل cart.php را از آدرس C:\wamp\www\ecommerce را باز کنید و کدهای زیر را در آن بیابید.
<?php } } ?> <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>
حالا این کدها را پاک کنید و کدهای زیر را به جای آنها قرار دهید.
<?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>
دقت کنید که پس از ایجاد این تغییر، اگر wamp را روشن کنید و به صفحه ی http://localhost/ecommerce/cart.php بروید، باید در صفحه cart.php سه دکمه جدید را مشاهده نمایید. به تصویر زیر نگاه کنید.
حالا بعد از تگ form کدهای php را می نویسیم (تعیین نقش برای این دکمه ها را شروع می کنیم) در این کدها به جادوی نامگذاری و value هایی که ما به ورودی input ها در تگ form دادیم، پی خواهید برد (دقت کنید که در اینجا تاکید بیشتر بر روی value هایی است که در checkbox ها مشخص کرده ایم)
برای اینکه بهتر متوجه شوید به تصویر زیر نگاه کنید.
این یک شگرد فوق العاده در برخورد با چک باکس های متوالی هست، بنابراین همواره برای input هایی از نوع checkbox باید همین روند را در پی گرفت. (توجه کنید که من در قسمت قبل برای تگ input از نوع checkbox هیچگونه value قرار ندادم بنابراین با دقت به تصویر بالا، خودتان قسمت value را اضافه نمایید)
از طرفی باید متغییر $product_id را در حلقه while بیرون بکشید تا دچار خطا نشوید.
به تصویر زیر نگاه کنید.
حالا کاری که در ادامه انجام می دهیم این است که، اگر در کارد محصولات چک باکس تیک خورده بود، و از طرف دیگر مشتری بر روی دکمه "به روز رسانی خریدهای شما" کلیک کرده بود، این محصولات انتخاب شده حذف شوند و کاربر در صفحه رفرش شده، این محصولات را نبیند.
حال باید این اطلاعات از جدول cart نیز باید حذف شوند. بنابراین برای اینکار ابتدا فایل cart.php را باز کرده و کدهای زیر را در آن پیدا کنید.
<div class="cleaner_with_height"> </div> <form action="cart.php" method="post" enctype="multipart/form-data">
این کدها را پاک کنید و کدهای زیر را به جای آنها قرار دهید.
<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 </span> <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;"> if(isset($_COOKIE["ipUserEcommerce"]))</span> <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;"> {</span> <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;"> $ip = $_COOKIE["ipUserEcommerce"];</span> <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;"> }else{</span> <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;"> $ip=getIp();</span> <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;"> setcookie('ipUserEcommerce',$ip,time()+1206900);</span> <span style="background-color: #ff0000;" data-mce-style="background-color: #ff0000;"> }</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">
برای درک روند کدهای نوشته شده در بالا، به تصاویر زیر نگاه کنید و طبق شماره بندی عملیات ها را دنبال کنید.
بعد از اینکه بر روی دکمه "به روز رسانی خریدهای شما" فشار دادید تصویر زیر دیده می شود.
حالا به شرح کدهای بالا خواهم پرداخت. در کدهایی که به تازگی به فایل cart.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); }
متغییر $ip برای ما ip مشتری را در خودش ذخیره می کند. اما همانطور که در جلسه قبل خدمت شما عرض کردم، ممکن است ip مشتری دچار تغییر شود، ما برای اینکه کدهای نوشته شده از تغییرات ip مشتری مصون بماند از cookie ها استفاده کرده ایم.
برای درک بهتر cookieها، بهتر است مقاله "معرفی آرایه های فوق سراسری Session و Cookie در PHP" را مطالعه فرمایید.
اما متغییر $ip چه کاربردی دارد؟ دقت کنید با استفاده از همین متغییر $ip، می توانیم در جدول cart از پایگاه داده ی ecommerce ، بگردیم و محصولاتی که در سبد خرید این مشتری قرار دارد را بیابیم و برای مرحله حذف کردن، آنها را آماده کنیم. در ادامه به کدهای زیر می رسیم:
if(isset($_POST['update_cart'])){ if(isset($_POST['remove'])){ foreach($_POST['remove'] as $remove_id)
در اینجا دو شرط را می بینید، که مفهوم شرط اول این است که "اگر دکمه (بروزرسانی خریدهای شما) زده شود آنگاه" و مفهوم شرط دوم این است که "اگر تیک حذف محصول زده شود آنگاه".
شاید با خودتان بگویید که داشتن شرط اول کافی است، اما این اشتباه است چرا که اگر مشتری تیک محصولی را نزده باشد و بر روی دکمه "بروزرسانی خریدهای شما" کلیک کند، با تصویری همانند تصویر زیر روبرو می شود، که نشان از یک خطای استراتژیک است و امنیت سایت را به خطر می اندازد.
از طرفی این خطا، نسخه php استفاده شده را در معرض دید کاربر قرار می دهد:
خب پس از دو شرط بالا یک حلقه ی foreach می بینیم:
جهت یادآوری عرض می کنم که حلقه foreach یکی دیگر از ساختارهای تکرار در php می باشد که مخصوصا برای آرایه ها و مجموعه ها طراحی شده است (دقت کنید که ما هم در اینجا آرایه ی $_POST['remove'] را داریم که باید اطلاعاتش را بیرون بکشیم). حلقه foreach با هر بار گردش در بین اجزاء مقادیر هر یک از آنها را در داخل یک متغییر موقتی قرار می دهد و شما می توانید بواسطه این متغییر به مقادیر دسترسی پیدا کنید. در زیر نحوی استفاده از حلقه foreach آمده است:
foreach ($array as $value) { code to be executed; }
$array نام آرایه است. سپس کلمه کلیدی as و بعد از آن $value (این نام کاملا اختیاری است) متغییری که مقادیر اجزای آرایه را در خود نگهداری می کند. در زیر نحوی استفاده از حلقه foreach با استفاده از یک مثال آمده است:
خب بعد از درک حلقه foreach به ادامه توصیف کدهای نوشته شده خواهیم پرداخت.
در ادامه ما با کدهای زیر روبرو هستیم.
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>"; } }
متغییر $delete_product یک دستور SQL است که، هر بار محصول مورد نظر مشتری را از جدول داده cart حذف می کند. متغییر $run_delet نیز این دستور SQL را اجرایی می کند. در ادامه اگر متغییر اجرایی $run_delet به درستی کار کرد، یک دستور جاوا اسکریپت ما را به صفحه ی cart.php باز می گرداند.
در ادامه ما کد زیر را مشاهده می نماییم.
if(isset($_POST['continue'])) { echo "<script>window.open('index.php','_self')</script>"; }
این کد برای زمانی هست که مشتری بر روی دکمه " ادامه خرید" فشار می دهد و او را به صفحه اول سایت (برای انجام خریدهای بیشتر) هدایت می کند.
دوستان گلم برای اینکه راحتر باشید من فایل نهایی cart.php را در این مرحله برای شما در زیر آورده ام. شما کافی است تمام محتوییات cart.php را حذف کنید و به جای آنها، کدهای زیر را قرار دهید.
<!-- start of Header --> <?php include('includes/Header.php'); ?> <!-- end of Header --> <!---- Start Online Shopping Cart ----> <?php include('includes/Shopping_Cart.php'); ?> <!---- end Online Shopping Cart ----> <!-- 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_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_price = array($pp_price['product_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']; $values = array_sum($product_price); $total += $values; ?> <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;"> <input type='text' size='4' name='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 را خدمت شما آموزش دادیم. در قسمت آینده نحوی افزودن به تعداد خرید هر محصول را آموزش می دهم.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.