ایجاد پنل مدیریت سایت با PHP - افزودن محصول جدید

php-admin-panel-add-new-product

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

این امکانات باعث می شوند که مدیر سایت بدون کدنویسی و درگیر شدن با پایگاه داده، اطلاعات مورد نیازش را به دست آورد و آنها را در صورت لزوم، تغییر دهد.

پنل مدیریت سایت

امروز قرار است به سراغ دو گزینه (یا option) از سایدبار سمت راست، به نام  "مشاهده سایت"  و  "وارد کردن محصول جدید"  برویم.

تعیین نقش برای گزینه ی "مشاهده سایت"

برای اینکار ابتدا باید این را بدانید که منظور از این گزینه چه می باشد. انتظاری که یک مدیر  سایت از این گزینه دارد این است که زمانی که بر روی آن ، کلیک می کند، باید صفحه ی اصلی سایت در پنجره جدیدی از مرورگر برایش باز شود.

خب برای انجام اینکار باید در ابتدا به آدرس C:\wamp\www\ecommerce\admin_area مراجعه نمایید و فایل Right_Sidebar.php را با استفاده از Notepad++ باز کنید.

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

ایجاد فایل سایدبار

بعد از باز کردن فایل Right_Sidebar.php، حالا کد زیر را در آن پیدا کنید.

<li><a href="../index.php" target="_blank"><h4>مشاهده سایت</h4></a></li>

با کلیک کردن بر روی گزینه ی" مشاهده سایت" در واقع یک تگ a را فعال خواهیم کرد که، دارای ویژگی href برابر با "../index.php" است که باعث می شود، مدیر سایت به سمت صفحه اصلی سایت هدایت شود.

البته برای اینکه صفحه ی اصلی در یک تب جدید ایجاد شود، ما یک ویژگی تحت عنوان target="_blank" را نیز به تگ a اضافه کرده ایم.

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

صفحه پنل مدیریت سایت

هنگامی که مدیر سایت بر روی گزینه ی  "مشاهده سایت" کلیک می کند، در یک تب جدید تصویر زیر به نمایش در می آید (این تصویر، همان صفحه ی اصلی سایت می باشد.)

صفحه ی اصلی سایت

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

تعیین نقش برای گزینه ی "وارد کردن محصول جدید"

دقت نمایید در اینجا نیز ما با بهره گیری از متغییر سراسری $_GET، مسیر برنامه را تعیین کرده و آن را به سمت مورد نظر خودمان، هدایت می کنیم. به همین منظور، در ابتدا توجه شما را به فایل Right_Sidebar.php، جلب می کنم.

<li><a href="index.php?insert_pro"><h4>وارد کردن محصول جدید</h4></a></li>

در کد بالا مشاهده می نمایید که هنگام لینک دادن، ما به گونه ایی لینک مورد نظر خودمان را داده ایم (href="index.php?insert_pro") که در ادامه بتوانیم با استفاده از متغییر سراسری  $_GET[' insert_pro'] از آن برای جهت دادن به برنامه استفاده کنیم.

حالا که این موضوع را به خوبی درک کردید به آدرس C:\wamp\www\ecommerce\admin_area بروید و فایل index.php را با استفاده از Notepad++ باز کنید و کدهای زیر را در آن پیدا کنید.

<!-- start of ocntent left -->
	<div id="templatemo_content_left">
		
		
		<div class="cleaner_with_height">&nbsp;</div>
	</div> 
	<!-- end of ocntent left -->

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

<!-- start of ocntent left -->
	<div id="templatemo_content_left">
		
		<?php 
			
			if(isset($_GET['insert_pro']))
			{
				include('insert_product.php');
			}
		?>
		
		<div class="cleaner_with_height">&nbsp;</div>
	</div> 
	<!-- end of ocntent left -->

و این تغییرات را save کنید.

ما با استفاده از دستور شرطی if(isset($_GET['insert_pro'])) از متغییر سراسری $_GET['insert_pro'] استفاده کردیم و گفته ایم که اگر در url سایت پارامتر insert_pro قرار داشت برای ما فایل insert_product.php را include کن.

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

حالا تنها کاری که باید انجام دهیم این است که، به صفحه اصلی پنل مدیریت سایت باز گردیم و این بار بر روی گزینه "وارد کردن محصول جدید" از سایدبار سمت راست، کلیک کنیم. به تصویر زیر نگاه کنید.

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

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

صفحه ی مخصوص وارد کردن محصول جدید

قبل از گرفتن تست عملی، یک کار دیگر نیز باقی مانده است و آن تغییر در کدهای فایل insert_product.php می باشد. به همین خاطر، باید در فایل insert_product.php و در آدرس برگشت تغییر ایجاد کنیم؛ لذا باید ابتدا به آدرس C:\wamp\www\ecommerce\admin_area برگردید و فایل insert_product.php را با استفاده از Notepad++ باز کنید و کدهای موجود در آن را حذف کنید و به جای آنها، کدهای زیر را در آن قرار دهید.

<form  action=""  method="post" enctype="multipart/form-data">

	<table  width="650" align="center">
	
		<caption ><b>اطلاعات مربوط به محصول را در این جدول اضافه کنید</b></caption >
					  
		<tr>
			<th ><b>ویژگی های محصول</b></th >
			<th ><b>مقدار ورودی برای هر کدام از ویژگی ها</b></th >
		</tr>


		<tr>
			<td><b>نام محصول</b></td >
			<td><input type="text" name="product_title" size="70" required></td >
		</tr>		

		<tr>
			<td><b>دسته بندی  محصول</b></td>
			<td>
			<select name="product_cat" required>
				<option>دسته ی مورد نظر خود را انتخاب کنید</option>
				<?php
					$get_cat="select * from categories";
					$run_cat=@mysqli_query($con,"SET NAME 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"<option value='$cat_id'>$cat_title</option>";
					}
				?>
			</select>
									
			</td >
		</tr>
		
		<tr>
			<td><b>برند محصول</b></td >
			<td>
			<select name="product_brand" required>
				<option>برند مورد نظر خود را انتخاب کنید</option>
				<?php
					$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"<option value='$brand_id'>$brand_title</option>";
					}
				?>
			</select>
			</td>
		</tr>

		
		<tr>
			<td><b>قیمت محصول</b></td >
			<td><input type="text" name="product_price" required></td>
		</tr>

		
		<tr>
			<td><b>توصیف محصول </b></td>
			<td><textarea name="product_desc" ></textarea></td>
		</tr>

		
		<tr>
			<td><b>عکس محصول</b></td >
			<td><input type="file" name="product_image" required></td >
		</tr>
		
		<tr>
			<td><b>کلمات کلیدی</b> </td >
			<td><input type="text" name="product_keywords" size="70" required></td >
		</tr>
		
		
		<tr>
			<td align="center"><input type="submit" name="submit" value="بارگذاری"> </td>
			<td align="center"><input type="reset" name="reset" value="ریست کردن"></td>
		</tr>
	</table>
	 
</form>
<?php
// define variables and set to empty values

if(isset($_POST['submit']))
	{
    		
			$product_title = $_POST["product_title"];
			$product_cat = $_POST["product_cat"];
			$product_brand = $_POST["product_brand"];
			$product_price = $_POST["product_price"];
			$product_desc = $_POST["product_desc"];
			$product_keywords = $_POST["product_keywords"];
			
					
		//getting the image form the image fields
		$product_image_name	=$_FILES['product_image']['name'];
		$product_image_tmp	=$_FILES['product_image']['tmp_name'];
		$address_images='product_images/'.$product_image_name;
		move_uploaded_file($product_image_tmp,$address_images);
			
			$insert_product = "INSERT INTO products (product_title ,product_cat , product_brand , product_price , product_desc , product_image , product_keywords)
			VALUES (N'$product_title' , $product_cat , $product_brand , $product_price , N'$product_desc' , N'$address_images' , N'$product_keywords' )";
            $insert_pro=mysqli_query($con,$insert_product);

		//display message to user		
		if($insert_pro)
		{
			echo"<script>alert('تبریک...داده های مربوط به محصول شما به درستی وارد شد.')</script>";
			echo"<script>window.open('index.php','_self')</script>";
		}
			
    
	}
?>

در واقع ما آدرس برگشت را تغییر داده ایم. تصویر زیر این موضوع را به درستی نشان می دهد.

تصویری از پیامی که به کاربر نشان داده می شود و تغییری که در آدرس برگشت ایجاد کرده ایم

تست عملی کدهای نوشته شده

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

به عنوان مثال من در جدول داده ایی products، رکورد های (دقت کنید که هر رکورد نشان دهنده یک محصول می باشد) زیر را دارم.

نمایی از پایگاه داده قبل از اعمال تغییرات

حالا یک محصول جدید را مانند تصویر زیر، این بار از طریق گزینه "وارد کردن محصول جدید"، اضافه نماییم.

افزودن محصول جدید به وب سایت

همانطور که در تصویر بالا مشاهده می کنید، بعد از اینکه اطلاعات محصول را به درستی وارد کردیم؛ باید بر روی دکمه بارگذاری کلیک کنید. با انجام اینکار، تصویر زیر برای ما نمایان می شود.

پیام اضافه شدن محصول به محصولات موجود

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

محصول به محصول قبلی اضافه شده است.

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

فایلهای نهایی

فایل نهایی index.php که در آدرس C:\wamp\www\ecommerce\admin_area قرار دارد.

<!-- start of Header -->
<?php	include('include/Header.php');	?>
<!-- end of Header -->				

<div id="templatemo_content">
	
	
	<!-- start of ocntent left -->
	<div id="templatemo_content_left">
		
		<?php 
			
			if(isset($_GET['insert_pro']))
			{
				include('insert_product.php');
			}
		?>
		
		<div class="cleaner_with_height">&nbsp;</div>
	</div> 
	<!-- end of ocntent left -->
	
	<!-- start of right content -->
	<?php	include('include/Right_Sidebar.php');	?>
	<!-- end of right content -->
	
	<div class="cleaner">&nbsp;</div>
</div>

<!-- start of footer -->
<?php include('include/Footer.php');	?>
<!-- end of footer -->

فایل نهایی insert_product.php که در آدرس C:\wamp\www\ecommerce\admin_area قرار دارد.

<form  action=""  method="post" enctype="multipart/form-data">

	<table  width="650" align="center">
	
		<caption ><b>اطلاعات مربوط به محصول را در این جدول اضافه کنید</b></caption >
					  
		<tr>
			<th ><b>ویژگی های محصول</b></th >
			<th ><b>مقدار ورودی برای هر کدام از ویژگی ها</b></th >
		</tr>


		<tr>
			<td><b>نام محصول</b></td >
			<td><input type="text" name="product_title" size="70" required></td >
		</tr>		

		<tr>
			<td><b>دسته بندی  محصول</b></td>
			<td>
			<select name="product_cat" required>
				<option>دسته ی مورد نظر خود را انتخاب کنید</option>
				<?php
					$get_cat="select * from categories";
					$run_cat=@mysqli_query($con,"SET NAME 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"<option value='$cat_id'>$cat_title</option>";
					}
				?>
			</select>
									
			</td >
		</tr>
		
		<tr>
			<td><b>برند محصول</b></td >
			<td>
			<select name="product_brand" required>
				<option>برند مورد نظر خود را انتخاب کنید</option>
				<?php
					$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"<option value='$brand_id'>$brand_title</option>";
					}
				?>
			</select>
			</td>
		</tr>

		
		<tr>
			<td><b>قیمت محصول</b></td >
			<td><input type="text" name="product_price" required></td>
		</tr>

		
		<tr>
			<td><b>توصیف محصول </b></td>
			<td><textarea name="product_desc" ></textarea></td>
		</tr>

		
		<tr>
			<td><b>عکس محصول</b></td >
			<td><input type="file" name="product_image" required></td >
		</tr>
		
		<tr>
			<td><b>کلمات کلیدی</b> </td >
			<td><input type="text" name="product_keywords" size="70" required></td >
		</tr>
		
		
		<tr>
			<td align="center"><input type="submit" name="submit" value="بارگذاری"> </td>
			<td align="center"><input type="reset" name="reset" value="ریست کردن"></td>
		</tr>
	</table>
	 
</form>
<?php
// define variables and set to empty values

if(isset($_POST['submit']))
	{
    		
			$product_title = $_POST["product_title"];
			$product_cat = $_POST["product_cat"];
			$product_brand = $_POST["product_brand"];
			$product_price = $_POST["product_price"];
			$product_desc = $_POST["product_desc"];
			$product_keywords = $_POST["product_keywords"];
			
					
		//getting the image form the image fields
		$product_image_name	=$_FILES['product_image']['name'];
		$product_image_tmp	=$_FILES['product_image']['tmp_name'];
		$address_images='product_images/'.$product_image_name;
		move_uploaded_file($product_image_tmp,$address_images);
			
			$insert_product = "INSERT INTO products (product_title ,product_cat , product_brand , product_price , product_desc , product_image , product_keywords)
			VALUES (N'$product_title' , $product_cat , $product_brand , $product_price , N'$product_desc' , N'$address_images' , N'$product_keywords' )";
            $insert_pro=mysqli_query($con,$insert_product);

		//display message to user		
		if($insert_pro)
		{
			echo"<script>alert('تبریک...داده های مربوط به محصول شما به درستی وارد شد.')</script>";
			echo"<script>window.open('index.php','_self')</script>";
		}
			
    
	}
?>
تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری فروشگاه اینترنتی با PHP توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (4 دیدگاه)

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

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

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

erfanps
27 اردیبهشت 1399
سلام ممنونم از اموزش خوبتون ولی ای کاش کدها رو هم میزاشتین با پوشه ها رو تشکر

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

محمد نیک فرجام
10 اسفند 1398
سلام جناب پچکم ممنونم از آموزش خوبتون واقعا خسته نباشید واقعا تشکر میکنم ازتون ببخشید یک سوال داشتم من میخاستم 3 تا عکس رو اپلود کنم $product_image_name =$_FILES['product_images']['name']; $product_image_tmp =$_FILES['product_images']['tmp_name']; $address_images='product_images/'.$product_image_name; move_uploaded_file($product_image_tmp,$address_images); $product_image_name =$_FILES['pimg2']['name2']; $product_image_tmp2 =$_FILES['pimg2']['tmp_name2']; $address_images2='product_images/'.$product_image_name2; move_uploaded_file($product_image_tmp2,$address_images2); $product_image_name =$_FILES['pimg3']['name3']; $product_image_tmp3 =$_FILES['pimg3']['tmp_name3']; $address_images3='product_images/'.$product_image_name3; move_uploaded_file($product_image_tmp3,$address_images3); $insert_product = "INSERT INTO product (pname ,zid , bid , pprize , pnoe, pkeep , pimg, pimg2, pimg3 ) VALUES (N'$pname' , $zid , $bid , $pprize , N'$pnoe' , N'$pkeep', N'$address_images', N'$address_images2', N'$address_images3')"; $insert_pro=mysqli_query($con,$insert_product); امدم به این شکل عمل کردم ولی خب میدونم صد درصد اشتباهه :) چیکار بکنم؟ و اینکه بخام تست بکنم کدارو که کجا اشتباهه چجوری میتونم انجام بدم؟

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

جهانگیر پچکم
12 اسفند 1398
سلام آقا محمد نیک فرجام گل ببین داداش گلم، برای اینکه مشکلت حل بشه باید از خطوط خاصی echo بگیری و ببینی آیا همونهایی هستن که باید باشن . مثلا کدهای زیر رو بزار ببین جواب echo چیه؟ $product_image_name =$_FILES[‘product_images’][‘name’]; echo "$product_image_name=".$product_image_name; $product_image_tmp =$_FILES[‘product_images’][‘tmp_name’]; echo "$product_image_tmp=".$product_image_tmp; $address_images=’product_images/’.$product_image_name; echo "$address_images=".$address_images; move_uploaded_file($product_image_tmp,$address_images); $product_image_name =$_FILES[‘pimg2’][‘name2’]; echo "$product_image_name =".$product_image_name; $product_image_tmp2 =$_FILES[‘pimg2’][‘tmp_name2′]; echo "$product_image_tmp2 =".$product_image_tmp2; $address_images2=’product_images/’.$product_image_name2; echo "$address_images2=".$address_images2; move_uploaded_file($product_image_tmp2,$address_images2); $product_image_name =$_FILES[‘pimg3’][‘name3’]; echo "$product_image_name =".$product_image_name; $product_image_tmp3 =$_FILES[‘pimg3’][‘tmp_name3′]; echo "$product_image_tmp3 =".$product_image_tmp3; $address_images3=’product_images/’.$product_image_name3; move_uploaded_file($product_image_tmp3,$address_images3); $insert_product = “INSERT INTO product (pname ,zid , bid , pprize , pnoe, pkeep , pimg, pimg2, pimg3 ) VALUES (N’$pname’ , $zid , $bid , $pprize , N’$pnoe’ , N’$pkeep’, N’$address_images’, N’$address_images2′, N’$address_images3′)”; $insert_pro=mysqli_query($con,$insert_product); echo $insert_product; این رو تست کن و ببین آیا echo ها با جواب مورد نظرت یکسان هست یا خیر.

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

محمد نیک فرجام
13 اسفند 1398
سلامی مجدد من حقیقتش امدم از function uploadFiles(){ if(!empty($_FILES['product_images']) and is_array($_FILES['product_images'])){ $files = $_FILES['product_images']; $countfiles = count($files['name']); $path = []; for($i=0;$i<$countfiles;$i++){ $product_image_name = $files['name'][$i]; $product_image_tmp = $files['tmp_name'][$i]; $name = time().$product_image_name; $address_images= $_SERVER['product_images'] . '/' .$name; if(move_uploaded_file($product_image_tmp, $address_images)){ $path[]= $name; } } return json_encode($path); } } استفاده کردم برای عکس فقط مشکل اینه که اگر $address_images= $_SERVER['product_images'] . '/' .$name رو $address_images= $_SERVER['DOCUMENT_ROOT'] . '/' .$name بزارم میزاره توی فایل روت ولی هر ادرس دهی دگ ای ک میکنم جواب نمیگیرم ازش و این ارور رو میده Notice: Undefined index: ../product_images میده Warning: move_uploaded_file(/15832187053.png): failed to open stream: Permission denied به نظر شما چیکار میتونم انجام بدم؟

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

حامد جهانگیری
25 تیر 1398
ممنون از اموزش های خوبتون هر روز دارم اموزش هاتون رو میبینم و خیلی چیز ها دارم یاد میگیرم ب امید خدا همیشه سر بلند باشید :)

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

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

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