عضویت در سایت
نام محصول قیمت محصول تنظیمات
آموزش ساخت سیستم نظردهی با php

در این آموزش قصد داریم یک مثال از ساخت سیستم نظردهی با php و mysql یا همان فرم کامنت (Comment) را به صورت قدم به قدم پیاده سازی کنیم .

سیستم ارسال دیدگاه ما این ویژگی ها را خواهد داشت :

اول از همه , یک یک جدول در دیتابیس mysql برای ثبت نظرات کاربران ایجاد خواهیم کرد.

بعد از آن با قسمت ثبت دیدگاه از طریق فرم ارسال نظر کار می کنیم.

همچنین یک صفحه برای مدیریت دیدگاه هایی مثل منتشر شده , ویرایش و بروزرسانی , حذف کامنت , خواهیم داشت .

این قابلیت ها همه با استفاده از php و mysql پیاده سازی خواهد شد . پس با ما همراه باشید تا ۹ قدم آموزش ساخت سیستم نظردهی با php را پیش بریم .

۱ – ساخت جداول دیتابیس

یک دیتابیس با هر نامی ایجاد کنید , اما دیتابیس ما باید شامل جدولی به اسم comments با ستون های زیر باشد .

ID یک مقدار عددی  و autoincreement (افزایشی و خودکار)

Name مقدار داده ای varchar که برای ذخیره مقدار فیلد name در فرم کامنت استفاده می شود .

E-Mail مقدار داده ای varchar که برای ذخیره ایمیل استفاده می شود

Subject مقدار داده ای varchar برای ذخیره متن دیدگاه استفاده می شود

Submittime بازهم مقدار عددی varchar که از آن برای ذخیره زمان و تاریخ شمسی از آن استفاده خواهیم کرد.

Status نیز varchar است که برای ذخیره وضعیت یک دیدگاه که آیا منتشر شده است یا منتظر تایید مدیریت می باشد , استفاده می شود.

--
-- Table structure for table `comments`
--

CREATE TABLE `comments` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `subject` varchar(255) NOT NULL,
  `submittime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `status` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

۲ – اتصال به دیتابیس mysqli با php

برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود

در مرحله دوم , قصد داریم به دیتابیس مورد نظر برای ثبت دیدگاه کاربران , متصل شویم .

کد زیر را در فایل connect.php ذخیره کنید .

<?php
	$connection = mysqli_connect('localhost', 'root', '', 'cms');

	if(!$connection){
		echo "Error: Unable to connect to MySQL." . PHP_EOL;
    	echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    	echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    	exit;
	}
?>

۳ – ساخت فرم HTML نظرسنجی کاربران

در این مرحله , یک فرم HTML برای طراحی بخش نظر گذاری سایت با استایل bootstarp ایجاد می کنیم . در هدر فایل اسیتل دهی بوت استرپ را از CDN فراخوانی می کنم .

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" >

بعد از افزودن فایل های bootstrap , فرم ارسال نظر را با این فیلد ها می سازیم . name , email , comment  . می توانید کد های زیر را مستقیما کپی و استفاده کنید . برای شکیل شدن فرم از کلاس های bootstrap استفاده کردم .

<html>
<head>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" >
</head>
<body>
<div style="width:50%;margin:0 auto" class="panel panel-default">
<div class="panel-heading">Submit Your Comments</div>
  <div class="panel-body">
  	<form method="post">
  	  <div class="form-group">
	    <label for="exampleInputEmail1">Name</label>
	    <input type="text" name="name" class="form-control" id="exampleInputEmail1" placeholder="Name">
	  </div>
	  <div class="form-group">
	    <label for="exampleInputEmail1">Email address</label>
	    <input type="email" name="email" class="form-control" id="exampleInputEmail1" placeholder="Email">
	  </div>
	  <div class="form-group">
	    <label for="exampleInputPassword1">Subject</label>
	    <textarea name="subject" class="form-control" rows="3"></textarea>
	  </div>
	  <button type="submit" class="btn btn-primary">Submit</button>
	</form>
  </div>
</div>
</body>
</html>
فرم ورود اطلاعات

۴ – Insert داده های ارسال شده در دیتابیس

قبل از افزودن داده های ارسال شده از فرم , نیاز داریم که به دیتابیس mysql متصل شویم . در این قسمت از آموزش ساخت سیستم نظردهی با php , باید فایل اتصال به دیتابیس (connect.php) را در مراحل قبل ساختیم را با تابع include در php فراخوانی کنیم .  کد ها را در فایل commentform.php ذخیره می کنیم .

include_once('connect.php');

بعد از اتصال به دیتابیس , داده های ارسال شده (submitted) را در دیتابیس insert می کنیم . اول از هر چیزی , با تابع isset بررسی می کنیم که آیا آرایه سوپر گلوبال ست شده باشد و مقدار آن خالی نباشد . بعد با تابع mysqli_real_escape_string کاراکترهای خاصی که باعث خطا در کویری ما می شود را از ورودی پاکسازی می کنیم . این تابع را بر روی همه فیلد های name , email و comment اعمال می کنیم و بعد آنها را به یک متغییر نسبت می دهیم .

بعد از آن یک کویری sql برای افزودن مقادیر فرم در دیتابیس ایجاد می کنیم . همچنین این کویری را در خط بعد با تابع mysqli_query اجرا کردیم. اگر عملیات INSERT با موفقیت انجام شود یک پیام Successfully را مشاهده خواهید کرد در غیر اینصورت پیام خطا را نمایش می دهیم .

if(isset($_POST) &amp; !empty($_POST)){
	$name = mysqli_real_escape_string($connection, $_POST['name']);
	$email = mysqli_real_escape_string($connection, $_POST['email']);
	$subject = mysqli_real_escape_string($connection, $_POST['subject']);

	$isql = "INSERT INTO comments (name, email, subject, status) VALUES ('$name', '$email', '$subject', 'draft')";
	$ires = mysqli_query($connection, $isql) or die(mysqli_error($connection));
	if($ires){
		$smsg = "Your Comment Submitted Successfully";
	}else{
		$fmsg = "Failed to Submit Your Comment";
	}

}

این پیام های خطا در کد قبل در یک متغییر ذخیره کردیم . برای نمایش آنها باید کد های زیر را به بالای کد های فرم ارسال نظر اضافه کنیم .

<?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
<?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>

۵ – نمایش نظرات در بخش مدیریت (Back-end)

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

برای دیدن آموزش ساخت صفحه لاگین و ثبت نام با php کلیک کنید

اگر پروژه شما پنل ادمین دارد نیازی به این کار نیست فقط کافیه بخشی را برای مدیریت نظرات با کدهای HTML زیر اضافه کنید .

کد زیر را در یک فایل با اسم viewcomments.phpدر دایرکتری پنل ادمین اضافه کنید . فراموش نکنید برای شکیل شدن حتما فایل های bootstrap را فراخوانی کنید .

<html>
<head>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" >
</head>
<body>
<div style="width:60%;margin:10px auto" class="panel panel-default">
	<div class="panel-heading">Comments</div>
	<table class="table table-striped"> 
		<thead> 
			<tr> 
				<th>#</th> 
				<th>Name</th> 
				<th>Comment</th> 
				<th>Time</th> 
				<th>Status</th> 
				<th>Operations</th> 
			</tr> 
		</thead> 
		<tbody> 
			<tr> 
				<th scope="row">Comment ID</th> 
				<td>Name</td> 
				<td>Comment</td> 
				<td>Comment Time</td> 
				<td>Comment Status</td> 
				<td><a href="#">Edit</a> <a href="#">App</a> <a href="#">Dis</a> <a href="#">Del</a></td> 
			</tr> 
		</tbody> 
	</table>
</div>
</div>
</body>
</html>
جدول

بعد از قرار دادن جدول بالا , حالا نیاز داریم تمام کامنت های ثبت را از دیتابیس با کویری SQL بخوانیم .

$sql = "SELECT * FROM comments";
$res = mysqli_query($connection, $sql);

بعد از fetch کردن تمام سطر ها به صورت آرایه با تابع mysqli_fetch_assoc , از یک حلقه while برای نمایش همه کامنت ها به صورت یک به یک در هر کدام در یک سطر از جدول HTML استفاده می کنیم.

<?php
	while ( $r = mysqli_fetch_assoc($res)) {
?>
	<tr> 
		<th scope="row"><?php echo $r['id']; ?></th> 
		<td><?php echo $r['cid']; ?></td> 
		<td><?php echo $r['name'] ?></td> 
		<td><?php echo $r['subject']; ?></td> 
		<td><?php echo $r['submittime']; ?></td> 
		<td><?php if(isset($r['status']) &amp; !empty($r['status'])){echo $r['status'];}else{echo "NA";} ?></td> 
		<td><a href="editcomment.php?id=<?php echo $r['id']; ?>">Edit</a> <a href="commentstatus.php?id=<?php echo $r['id']; ?>&amp;status=publish">App</a> <a href="commentstatus.php?id=<?php echo $r['id']; ?>&amp;status=draft">Dis</a> <a href="delcomment.php?id=<?php echo $r['id']; ?>">Del</a></td> 
	</tr> 
<?php } ?>

۶ – ویرایش و بروز رسانی نظرات

در آخرین مرحله , یک لینک برای ارسال id از طریق url برای فایل editcomment.php اضافه کردیم .

فایل editcomment.php :

<html>
<head>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" >
</head>
<body>
<div style="width:60%;margin:10px auto" class="panel panel-default">
  <div class="panel-body">
  	<form method="post">
	  <div class="form-group">
	    <label for="exampleInputEmail1">Name</label>
	    <input type="text" name="name" class="form-control" id="exampleInputEmail1" placeholder="Title">
	  </div>
	  <div class="form-group">
	    <label for="exampleInputEmail1">EMail</label>
	    <input type="email" name="email" class="form-control" id="exampleInputEmail1" placeholder="Email">
	  </div>
	  <div class="form-group">
	    <label for="exampleInputPassword1">Comment</label>
	    <textarea name="subject" class="form-control" rows="6"></textarea>
	  </div>
	  <div class="form-group">
		  <div class="row">
				<div class="col-md-6">
				<label>Post Status</label>
					<select name="status" multiple class="form-control">
					  <option value="draft">Draft</option>
					  <option value="published">Published</option>
					</select>
				</div>
			  </div>
		  </div>
	  <button type="submit" class="btn btn-default">Submit</button>
	</form>
  </div>
</div>
</body>
</html>
فرم به روز رسانی

بررسی می کنیم اگر آرایه سوپر گلوبال خالی باشد با دستور header کاربر را به صفحه دلخواه هدایت می کنیم . در غیر اینصورت id ست شده از طریق url را برای دریافت اطلاعات دیدگاه مورد نظر از دیتابیس در کویری sql به کار می بریم . همچنین برای جلوگیری از ورود کاراکترهای غیرمجاز در id آن را با تابع intval به یک مقدار عددی تبدیل کردیم .

if(isset($_GET['id']) &amp; !empty($_GET['id'])){
	//select query
	$id = intval($_GET['id']);
	$selsql = "SELECT * FROM comments WHERE id=$id";
	$selres = mysqli_query($connection, $selsql);
	$selr = mysqli_fetch_assoc($selres);
	if(mysqli_num_rows($selres) <= 1){
		//redirect to main comments page
	}
}else{
	//redirect to main comments page
}

هر یک از اطلاعات fetch شده از دیتابیس را در خصیصه value هر کدام از فیلد ها echo می کنیم .

<input type="text" name="name" class="form-control" id="exampleInputEmail1" placeholder="Title" value="<?php echo $selr['name']; ?>">
<input type="email" name="email" class="form-control" id="exampleInputEmail1" placeholder="Email" value="<?php echo $selr['email']; ?>">
<textarea name="subject" class="form-control" rows="6"><?php echo $selr['subject']; ?></textarea>

همچنین وضعیت (status) نظر ثبت شده را به اینصورت با تگ select مشخص می کنیم .

<select name="status" multiple class="form-control">
  <option value="draft" <?php if($selr['status'] == "draft"){ echo "selected"; } ?>>Draft</option>
  <option value="published" <?php if($selr['status'] == "published"){ echo "selected"; } ?>>Published</option>
</select>

بعد از اینکه مدیر مقادیر مورد نظر را تغییر داد آن ها را با استفاده از دستور update در sql بروز رسانی می کنیم . مانند مراحل قبل قبل از ثبت بررسی های لازم را انجام می دهیم و در آخر مرحله پیام های مورد نظر را نمایش می دهیم .

if(isset($_POST) &amp; !empty($_POST)){
	//print_r($_POST);
	$name = mysqli_real_escape_string($connection, $_POST['name']);
	$email = mysqli_real_escape_string($connection, $_POST['email']);
	$subject = mysqli_real_escape_string($connection, $_POST['subject']);
	$status = $_POST['status'];

	$sql = "UPDATE comments SET name='$name', email='$email', subject='$subject', status='$status' WHERE id=$id";
	$res = mysqli_query($connection, $sql) or die(mysqli_error($connection));
	//$lid = mysqli_insert_id($connection);
	if($res){
		$smsg = "Comment updated Successfully";
		header("location: editcomment.php?id=$id");
	}else{
		$fmsg = "Failed to update Comment";
	}
}

برای نمایش پیام ها در بالای فرم ویرایش , مقدار متغییر های ست شده را echo می کنیم .

<?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
<?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>

۷ – تغییر وضعیت نظرات (Update Status)

در این مرحله از ساخت سیستم نظردهی با php , در قسمت عملیات (operation) صفحه viewcomments.php لینک های زیر را اضافه می کنیم . قبلا لینک ها را به صورت لینک # اضافه کردیم . کافیست آنها را با کدهای زیر جایگزین کنید . برای تغییر status در url مقدار id و وضعیت مورد نظر را به صفحه commentstatus.php ارسال می کنیم.

<a href="commentstatus.php?id=<?php echo $r['id']; ?>&amp;status=publish">App</a>
<a href="commentstatus.php?id=<?php echo $r['id']; ?>&amp;status=draft">Dis</a>

کد ها را به فایل commentstatus.php اضافه کنید . حتما فایل connect.php را نیز فراخوانی کنید .

if(isset($_GET) &amp; !empty($_GET)){
	if((isset($_GET['id']) &amp; !empty($_GET['id'])) &amp; (isset($_GET['status']) &amp; !empty($_GET['status']))){
		$id = intval($_GET['id']);
		$status = $_GET['status'];

		$sql = "UPDATE comments SET status='$status' WHERE id=$id";
		$res = mysqli_query($connection, $sql) or die(mysqli_error($connection));
		if($res){
			header("location: viewcomments.php");
		}else{
			header("location: viewcomments.php");
		}
	}
}else{
	header('location: comments.php');
}

بعد از آپدیت status کاربر مدیر را به فایل viewcomment.php ریدایرکت می کنیم .

۸ – حذف نظر

لینک delete را در فایل viewcomments.php با کد زیر جایگزین کنید . در این کد id مورد نظر را در url پاس می دهیم .

<a href="delcomment.php?id=<?php echo $r['id']; ?>">Del</a>

فایل ‌delcomment.php

در این فایل با استفاده از id کامنت مورد نظر را از دیتابیس حذف می کنیم و در نهایت کاربر را به صفحه veiwcomment.php هدایت می کنیم .

if(isset($_GET['id']) &amp; !empty($_GET['id'])){
	$id = intval($_GET['id']);

	$delsql="DELETE FROM `comments` WHERE id=$id";
	if(mysqli_query($connection, $delsql)){
		header("Location: viewcomments.php");
	}
}else{
	header('location: viewcomments.php');
}

۹ – نمایش کامنت ها با عکس پروفایل

کد های زیر را در فایل displaycomments.php ذخیره کنید . در این فایل لیست تمامی نظرات ثبت شده را با تصویر گراواتار نمایش می دهیم .

<div class="panel panel-default">
<div class="panel-heading">Comments</div>
  <div class="panel-body">
  <?php 
  	$comsql = "SELECT * FROM comments";
  	$comres = mysqli_query($connection, $comsql);
  	while($comr = mysqli_fetch_assoc($comres)){
  		$hash = md5( strtolower( trim( $comr['email'] ) ) );
		$size = 150;
  		$grav_url = "https://www.gravatar.com/avatar/" . $hash . "?s=" . $size;
  ?>
  	<div class="row">
  		<div class="col-md-3">
  			<img src="<?php echo $grav_url; ?>">
  		</div>
  		<div class="col-md-9">
  			<p><strong><?php echo $comr['name']; ?></strong> </p>
  			<p><?php echo $comr['submittime'] ?></p>
  			<p><?php echo $comr['subject']; ?></p>
  		</div>
  	</div>
  	<br>
  	<?php } ?>
  </div>
</div>

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

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

برو بالا