ایجاد صفحه نمایش محصولات موجود در سبد خرید – قسمت دوم

php-shopping-cart-ecommerce

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

حذف محصول از سبد خرید در PHP

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

از طرفی در این صفحه از یک دکمه برای انتقال کاربران به صفحه اصلی سایت استفاده کرده ایم.

نکته: دقت کنید که من در قسمت قبل هنگامی که تگ 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 سه دکمه جدید را مشاهده نمایید. به تصویر زیر نگاه کنید.

اضافه شدن 3 دکمه جدید به صفحه cart

حالا بعد از تگ form کدهای php را می نویسیم (تعیین نقش برای این دکمه ها را شروع می کنیم) در این کدها به جادوی نامگذاری و value هایی که ما به ورودی input ها در تگ form دادیم، پی خواهید برد (دقت کنید که در اینجا تاکید بیشتر بر روی value هایی است که در checkbox ها مشخص کرده ایم)

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

نحوی صحیح نام گذاری value و هم چنین name

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

از طرفی باید متغییر $product_id را در حلقه while بیرون بکشید تا دچار خطا نشوید.

به تصویر زیر نگاه کنید.

حالا کاری که در ادامه انجام می دهیم این است که، اگر در کارد محصولات چک باکس تیک خورده بود، و از طرف دیگر مشتری بر روی دکمه "به روز رسانی خریدهای شما"  کلیک کرده بود، این محصولات انتخاب شده حذف شوند و کاربر در صفحه رفرش شده، این محصولات را نبیند.

حال باید این اطلاعات از جدول cart نیز باید حذف شوند. بنابراین برای اینکار ابتدا فایل cart.php را باز کرده و کدهای زیر را در آن پیدا کنید.

<div class="cleaner_with_height">&nbsp;</div>
<form action="cart.php" method="post" enctype="multipart/form-data">

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

<div class="cleaner_with_height">&nbsp;</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

بعد از اینکه بر روی دکمه "به روز رسانی خریدهای شما" فشار دادید تصویر زیر دیده می شود.

صفحه cart پس از حذف محصولات منتخب مشتری

شرح کدهای حذف محصول از سبد خرید و پایگاه داده با PHP

حالا به شرح کدهای بالا خواهم پرداخت. در کدهایی که به تازگی به فایل 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 استفاده شده را در معرض دید کاربر قرار می دهد:

نمایش خطا بدون وجود شرط if

خب پس از دو شرط بالا یک حلقه ی foreach می بینیم:

حلقه foreach در PHP

جهت یادآوری عرض می کنم که حلقه foreach یکی دیگر از ساختارهای تکرار در php می باشد که مخصوصا برای آرایه ها و مجموعه ها طراحی شده است (دقت کنید که ما هم در اینجا آرایه ی $_POST['remove'] را داریم که باید اطلاعاتش را بیرون بکشیم). حلقه foreach با هر بار گردش در بین اجزاء مقادیر هر یک از آنها را در داخل یک متغییر موقتی قرار می دهد و شما می توانید بواسطه این متغییر به مقادیر دسترسی پیدا کنید. در زیر نحوی استفاده از حلقه foreach آمده است:

foreach ($array as $value) {
    code to be executed;
}

$array نام آرایه است. سپس کلمه کلیدی as و بعد از آن $value (این نام کاملا اختیاری است) متغییری که مقادیر اجزای آرایه را در خود نگهداری می کند. در زیر نحوی استفاده از حلقه foreach با استفاده از یک مثال آمده است:

مثال برای حلقه foreach در PHP

خب بعد از درک حلقه 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">&nbsp;</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">&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 -->

در این قسمت ما نحوی حذف محصولات از سبد خرید با PHP را خدمت شما آموزش دادیم. در قسمت آینده نحوی افزودن به تعداد خرید هر محصول را آموزش می دهم.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری فروشگاه اینترنتی با PHP توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما (3 دیدگاه)

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

حسین
23 اسفند 1399
سلام خدا خیرتون بده

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

رسول
03 شهریور 1399
خیلی عالی بود تا اینجا که ةموزس ها رو کامل دنلاال کردم بسیار بسیار عاب بود ممنونم از شما

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

جهانگیر پچکم
05 شهریور 1399
سلام به شما دوست عزیز شما لطف دارید، انشاالله این آموزش مقدمه ایی باشه برای انجام کارهای بسیار بسیار بزرگتر توسط خود شما با آرزوی موفقیت برای شما، جهانگیر پچکم

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

جواد
22 فروردین 1399
با عرض سلام ، بین خاصیت value در html و id ی که داخل آن قرار می دهید چه رابطه ای است؟این را می دانم که می بایست آی دی محصولی را بگیریم که تیک خورده است. و نیز می دانم که در html وقتی برای input ، خاصیت value می گذاشتیم مقدار نوشته شده در داخل value را داخل کادر نمایش می داد.

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

جهانگیر پچکم
23 فروردین 1399
دوست عزیزم سلام لطفا قسمت های زیر را با هم مطالعه کنید تا به دقت متوجه شوید. قسمت 17 - ایجاد صفحه نمایش محصولات موجود در سبد خرید – قسمت اول قسمت 18 - ایجاد صفحه نمایش محصولات موجود در سبد خرید – قسمت دوم قسمت 19 - ایجاد صفحه نمایش محصولات موجود در سبد خرید – قسمت سوم با مطالعه این قسمت به صورت پی در پی، به راحتی به این نتیجه می رسید که چرا مقدار value را id محص.ل قرار داده ام. فقط خواهشی که از شما دارم این هست که لزفا با دقت زیاد و صبر و حوصله این 3 قسمت را مطالعه نمایید. با تشکر از شما، جهانگیر پچکم

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