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

15 شهریور 1397
php-brands-and-categories

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

اهداف این فصل

  1. آموزش نحوه اتصال به پایگاه داده یا Database
  2. استخراج دسته بندی ها از پایگاه داده
  3. استخراج برندها از پایگاه داده
  4. تبدیل صفحه اصلی سایت به یک صفحه داینامیک

حالا به تفصیل در مورد هر کدام از مراحل بالا توضیح می دهم.

در ابتدای کار برای تفسیر تمام مراحل بالا یک فایل به نام function.php درون فولدر functions تولید کنید. به تصویر زیر نگاه کنید.

ایجاد فایل functions.php در فروشگاه اینترنتی

آموزش نحوه اتصال به پایگاه داده یا Database در PHP

دقت کنید فرمان زیر را قبل از هر چیزی باید در functions.php بنویسید. دستور زیر فرمت کلی برای ارتباط با پایگاه داده است.

mysqli_connect(host,username,password,database);

در این دستور اشاره خواهیم کرد که هر یک از پارامترهای آرگومان به چه چیزی اشاره می کند:

host: نام یا ip کامپیوتری است که هاست (پایگاه داده) ما بر روی آن قرار دارد. در اینجا چون ما از wamp استفاده می کنیم مقدار "localhost" را قرار می دهیم. اما اگر شما سایتی تهیه کرده اید باید آدرس سایت خودتان را بدهید.

username: نام کاربری است که برای اتصال به پایگاه داده باید از آن استفاده کنیم. در مراحل قبل ما username خاصی را تعریف نکردیم، بنابراین از خود root دیتابیس استفاده خواهیم کرد.

password: رمز ورود برای نام کاربری انتخاب شده است و با آن می توان به پایگاه داده دسترسی داشت. چون از root استفاده می کنیم و root رمز خاصی ندارد ، این مقدار را خالی قرار می دهیم.

database: نام پایگاه داده ای است که قصد داریم از آن استفاده کنیم. ما نام پایگاه داده خود را "ecommerce" قرار دادیم.

با توجه به توضیحات بالا کدهای زیر را در فایل functions.php قرار دهید.

<?php
	$con=mysqli_connect("localhost","root","","ecommerce");	
?>

سپس در توابعی که قصد داریم از این متغییر ($con) استفاده کنیم، کافی است global $con را درون آنها قرار دهیم. به عبارت دیگر با دستور global تعیین می کنیم که منظور ما از متغییر con$ همان متغییری است که در اتصال پایگاه داده نقش دارد.

استخراج دسته بندی از پایگاه داده در PHP

ابتدا کدهای زیر را پس از کدهای قبلی اضافه کنید.

	//getting categories
	function getCat()
	{
		global $con;
		$get_cat="select * from categories";
		//for persion languge
		$run_cat=@mysqli_query($con,"SET NAMES utf8");
		$run_cat=@mysqli_query($con,"SET CHARACTER SET utf8");
		$run_cat=@mysqli_query($con,$get_cat);
		while($row_cat=@mysqli_fetch_array($run_cat))
		{
			$cat_id=$row_cat['cat_id'];
			$cat_title=$row_cat['cat_title'];
			echo "<li><a href='#'>$cat_title</a></li>";
		}
		
	}

شرح کدها

در نام گذاری تابع همواره حرف اول از کلمه اول (g در get) را کوچک و حرف اول از کلمه دوم (C در Cat) را بزرگ بنویسید. این یک قاعده بین برنامه نویس های php است که تحت عنوان "Lower Camel Case" شناخته می شود و برای نام گذاری توابع از آن استفاده می کنند.

در خط چهارم باید $con را به صورت global تعریف کنیم تا بتوانیم به متغییر های بیرون از محدوده بلاک دسترسی داشته باشیم.

در خط پنجم یک متغییر تحت عنوان get_cat تعریف کرده ایم که در واقع یک دستور SQL است و تمامی فیلدهای جدول categories را در نظر می گیرد (منظورم فیلد های cat_id و cat_title است ).

در خط ششم از تابع mysqli_query()  استفاده کرده ایم. این تابع بین پایگاه داده و دستور ما ارتباط برقرار می کند و خروجی آن مثل یک آرایه دوبعدی است که در یک بعد آن فیلد های مورد نظر ما قرار دارد و در بعد دیگر رکورد هایی که در این فیلد ها به ثبت رسیده اند.

حالا باید اطلاعات مورد نیاز خودمان را با یک دستور while از این آرایه بیرون بکشیم. این کار را در کد زیر انجام داده ایم:

while($row_cat=@mysqli_fetch_array($run_cat))
		{
			$cat_id=$row_cat['cat_id'];
			$cat_title=$row_cat['cat_title'];
			echo "<li><a href='#'>$cat_title</a></li>";
		}

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

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

استخراج برندها از پایگاه داده در PHP

این مرحله دقیقا مشابه مرحله قبل است با این تفاوت که باید از جدول داده ای brands استفاده کنیم. من اسم این تابع را getBrands قرار دادم و کدهای زیر نمایان گر این تابع می باشند.

	//getting brands
	function getBrand()
	{
		global $con;
		$get_brand="select * from brands";
		$run_brand =@mysqli_query($con,"SET NAMES utf8");
		$run_brand =@mysqli_query($con,"SET CHARACTER SET utf8");
		$run_brand=@mysqli_query($con,$get_brand);
		while($row_brand=@mysqli_fetch_array($run_brand))
		{
			$brand_id=$row_brand['brand_id'];
			$brand_title=$row_brand['brand_title'];
			echo "<li><a href='#'>$brand_title</a></li>";
		}
	}

بعد از نوشتن تابع getBrands و اضافه کردن آن به فایل functions.php، کل فایل functions.php ما باید دارای کد های زیر باشد.

<?php

	$con=mysqli_connect("localhost","root","","ecommerce");

	//getting categories
	function getCat()
	{
		global $con;
		$get_cat="select * from categories";
		//for persion languge
		$run_cat=@mysqli_query($con,"SET NAMES utf8");
		$run_cat=@mysqli_query($con,"SET CHARACTER SET utf8");
		$run_cat=@mysqli_query($con,$get_cat);
		while($row_cat=@mysqli_fetch_array($run_cat))
		{
			$cat_id=$row_cat['cat_id'];
			$cat_title=$row_cat['cat_title'];
			echo "<li><a href='#'>$cat_title</a></li>";
		}
		
	}

	//getting brands
	function getBrand()
	{
		global $con;
		$get_brand="select * from brands";
		$run_brand =@mysqli_query($con,"SET NAMES utf8");
		$run_brand =@mysqli_query($con,"SET CHARACTER SET utf8");
		$run_brand=@mysqli_query($con,$get_brand);
		while($row_brand=@mysqli_fetch_array($run_brand))
		{
			$brand_id=$row_brand['brand_id'];
			$brand_title=$row_brand['brand_title'];
			echo "<li><a href='#'>$brand_title</a></li>";
		}
	}
?>

درج توابع استخراج دسته بندی ها و برندها در فایل index.php

این مرحله در واقع به اضافه کردن دو تابع getCat و getBrand در index.php و همچنین include کردن فایل functions.php در فایل index.php می پردازد.

این کار به راحتی انجام می گیرد. فقط کافی است که فایل index.php را که در مراحل قبل ساختیم با Notepad++ باز کنید و کدهای زیر را به ابتدای آن اضافه نمایید.

<?php 
	include('functions/functions.php');
?>

بعد از انجام اینکار ما باید سایدبار سایت را به گونه ای تغییر دهیم که دسته بندی ها و برند ها را در خودش قرار دهد. به همین منظور کد های زیر را در index.php پیدا کنید

            <div class="templatemo_right_section">
            	<h4>Categories</h4>
                <div class="templatemo_right_section_content">
                    <ul>
                        <li><a href="#">Artificial and Silk</a></li>
                        <li><a href="#">Dried and Preserved</a></li>
                        <li><a href="#">Floral</a></li>
                        <li><a href="#">Fresh Cut</a></li>
                        <li><a href="#">Gardens</a></li>
                        <li><a href="#">Gifts</a></li>
                        <li><a href="#">Nurseries</a></li>
                        <li><a href="#">Services</a></li>
                        <li><a href="#">Weddings</a></li>
                        <li><a href="#">Wholesale</a></li>
                    </ul>
                </div>
            </div>

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

<div class="templatemo_right_section">
						<h4>دسته بندی ها</h4>
						<div class="templatemo_right_section_content">
							<ul>
								<?php getCat(); ?>
							</ul>
						</div>
					</div>
					
					<div class="templatemo_right_section">
						<h4>برندها</h4>
						<div class="templatemo_right_section_content">
							<ul>
								<?php getBrand() ?>
							</ul>
						</div>
					</div>

دقت کنید اگر رکوردی به پایگاه داده ی خود اضافه نکرده باشید هیچ چیز به شما نمایش داده نمی شود. من در جلسه قبل گفتم که باید به جداول داده ای categories و brands رکورد هایی را اضافه نمایید. خب بعد از تغییرات اعمال شده صفحه ی اصلی سایت شکلی شبیه به تصویر زیر خواهد داشت.

اضافه کردن دسته بندی ها به قالب فروشگاه اینترنتی

به قسمتی که با فلش قرمز رنگ مشخص شده دقت کنید. فقط یک نکته مانده و آن راست چین کردن می باشد.

برای این کار کافی است به پوشه styles بروید و style.css را باز کنید. کدهای زیر را پیدا کنید

h4 {
	margin: 0;
	padding: 5px 0 5px 15px;
	font-size: 16px;
	color: #ffffff;
	font-weight: normal;
	background-color: #be457c;
}

و آنها را با کد زیر عوض کنید

h4 {
    margin: 0;
    padding: 5px 15px 5px 0px;
    font-size: 16px;
    color: #ffffff;
    font-weight: normal;
    background-color: #be457c;
    text-align: right;
}

حالا مجددا کد زیر را در style.css پیدا کنید

.templatemo_right_section_content li {
    margin-bottom: 3px;
    }

و آن را حذف کنید و کد زیر را اضافه نمایید.

.templatemo_right_section_content li {
    margin-bottom: 3px;
    text-align: right;
}

بعد از این دو تغییر سایدبار ما و محتویاتش راست چین می شود. به تصویر زیر نگاه کنید.

راست چین کردن دسته بندی و برند قالب فروشگاه اینترنتی

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

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

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

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

مریم
03 آذر 1399
سلام ببخشید برای include کردن فایل functions.php در فایل index.php باید خط کد رو قبل از تگ html بگذاریم یا بین تگ

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

یاشار
07 مرداد 1399
سلام من این کدا رو به درستی نوشتم یک بار با برنهمه uni server zامتحان کردم جواب داد بعدش با ومپ ولی تو ومپ ارور میده Warning: mysqli_connect(): (HY000/1049): Unknown database 'ecommerce' in C:\wamp64\www\ecommerce\functions\functions.php on line 3

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

ahmad
12 اردیبهشت 1399
تشکر از شما. اگر بخوام دسته بندی مشابه که قبلا زدم دیگه وارد نکنه کجا باید استفاده کنم و از چه تابعی؟ میخوام در فرم دسته بندی اگر مثلا دسته بندی لاراول بود دیگه خواستم دسته بندی لاراول دوباره ایجاد کنم اجازه نده

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

طاهر
07 اردیبهشت 1399
سلام من سه باراین مراحل روانجام دادم ولی توی جدول دسته بندی ها رکوردها توی سایت بالانمیاد چه کاربایدکرد؟

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

zahra
24 فروردین 1399
سلام من دقیقا این کارهایی که تو این قسمت گفتید انجام دادم اما ارتباط برقرار نشد و اطلاعات جداول گایگاه داده در قسمت سایدبار نمیاد نمیدونم دلیلش چیه. ممنون میشم کمکم کنید.

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

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

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

شقایق
13 شهریور 1398
سلام منم همه ی راه ها رو رفتم ولی این ارور رو به من میده Fatal error: Uncaught Error: Call to undefined function geCat() in D:\xamp\htdocs\ecommerce\index.php:107 Stack trace: #0 {main} thrown in D:\xamp\htdocs\ecommerce\index.php on line 107

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

جهانگیر پچکم
24 شهریور 1398
با سلام خدمت شما شقایق خانم به نظر میرسه که شما فایل functions.php را به خوبی include نکرده ایی لطفا بار دیگر خط زیر را در ابتدای فایل index.php قرار بدید. include('functions/functions.php'); با آرزوی موفقیت برای شما، جهانگیر پچکم

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

امید
29 خرداد 1398
بسم الله الرحمن الرحیم عرض سلام مجدد برای شما عزیزان که سایت به این خوبی را راه اندازی کرده اید. سئوال دیگری داشتم. امکان دارد در دستور get cat که برای ایجاد منو بسیار خوب است و به راحتی منوها را در سایت ایجاد می کند ، بفرمایید چگونه می توانم با php منوی چند سطحی ایجاد کنم در اینترنت دستورات زیادی ذکر شده است ولی بهترین دستورات php برای منوی چند سطحی چگونه است و چطور باید نوشته شود؟ ومن الله التوفیق .

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

جهانگیر پچکم
30 خرداد 1398
سلام به شما آقا امید گل منم از شما ممنونم شما می تونید به راحتی همین تابع رو به صورت چند سطحی تعریف کنید فقط باید به میزانی اندکی با دستورات css و javascript آشنایی داشته باشید و با استفاده از یک نمونه الگوی منوی چند سطحی که توی اینترنت فرآوان هست، به راحتی می تونید همین get cat رو به صورت پویا و چند سطحی تبدیل کنید.

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

امید
30 خرداد 1398
بسم الله الرحمن الرحیم سلام و عرض ادب و احترام برای شما عزیزم خداوند توفیق تان دهد . تشکر می کنم برای جواب تان . من با css منوی چند سطحی افقی را طراحی کرده ام ولی می خواستم از کدهای php استفاده کنم برای منوی چند سطحی و با توجه باینکه شما از دستور get cat استفاده کرده بودید می خواستم ببینم نظر شما برای منوهای چند سطحی کدام روش و نوشتن چگونه کدهایی بهتر است . و تشکر بی نهایت برای زحمتی که کشیدید و لطف کردید و وقتتان را صرف کردید و جواب دادید . ومن الله التوفیق .

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

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

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

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

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

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

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

‌Romina
09 دی 1397
با اینکه من به جداول دیتابیس رکورد اضافه کردم اما در اجرا نمایش داده نمیشه. بررسی کردم این دستور و همچنین دستور getBrands خوانده نمیشود باید چه کار انجام بدم؟

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

جهانگیر پچکم
10 دی 1397
سلام روبینا آیا شما کدهای زیر رو به ابتدای فایل index.php اضافه کردید. اگر اینکار رو انجام نداده باشید، نمیتونه که توابعی رو که ساختیم به دست بیاره. ضمنا یادتون باشه که ما یک فولدر تحت عنوان functions ساختیم و بعد درون این فولدر فایل functions.php رو تعریف کردیم، اگر اینکار رو نکردید، باز هم جواب نمی گیرید. توصیه من به شما اینه که یکبار دیگه از قسمت اول آموزش شروع کنید به بررسی مو به موی کدها و اقداماتی که باید انجام بشه، انشاالله مشکل برطرف میشه. اگر برطرف نشد باز اعلام کنید تا بررسی های لازم رو با هم انجام بدیم.

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

Romina
09 دی 1397
ببخشید در فایل index.php

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

romina
09 دی 1397
سلام یه داشتم... دستور در فایل functions من خونده نمیشه علتش چیه؟

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