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

31 شهریور 1397
php-ecommerce-search

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

ساخت صفحه نمایش نتایج جستجو

ابتدا از فایل all_products یک save as بگیرید و نام آن را result.php می گذاریم. ابتدا باید all_products.php را با استفاده از Notepad++ باز کنیم. به تصویر زیر نگاه کنید.

باز کردن فایل all_products در Notepad++

سپس بر روی تب file بروید و گزینه save as را فشار دهید. به تصویر زیر نگاه کنید.

save as گرفتن از صفحه all_products

سپس در کادری که برای شما باز می شود در قسمت File name باید result را بنویسید و بر روی دکمه Save فشار دهید.

ایجاد کردن فایل result

حالا فایل result.php ما ساخته شده است و مثل گذشته، کار اصلی با آرایه فوق سراسری $_GET انجام می شود. خب حالا باید در فایل result.php کد های زیر را پیدا کنید.

<?php
		global $con;
		
		//display products when not set cat_id and brand_id
		if((!isset($_GET['cat_id']))&&(!isset($_GET['brand_id']))){
			$get_pro="select * from products";
			$run_pro=@mysqli_query($con,"SET NAMES utf8");
			$run_pro=@mysqli_query($con,"SET CHARACTER SET utf8");
			$run_pro=mysqli_query($con,$get_pro);
			echo"<h2>تمامی محصولات فروشگاه جهانگیر پچکم</h2>";
			while($row_pro=mysqli_fetch_array($run_pro))
			{
				
				$pro_id=$row_pro['product_id'];
				$pro_cat=$row_pro['product_cat'];
				$pro_brand=$row_pro['product_brand'];
				$pro_title=$row_pro['product_title'];
				$pro_price=$row_pro['product_price'];
				$pro_desc=$row_pro['product_desc'];
				$pro_image=$row_pro['product_image'];
				
				echo"
				<div class='product_box'>
					<h3>$pro_title</h3>
					<img width='200' height='150' src='Admin_area/$pro_image' alt='image' />
					<div class='price'>قیمت:<span>$pro_price تومان</span></div>                           
					<div class='buynow'><a href='#'>هم اکنون می خرید</a></div>
					<a href='details.php?product_id=$pro_id'>جزئیات</a>
				</div>";
			}
		} 
?>

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

<?php
		if(isset($_GET['search']))
		{	
			$search_qurey=$_GET['user_query'];
			
			$get_pro="select * from products where product_keywords like N'%$search_qurey%' ";
			$run_pro=@mysqli_query($con,"SET NAMES utf8");
			$run_pro=@mysqli_query($con,"SET CHARACTER SET utf8");
			$run_pro=mysqli_query($con,$get_pro);
			echo"<h2>$search_qurey</h2>";
			while($row_pro=mysqli_fetch_array($run_pro))
			{
				
				$pro_id=$row_pro['product_id'];
				$pro_cat=$row_pro['product_cat'];
				$pro_brand=$row_pro['product_brand'];
				$pro_title=$row_pro['product_title'];
				$pro_price=$row_pro['product_price'];
				$pro_desc=$row_pro['product_desc'];
				$pro_image=$row_pro['product_image'];
				
				echo"
				<div class='product_box'>
					<h3>$pro_title</h3>
					<img width='200' height='150' src='Admin_area/$pro_image' alt='image' />
					<div class='price'>قیمت:<span>$pro_price تومان</span></div>                           
					<div class='buynow'><a href='index.php?add_cart=$pro_id'>هم اکنون می خرید</a></div>
					<a href='details.php?product_id=$pro_id'>جزئیات</a>
				</div>";
			} 
		}				
?>

و بعد از آن به سراغ فایل index.php می رویم و کدهای زیر را در آن پیدا می کنیم.

            	<h4>Search</h4>
                <div class="templatemo_right_section_content">
                    <form method="get" action="#">
                            <input name="keyword" type="text" id="keyword"/>
                            <input type="submit" name="submit" class="button" value="Search" />
                     </form>
                 </div>

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

            	<h4>جستجو</h4>
                <div class="templatemo_right_section_content">
                    <form method="get" action="result.php">
                            <input name="user_query" type="text" id="keyword" placeholder="کلمه مورد نظر را وارد کنید."/>
                            <input type="submit" name="search" class="button" value="جستجو" />
                     </form>
                 </div>

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

تحلیل کدهای فایل result.php

اول از همه به کد زیر دقت کنید.

if(isset($_GET['search']))

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

$search_qurey=$_GET['user_query'];

با استفاده از این دستور، کلمه ای را که مورد جستجو قرار گرفته از url بیرون می کشیم و در متغییر $search_qurey ذخیره می کنیم. کلمه user_query در دستور بالا با توجه به تگ input ورودی کاربر تنظیم شده است.

سپس به کد زیر توجه کنید:

$get_pro="select * from products where product_keywords like N'%$search_qurey%' ";

این خط قلب تپنده سیستم جستجو فروشگاه اینترنتی ما است. در واقع ما در اینجا از عملگر like در sql استفاده کرده ایم.

دستور شرطی where در SQL

خب در مورد دستور شرطی where در SQL طبق تعریف سایت w3schools ، بدین صورت است که رکورد های به دست آمده از عبارت SELECT را فیلتر می کند. (رکورد های ما همان محصولات ما در جدول products می باشند.)

Syntax دستور شرطی WHERE در زیر آورده شده است.

SELECT column1, column2, ...
FROM table_name
WHERE condition;

دقت کنید که دستور WHERE محدود به SELECT نیست و در عبارات UPDATE و DELETE نیز می تواند مورد استفاده قرار گیرد.

عملگر Like

ما وقتی از where استفاده می کنیم می توانیم با استفاده از عملگر like دنبال یک الگوی (pattern) خاص بگردیم و آن الگو را در ستون جواب (منظورم فیلد در جدول پایگاه داده و در اینجا "کلمات کلیدی" محصول است) اعمال کنیم و نتایج بیشتری را فیلتر نماییم. Syntax عملگر like به صورت زیر می باشد.

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;

همانطور که مشاهده می نمایید بعد از Like باید pattern خود را بسازید برای ساخت pattern از دو علامت معروف استفاده می کنیم که عبارتند از:

علامت % که نشان دهنده یک یا صفر و یا چند کاراکتر است.

علامت _ (خط زیر یا همان underline خودمان) که نشان دهنده یک کاراکتر است فارغ از آنکه آن کارکتر چه چیزی است.

خب برای اینکه خیلی راحت منظورم رو درک کنید و تفاوت میان دو علامت %  و _ را در عملگر like بفهمید، مثال های زیر رو نگاه کنید.

این دستور هر مقداری که با a شروع شود را پیدا می کند WHERE CustomerName LIKE 'a%'
این دستور هر مقداری که با a به پایان می رسد را برای ما پیدا می کند. WHERE CustomerName LIKE '%a'
این دستور برای ما هر مقداری که شامل or باشد را فارغ از مکان قرار گیری پیدا می کند. مهم نیست or کجا باشد فقط درونش or باشد. WHERE CustomerName LIKE '%or%'
این دستور برای ما مقادیری را پیدا می کند که حرف دومشان حتما باید r باشد. WHERE CustomerName LIKE '_r%'
 این دستور برای ما مقادیری را پیدا می کند اولا 3 حرفی باشد و در ضمن با حرف a شروع شوند. WHERE CustomerName LIKE 'a_%_%'

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

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

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

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

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

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

جهانگیر پچکم
09 اسفند 1398
سلام نوید عزیز سورس کامل فایل در آدرس زیر قرار داره https://www.roxo.ir/home/programming/php-online-shop-script اون چیزهایی که شما مد نظرتون هست، مستلزم یک سری تغییرات توی همین فایل هست که انجام اون تغییرات منوط به مطالعه درست و دقیق درس های این دوره هست. اگر شما با دقت کامل و با کدنویسی درسهای این دوره رو یاد بگیرید، انجام کاری که در بالا گفتید، خیلی براتون راحت می شه. با آرزوی موفقیت برای شما، جهانگیر پچکم

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

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

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

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

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

علی
18 اردیبهشت 1398
سلام. ممنون از آموزش خیلی خوبتون. اینجا شما گفتید در فایل index.php تغییرات جستجو رو انجام بدیم در حالی که در درس‌های قبلی این قسمت از جستجو به Right_Sidebar.php منتقل شده بود.

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

ساناز
04 بهمن 1397
سلام برای اپلود عکس محدودیت حجم هس؟

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

جهانگیر پچکم
08 بهمن 1397
سلام منظور شما، کدوم عکس هست، چون من در این قسمت عکسی رو آپلود نکردم. اما در فسمتهای آینده، در مورد محدودیت عکس صحبت شده است. لطفا به آدرس زیر مراجعه کنید. https://www.roxo.ir/upload-file-and-validation-in-php/

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

رضا
16 دی 1397
سلام ببخشید من یه سوال داشتم. من دارم روی یه فیلد جستجو برای یه سایت خبری کار می کنم که حالت فیلترینگ هم داره. به این شکل که مثلاً کاربر موضوع مورد نظرش مثل ورزشی رو وارد می کنه و بعد عنوانی که می خواد پیدا کنه رو وارد می کنه. و موتور جستجو فقط باید بین عناوینی که توی موضوع ورزشی قرار گرفتند جستجو کنه. این دستوری هست که من نوشتم اما جواب نمی ده. SELECT * FROM news WHERE subject='$user_favorit_subject' AND news_title LIKE '%$user_favorit_title%'

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

جهانگیر پچکم
20 دی 1397
سلام آقا رضای گل اشتباه شما اینه که باید نام اون ستون که می خواهید توی او سرچ کنید (مثلا توی مشئله شما ورزشی) رو باید به جای علامت ستاره * قرار بدین تا به درستی کار کنه. مشکل شما اینجا هست که همه ستون های جدول رو می گردی باید دقیقا مشخص کنی که باید از ستون ورزشی اطلاعات رو بیرون بکشی. اگر مشکلی بود باز بگو تا حلش کنم.

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

محمد
11 دی 1397
با سلام میشه در مورد صفحه بندی مطالب این پروزه توضیح بدید چه طور باید انجام بشه.

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

محمد
10 دی 1397
با سلام دوستان کد های جستجو رو باید تو فایل Right_Sidebar.php تغییر بدید نه index .phpواسه اونایی که اموزش رو میخونن نوشتم.

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