
در ادامه آموزش ساخت CMS ساده با php در خدمت شما هستیم با با ایجاد صفحه لاگین و خروج کاربران و هم چنین اعتبار سنجی کابر مدیر برای ورود به بخش مدیریت.
در ابتدا توابعی رو در فایل functions ایجاد میکنیم،این توابع وظیفه چک کردن لاگین بودن کاربر رو بر عهده دارن.
فهرست محتوای این مقاله
تابع is_user_loggedin
این تابع چک میکنه که کاربر در سایت لاگین کرده یا نه و مقدار true یا false رو برای ما برمیگردونه.
function is_user_loggedin(){ return isset($_SESSION['uid']); }
خیلی ساده چک میکنه مقدار SESSION_$ برای uid ست شده یا نه و بر اساس اون true یا false رو برمیگردونه.
تابع is_user_admin
این تابع هم مقداری از سشن رو برای کلید is_admin چک میکنه و بر اساس اون مقدار true یا false رو برمیگردونه.
function is_user_admin(){ return isset( $_SESSION['is_admin']); }
صفحه ورود
خوب حالا بعد از تعریف این توابع باید صفحه لاگین رو ایجاد کنیم.برای این کار فایلی با نام signin.php در ریشه اصلی سایت ایجاد کنید.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Simple CMS</title <!-- Bootstrap --> <link href="<?php echo site_url(); ?>css/bootstrap.css" rel="stylesheet"> <link href="<?php echo site_url(); ?>css/bootstrap-rtl.css" rel="stylesheet"> <link href="<?php echo site_url(); ?>css/bootstrap-theme.css" rel="stylesheet"> <link href="<?php echo site_url(); ?>css/style.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="row"> <div class="navbar navbar-default navbar-static-top" role="navigation"> <ul class="nav navbar-nav"> <li><a href="http://localhost:2020/CMS">خانه</a></li> <?php echo create_menu(); ?> <?php if(is_user_loggedin()): ?> <li><a href="signout.php">خروج</a></li> <?php endif; ?> </ul> </div> </div> <div class="row"> <div class="col-md-8"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">ورود به سایت</h3> </div> <div class="panel-body"> <?php if($err):?> <div class="alert alert-danger"><?php echo $msg; ?></div> <?php endif; ?> <?php if(!is_user_loggedin()): ?> <form action="" method="post" role="form" name="comments" class="form-horizontal" > <div class="form-group"> <label for="username" class="col-sm-2 control-label">نام کاربری :</label> <div class="col-sm-5"> <input type="text" class="form-control" name="username" required> </div> </div> <div class="form-group"> <label for="password" class="col-sm-2 control-label">کلمه عبور:</label> <div class="col-sm-5"> <input type="password" class="form-control" name="password" required> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" name="submit_login_form" class="btn btn-primary">ورود به سایت</button> </div> </div> </form> <?php else: ?> <div class="alert alert-success"> شما قبلا در سایت لاگین شده اید. </div> <?php endif;?> </div> </div> </div> <div class="col-md-4"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">اخرین مطالب</h3> </div> <div class="panel-body"> <ul class="posts-list"> <?php $latest = get("posts", 10); while ($post = mysql_fetch_assoc($latest)): ?> <li ><a href="view.php?p=<?php echo $post['post_ID']; ?>"><?php echo $post['post_title']; ?></a></li> <?php endwhile; ?> </ul> </div> </div> </div> </div> </div> <script src="js/jquery-1.10.2.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/script.js"></script> </body> </html>
ساختار این صفحه مشابه صفحات قبلی هستش اما خوب در بخش محتوا یه فرم برای لاگین کردن قرار میگیره.
با استفاده از تابع is_user_loggedin چک میکنیم کاربر قبلا لاگین کرده یا نه و اگه کرده باشه یه پیغام نشون میدیم و میگیم شما لاگین کردی 🙂
حالا در بالای صفحه کدهای زیر رو قرار میدیم.
require_once 'init.php'; $msg=""; $err=FALSE; if(isset($_POST['submit_login_form'])){ $username= mysql_real_escape_string($_POST['username']); $password=hash_string(mysql_real_escape_string($_POST['password'])); $query= mysql_query("SELECT * FROM users WHERE user_login='{$username}' AND user_password='{$password}' LIMIT 1"); if(mysql_num_rows($query)==1){ //Login Ok $user= mysql_fetch_assoc($query); $_SESSION['uid']=$user['user_ID']; if($user['user_level']=='admin'){ $_SESSION['is_admin']=true; redirect("admin/"); }else{ redirect("index.php"); } }else{ $msg="نام کاربری یا کمله عبور صحیح نمیباشد"; $err=true; } }
بعد از ارسال فرم یه کوئری میزنیم و اطلاعات رو از جدول user میگیرم و حالا اگه تعداد سطر برگشتی دقیقا برابر 1 بود اونوقت کارهای لاگین رو انجام میدیم.یه سشن ایجاد میکنیم و شناسه کاربری رو توش ذخیره میکنیم و چک میکنیم اگه سطح کاربر برابر admin بود سشن is_admin رو براش ست کنه اونوقت با تابع redirect به صفحه مناسب هدایتش میکنیم.
اگر اطلاعات اشتباه بود متغییرهای لازم مقدار دهی میشن و در بالای فرم پیغام خطا نمایش داده میشه.
در بخش منوی اصلی چک کردیم اگه کاربر لاگین کرده یه منو با لینک signout.php اضافه بشه که کاربر بتونه از سایت خارج بشه.
کدهای کامل صفحه ورود به این شکل در میاد.
<?php require_once 'init.php'; $msg=""; $err=FALSE; if(isset($_POST['submit_login_form'])){ $username= mysql_real_escape_string($_POST['username']); $password=hash_string(mysql_real_escape_string($_POST['password'])); $query= mysql_query("SELECT * FROM users WHERE user_login='{$username}' AND user_password='{$password}' LIMIT 1"); if(mysql_num_rows($query)==1){ //Login Ok $user= mysql_fetch_assoc($query); $_SESSION['uid']=$user['user_ID']; if($user['user_level']=='admin'){ $_SESSION['is_admin']=true; redirect("admin/"); }else{ redirect("index.php"); } }else{ $msg="نام کاربری یا کمله عبور صحیح نمیباشد"; $err=true; } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Simple CMS</title <!-- Bootstrap --> <link href="<?php echo site_url(); ?>css/bootstrap.css" rel="stylesheet"> <link href="<?php echo site_url(); ?>css/bootstrap-rtl.css" rel="stylesheet"> <link href="<?php echo site_url(); ?>css/bootstrap-theme.css" rel="stylesheet"> <link href="<?php echo site_url(); ?>css/style.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="row"> <div class="navbar navbar-default navbar-static-top" role="navigation"> <ul class="nav navbar-nav"> <li><a href="http://localhost:2020/CMS">خانه</a></li> <?php echo create_menu(); ?> <?php if(is_user_loggedin()): ?> <li><a href="signout.php">خروج</a></li> <?php endif; ?> </ul> </div> </div> <div class="row"> <div class="col-md-8"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">ورود به سایت</h3> </div> <div class="panel-body"> <?php if($err):?> <div class="alert alert-danger"><?php echo $msg; ?></div> <?php endif; ?> <?php if(!is_user_loggedin()): ?> <form action="" method="post" role="form" name="comments" class="form-horizontal" > <div class="form-group"> <label for="username" class="col-sm-2 control-label">نام کاربری :</label> <div class="col-sm-5"> <input type="text" class="form-control" name="username" required> </div> </div> <div class="form-group"> <label for="password" class="col-sm-2 control-label">کلمه عبور:</label> <div class="col-sm-5"> <input type="password" class="form-control" name="password" required> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" name="submit_login_form" class="btn btn-primary">ورود به سایت</button> </div> </div> </form> <?php else: ?> <div class="alert alert-success"> شما قبلا در سایت لاگین شده اید. </div> <?php endif;?> </div> </div> </div> <div class="col-md-4"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">اخرین مطالب</h3> </div> <div class="panel-body"> <ul class="posts-list"> <?php $latest = get("posts", 10); while ($post = mysql_fetch_assoc($latest)): ?> <li ><a href="view.php?p=<?php echo $post['post_ID']; ?>"><?php echo $post['post_title']; ?></a></li> <?php endwhile; ?> </ul> </div> </div> </div> </div> </div> <script src="js/jquery-1.10.2.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/script.js"></script> </body> </html>
صفحه خروج
فایلی با نام signout.php ایجاد کنید و کدهای زیر رو داخلش قرار بدین.
require_once 'init.php'; if(!is_user_loggedin()){ redirect("signin.php"); } $_SESSION=array(); session_destroy(); redirect("signin.php");
اگه کاربر لاگین نکرده باشه اونو به صفحه لاگین منتقل میکنیم (یا صفحه اول وب سایت) در غیر این صورت سشن رو خالی و نابود میکنیم و بعدشم منتقلش میکنیم.
اعتبارسنجی کاربر مدیر
کاربری که به عنوان مدیر وارد سایت شده باشه وقتی میخواد به صفحه مدیریت دسترسی داشته باشه باید اعتبار سنجی بشه برای اینکار ما کد زیر رو در بالای همه صفحات مدیریت اضافه میکنیم.
if(!is_user_admin()){ redirect("../signin.php"); }
این یعنی اگه کاربر مدیر نباشه اونو به صفحه لاگین هدایت میکنیم.تنها کاری که باقی میمونه اینه که در بخش مدیریت لینک خروج رو برای صفحه signout تنظیم کنیم.
خوی دوستان عزیز امیدوارم که از آموزش هم استفاده کرده باشین،براتون آرزوی موفقیت دارم.
بابت تاخیرهای به روز رسانی هم از همه کاربران عزیز عذرخواهی میکنم.موفق و پروز باشید.
فایل پروژه دانلود نمیشه ممنون می شم پیگیری بفرمائید
سلام وقتتون بخیر…لینک دانلود فایل سورس آموزش مشکل دارد ممنون میشم رسیدگی بفرمایید
سلام. نام کاربری ورود به ادمین رو چجوری تعریف کنیم؟
سلام خواسته نباشید میشه نمایش مطالب صفحه اول رو صفحه بندی کرد یعنی بعد نمایش 10 پست بقیه تو صفحه دوم نمایش داد بشه ؟
سلام بله با استفاده از یک کلاس pagination میشه همچین کاری کرد.
ممنون از پاسخ گوییتون
اما درست متوجه منظورتون نشدم اگر امکانش هست با کد نشون بدین
با تشکر
if($user_is_logged_in){
$_SESSION['userFullName'] = $currentUser->getFullName();
}
با سلام
اگر بخواهیم نام کاربری یوزر وارد شده (لاگین کرده) را در داشبورد نمایش دهیم باید از چه کدی استفاده کنیم؟
با تشکر
سلام. موقع لاگین این اطلاعات رو از دیتابیس بگیرین و داخل سشن بذارین و در هر صفحه ای خواستین نشون بدین.
سلام
پسورد رو به صورت هش ذخیره میکنید.
چجوری فراموشی رمز درست کنیم وقتی هش شده.
معمولا برای فراموشی رمز عبور یک فیلد متنی تعریف می کنند و هر وقت کاربر درخواست تغییر رمز بده یک هش داخل اون فیلد میریزن و برای کاربر هم ایمیل می کنن و کاربر با اون هش میتونه رمزش رو به روز رسانی کنه.
سلام
من برای استفاده از این آموزش ، اکانت vip خریداری کردم . اما متأسفانه این آموزش و فایل خروجی پروژه نیاز به ویرایش داره . درسته که نویسنده مطلب در سایت فعالیتی ندارد اما مطلبشون که هنوز روی سایت هست و امیدوارم که این مسئله رو سایر مدیرانی که در زمینه php فعالیت میکنند برطرف کنند .
سلام
علاوه بر بحث عدم فعالیت نویسنده، ساپورت مطالب منتشر شده 1 سال هست و این سری یکم قدیمی شده.
سلام مجدد
من در توضیحات متوجه ” ساپورت مطالب منتشر شده 1 سال هست ” شدم اما بعد از اینکه مبلغ vip پرداخت شد و به مشکل برخوردم .
اگر در بالای مطالبی که تاریخ پشتیبانی آنها منقضی شده متنی نمایش داده شود چه به صورت دستی یا اتوماتیک ، به کاربری که میخواهد برای استفاده از اطلاعات اکانت خریداری کند ، کمک بسیاری کردید.
موفق باشید.
ممنون از پیشنهادتون
سعی می کنیم این مورد رو در آینده اضافه کنیم .
سلام حداقل یک مختصری در مورد تغییرات توضیح دید تا بشه مشکلات رو رفع کرد باتشکر
سلام باید از PDO استفاده کرد و کلا در فایل functions کوئری ها رو بر این اساس ایجاد کرد.
جناب آقای آوند همکارتون گفتن که اگر وقت کنند به روز رسانی می کنند.
میشه لطف کنید بگید کی وقت می کنند تا ما منتظر باشیم ؟
من می خواستم دیگر مجموعه های آموزشی شما را در زمینه طراحی سایت تهیه کنم اما ظاهر می تونه همین مشکل هم برای دیگر مجموعه های وجود داشته باشد.
با تشکر
این آموزش واسه یک سال قبل هستش و دوره های جدید از تکنولوژی های جدید استفاده شده شما نگران این مسئله نباشید.
بزودی آپدیت خواهد شد