ساخت CMS ساده با PHP - قسمت 14 - اعتبار سنجی کاربران (قسمت آخر)

دسته بندی: آموزش
زمان مطالعه: 25 دقیقه
۲۰ مرداد ۱۳۹۳

در ادامه آموزش ساخت 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 تنظیم کنیم.

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

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

چه امتیازی به این مقاله می دید؟
نویسنده
یادگیرنده ی همیشگی،برنامه نویس،نویسنده،عاشق خلق چیزهای عجیب،عاشق تحلیل داده ها، مسئول بخش فنی و هم بنیان گذار در سون لرن.

نظرات کاربران

develop

فایل پروژه دانلود نمیشه ممنون می شم پیگیری بفرمائید

Amir Marashi

سلام وقتتون بخیر…لینک دانلود فایل سورس آموزش مشکل دارد ممنون میشم رسیدگی بفرمایید

رسول رضایی

سلام. نام کاربری ورود به ادمین رو چجوری تعریف کنیم؟

amin shenava

سلام خواسته نباشید میشه نمایش مطالب صفحه اول رو صفحه بندی کرد یعنی بعد نمایش 10 پست بقیه تو صفحه دوم نمایش داد بشه ؟

کیوان علی محمدی

سلام بله با استفاده از یک کلاس pagination میشه همچین کاری کرد.

مرتضی داودی

ممنون از پاسخ گوییتون
اما درست متوجه منظورتون نشدم اگر امکانش هست با کد نشون بدین
با تشکر

کیوان علی محمدی


if($user_is_logged_in){

$_SESSION['userFullName'] = $currentUser->getFullName();

}

مرتضی داودی

با سلام
اگر بخواهیم نام کاربری یوزر وارد شده (لاگین کرده) را در داشبورد نمایش دهیم باید از چه کدی استفاده کنیم؟
با تشکر

کیوان علی محمدی

سلام. موقع لاگین این اطلاعات رو از دیتابیس بگیرین و داخل سشن بذارین و در هر صفحه ای خواستین نشون بدین.

amirhosein rajabi

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

کیوان علی محمدی

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

Majid Hz

سلام
من برای استفاده از این آموزش ، اکانت vip خریداری کردم . اما متأسفانه این آموزش و فایل خروجی پروژه نیاز به ویرایش داره . درسته که نویسنده مطلب در سایت فعالیتی ندارد اما مطلبشون که هنوز روی سایت هست و امیدوارم که این مسئله رو سایر مدیرانی که در زمینه php فعالیت میکنند برطرف کنند .

لقمان آوند

سلام
علاوه بر بحث عدم فعالیت نویسنده، ساپورت مطالب منتشر شده 1 سال هست و این سری یکم قدیمی شده.

Majid Hz

سلام مجدد

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

موفق باشید.

لقمان آوند

ممنون از پیشنهادتون
سعی می کنیم این مورد رو در آینده اضافه کنیم .

Saba Net

سلام حداقل یک مختصری در مورد تغییرات توضیح دید تا بشه مشکلات رو رفع کرد باتشکر

کیوان علی محمدی

سلام باید از PDO استفاده کرد و کلا در فایل functions کوئری ها رو بر این اساس ایجاد کرد.

Veria Rahmani

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

کیوان علی محمدی

این آموزش واسه یک سال قبل هستش و دوره های جدید از تکنولوژی های جدید استفاده شده شما نگران این مسئله نباشید.

وحید صالحی

بزودی آپدیت خواهد شد

نیاز به لاگین

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