آموزش ساخت پنل کاربری در php ثبت نام ، ورود ، فراموشی رمز عبور ، تایید ایمیل کاربر

آموزش ساخت پنل کاربری در php ثبت نام ، ورود ، فراموشی رمز عبور ، تایید ایمیل کاربر

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

این پروژه ی آموزشی شامل 8 بخش می باشد که به ترتیب :

1- ثبت نام کاربر با PHP و Mysql
2- تایید کاربر بر اساس ایمیل با PHP و Mysql
3- فرم لاگین (login) کاربر با PHP و Mysql
4- ساخت صفحه پروفایل کاربر و ویرایش آن با PHP و Mysql
5- دریافت گراواتار کاربر با PHP
6- گزارش گیری کاربران با PHP و Mysql
7- ساخت سیستم بازیابی رمزعبور کاربر با PHP و Mysql
8- کدنویسی خروج از حساب کاربری (Log-out) در PHP

برای درک بهتر می توانید لینک دانلود پروژه کامل پنل کاربری را دریافت کنید .


دقت داشته باشید که برای استفاده از حداکثر کارایی برنامه با PHP 7 + اجرا کرده و بر روی هاست و دامنه اجرا شود تا برای ارسال ایمیل با مشکل مواجه نشوید .

0- محدودیت دسترسی کاربران

در ابتدا 2 حالت وجود دارد
حالت اول کاربر وارد حساب کاربری خود شده باشد files_can_load_in_login
حالت دوم کاربر به صورت میهمان وارد files_can_load_in_guest

صفحات را با استفاده از action که در url داده می شود بارگذاری می کنیم


همچنین باید برای اولین که برنامه بارگذاری می شود table های مورد نظر را وارد دیتابیس کند از طریق فایل install.php

2 جدول وجود دارد :

1- users
2- user_token

users برای کاربران و مشخصات است و user_token برای token هایی که برای کاربر ساخته می شود .

define("DSPR", DIRECTORY_SEPARATOR);
define("ABSPATH", __DIR__ . DIRECTORY_SEPARATOR);
define("HTTP_ROOT", "http://{$_SERVER['SERVER_NAME']}");
define("WEBSITE_NAME" , str_replace(["http://" , "https://"] , "" , HTTP_ROOT));

require_once ABSPATH . "inc" . DSPR . "class-loader.php";

$db = new DB();

$file_list = scandir(ABSPATH);

if (in_array("install.php", $file_list)) {
	require_once ABSPATH . "install.php";
	header("Refresh: 1");
	exit();
}

date_default_timezone_set("Asia/Tehran");


$file_to_action = $_GET['action'] ?? "login";
$file_to_action .= ".php";

$all_files_can_load = ["view-profile.php", "list-users.php", "expire.php", "edit-profile.php", "forgot-password.php", "login.php", "signup.php", "verify.php", "new-password.php"];

$files_can_load_in_guest = ["forgot-password.php", "login.php", "signup.php", "verify.php", "new-password.php" , "view-profile.php"];

$files_can_load_in_login = [
	"edit-profile.php",
	"expire.php",
	"list-users.php",
	"view-profile.php"
];

$is_logged_in = UserVerify::verify_user_by_session();

$files_can_load = $is_logged_in ? $files_can_load_in_login : $files_can_load_in_guest;


if (in_array($file_to_action, $files_can_load))
	require_once $file_to_action;
elseif (in_array($file_to_action, $all_files_can_load)) {
	$direct_to = HTTP_ROOT;
	if ($is_logged_in) $direct_to = "{$direct_to}?action=view-profile";
	else $direct_to = "{$direct_to}?action=login";
	header("Location: {$direct_to}");
} else {
	header("HTTP/1.0 404 Not Found");
	echo "404";
}


1- ثبت نام کاربر با PHP و Mysql

public static function handler_signup()
  {
    $post_data = array_filter($_POST);

    if (4 <= count($post_data)) {

      # Validation

      $validate_fullname = Helper::validate_fullname($post_data['fullname']);
      $validate_email = filter_var($post_data['email'], FILTER_VALIDATE_EMAIL);
      $validate_username = preg_match("/^[a-zA-Z0-9]+([_.]?[a-zA-Z0-9])*$/", $post_data['username']);
      $is_valid = Helper::validate_password($post_data['password']);

      if (!$validate_fullname['is_valid'])
        $msg = "نام کامل معتبر نمی باشد";
      else if (!$validate_email)
        $msg = "ایمیل معتبر نمی باشد";
      else if (!$validate_username)
        $msg = "نام کاربری معتبر نمی باشد";
      else if ($post_data['password'] !== $post_data['re-password'])
        $msg = "رمزعبور وارد شده یکی نیست !";
      else if (!$is_valid)
        $msg = "رمزعبور معتبر نمی باشد";


      # check is username or email exist

      $post_data['username'] = strtolower($post_data['username']);
      $post_data['email'] = strtolower($post_data['email']);

      $is_username_exist = $GLOBALS['db']->row_exist(["table" => "users", "content" => "username=?", "types" => "s", "values" => [$post_data['username']]]);
      $is_email_exist = $GLOBALS['db']->row_exist(["table" => "users", "content" => "email=?", "types" => "s", "values" => [$post_data['email']]]);


      if ($is_email_exist)
        $msg = "این ایمیل از قبل انتخاب شده";
      else if ($is_username_exist)
        $msg = "این نام کاربری از قبل انتخاب شده";


      if (!empty($msg)) {
        $_GET['msg'] = $msg;
        return $post_data;
      }
    } else {
      if (empty($_GET['msg'])) {
        $_GET['msg'] = 'تمامی فیلد ها اجباری است !';
        return $post_data;
      }
    }

    $current_timestamp = time();
    $post_data['password'] = password_hash($post_data['password'], PASSWORD_BCRYPT);
    $inserted_id = $GLOBALS['db']->row_insert(["table" => "users", "content" => "(username , email , password , fullname , time_created , time_updated) VALUES (? , ? , ? , ? , ? , ?)", "types" => "ssssss", "values" => [$post_data['username'], $post_data['email'], $post_data['password'], $validate_fullname['validated'], $current_timestamp, '']]);

    if ($inserted_id) {
      $direct_to = HTTP_ROOT . "?action=verify&type=acc&username={$post_data['username']}";
      header("Location: {$direct_to}");
    } else
      $_GET['msg'] = 'خطا در ارتباط';


    return $post_data;
  }

در ابتدا ورودی های کاربر را اعتبار سنجی می کنیم و سپس در صورت که معتبر نبود پیغام مرتبط با آن را نمایش می دهیم در غیر اینصورت ادامه روند .

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

در صورتی که بخش نهایی یعنی وارد کردن اطلاعات کاربر به دیتابیس رسید یعنی کاربر می تواند به راحتی ثبت نام کند و آن را به صفحه تایید ایمیل دایرکت می کنیم .

ثبت نام کاربر با PHP و Mysql
ثبت نام کاربر با PHP و Mysql


2- تایید کاربر بر اساس ایمیل با PHP و Mysql

public static function handler_verify_acc($get_data)
  {
 
    global $current_timestamp, $expire_timestamp;
 
    $is_username_confirmed = $GLOBALS['db']->row_exist(["table" => "users", "content" => "username=? AND verified=?", "types" => "ss", "values" => [$get_data['username'], 1]]);
 
    if (!$is_username_confirmed) {
 
      $acc_token = $get_data['token'] ?? false;
 
 
      // user visit auth page
      if (!empty($acc_token)) {
        $is_token_valid = $GLOBALS['db']->row_exist(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire and="" checked="?" token="?"," "types"=""> "sssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0, $acc_token]]);
        if ($is_token_valid) {
          $GLOBALS['db']->row_update(["table" => "user_token", "content" => "checked=? WHERE token=?", "types" => "ss", "values" => [1, $acc_token]]);
          $GLOBALS['db']->row_update(["table" => "users", "content" => "verified=? , time_updated=? WHERE username=?", "types" => "sss", "values" => [1, $current_timestamp, $get_data['username']]]);
          global $description_verify;
          $description_verify = ["title" => "فعال", "description" => "حساب کاربری تان با موفقیت فعال شد (:"];
        } else
          $_GET['msg'] = 'توکن داده شده معتبر نیست';
 
        return $get_data;
      }
 
 
      $is_token_generated = $GLOBALS['db']->row_exist(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire and="" checked="?" limit="" 1",="" "types"=""> "ssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0]]);
 
      $user_db_data = Helper::select_user_by_uname($get_data['username']);
      $user_db_data = $user_db_data[0];
 
 
      if (!$is_token_generated)
        UserVerify::verify_data_to_send($user_db_data, $get_data['username'], $get_data['type'], $current_timestamp, $expire_timestamp, "تایید حساب کاربری در رپید کد");
    } else
      $_GET['msg'] = "حساب کاربری تان از قبل تایید شده است";
 
    return $user_db_data ?? false;
  }

ابتدا بررسی می کنیم که آیا کاربر از طریق لینکی که به ایمیل آن ارسال شده آمده ، که اگر اینطور بود token آن را بررسی کند دقت داشته باشید که توکن داده شده تا 1 ساعت معتبر است .

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

تایید کاربر بر اساس ایمیل با PHP و Mysql
تایید کاربر بر اساس ایمیل با PHP و Mysql


3- فرم لاگین (login) کاربر با PHP و Mysql

public static function handler_login()
  {
    $post_data = array_filter($_POST);
    if (!empty($post_data['username']) && !empty($post_data['password'])) {
      $remember_check = !empty($post_data['remember']) && $post_data['remember'] === "yes" ? true : false;
      $user_db_data = Helper::select_user_by_uname($post_data['username']);
      $user_db_data = $user_db_data ? $user_db_data : Helper::select_user_by_email($post_data['username']);

      if ($user_db_data) {
        $user_db_data = $user_db_data[0];
        $user_valid = password_verify($post_data['password'], $user_db_data['password']);
        if ($user_valid) {
          $is_user_confirmed = boolval($user_db_data['verified']);
          if ($is_user_confirmed) {
            $current_timestamp = time();
            $expire_timestamp = null;
            $days = 90;
            $username = $user_db_data['username'];

            if ($remember_check) $expire_timestamp = $current_timestamp + 86400 * $days;

            $token_db = $GLOBALS['db']->row_select(["table" => "user_token", "content" => "type=? AND ?<time_expire AND username=? LIMIT 1", "types" => "sss", "values" => ['user_session', $current_timestamp, $username]]);

            $session_token = false;

            if ($token_db) {
              $session_token = $token_db[0]['token'];
            } else {
              $session_token = UserVerify::set_user_session_db($username,$current_timestamp, $expire_timestamp, $days); 
            }

            $user_token = ["username" => $username, "session_token" => $session_token , "expire" => $expire_timestamp];
            $user_token = json_encode($user_token);

            UserVerify::set_user_session($user_token, $expire_timestamp);

            $direct_to = HTTP_ROOT . "?action=view-profile";
            header("Location: {$direct_to}");
          } else {
            $_GET['msg'] = "حساب کاربری ثبت گردیده اما تایید نشده برای تایید می توانید از فراموشی رمزعبور استفاده کنید";
          }
        } else
          $_GET['msg'] = "نام کاربری یا رمزعبور صحیح نمی باشد";
      } else
        $_GET['msg'] = "نام کاربری یا رمزعبور صحیح نمی باشد";
    } else if (!empty($post_data['test'])) {
      $_GET['msg'] = "نام کاربری یا رمزعبور وارد نشده";
    }
  }

ابتدا کاربر را با استفاده از email یا username در دیتابیس جستجو می کنیم در صورتی که یافت شد رمز ورود آن را بررسی می کنیم اگر صحیح بود ادامه روند .

بعد از آن می رسیم به این که آیا کاربر ایمیل خود را تایید کرده است یا خیر در صورتی که تایید کرده بود یک session با مدت اعتبار 90 روز برای کاربر در دیتابیس می سازیم .

همچنین اگر کاربر تیک “مرا به خاطر بسپار” را زده بود کوکی را تا 90 روز تایید می کنیم در غیر اینصورت به صورت session آن می سازیم که در صورت بسته شدن مرورگر پاک شود .

دقت داشته باشید که در هر بار بارگذاری صفحه کوکی های کاربر که شامل session_token می باشد را در فایل index.php با کمک متود UserVerify::verify_user_by_session بررسی می کنیم .

فرم لاگین (login) کاربر با PHP و Mysql
فرم لاگین (login) کاربر با PHP و Mysql


4- ساخت صفحه پروفایل کاربر و ویرایش آن با PHP و Mysql به همراه 5- دریافت گراواتار کاربر با PHP

پروفایل کاربر

public static function handler_view_profile()
  {
    $user_data = ['date_register' => '', 'fullname' => '', 'username' => '', 'email' => '', 'is_user_profile' => false];

    if (isset($_GET['uname'])) {
      $uname = $_GET['uname'];
    } else if (!empty($GLOBALS['temp_user_data'])) {
      $user_tmp = $GLOBALS['temp_user_data'];
      $uname = $user_tmp['uname'];
      $user_data['is_user_profile'] = true;
    } else {
      $_GET['msg'] = "کاربر داده شده معتبر نیست";
      return false;
    }


    $user_db_data = Helper::select_user_by_uname($uname);
    if ($user_db_data) {
      $user_db_data = $user_db_data[0];
      $user_data['date_register'] = date("Y/m/d | H:i:s", intval($user_db_data['time_created']));
      $user_data['fullname'] = $user_db_data['fullname'];
      $user_data['username'] = $user_db_data['username'];
      $user_data['email'] = $user_db_data['email'];
    } else {
      $_GET['msg'] = "کاربر مورد نظر یافت نشد";
      return false;
    }

    return $user_data;
  }

پروفایل کاربر شامل 3 بخش است :

1- نام کاربری
2- نام کامل
3- تاریخ ثبت نام

از خط 5 تا 14 : uname همان username به صورت مختصر است .
در شرط اول بررسی می کنیم که آیا نام کاربری از طریق query string به نام uname داده شده است .
در شرط دوم بررسی می کنیم که آیا uname از طریق cookie های کاربر وارد شده اگر شرط true بود is_user_profile را true می دهیم تا لینک ویرایش و خروج از حساب را فعال کنیم .
آخرین شرط در صورتی که uname دریافت نکردیم پیغام خطای مورد نظر را چاپ می کنیم .

نام کاربری را در دیتابیس جستجو کرده و در صورتی که یافت شده تاریخ ثبت نام را با فرمت دلخواه باسازی می کنیم در غیر اینصورت پیغام کاربر مورد نظر یافت نشد را می دهیم .

ساخت صفحه پروفایل کاربر در PHP
ساخت صفحه پروفایل کاربر در PHP


پیدا کردن گراواتار کاربر بر اساس ایمیل

آموزش ساخت پنل کاربری در php

$user_email_hash = md5(strtolower(trim($user_data['email'])));
$user_gravatar = "https://secure.gravatar.com/avatar/{$user_email_hash}?s=80&d=mm";

user_email_hash همان ایمیل کاربر است که که هش شده و با استفاده از secure.gravatar.com/avatar آن را دریافت می کنیم .
s? اندازه تصویر است و d در صورتی که تصویر یافت نشد پیشفرض چه تصویری برگرداند

ویرایش پروفایل کاربر

شامل 4 بخش است :

1- نام کامل
2- رمز فعلی
3- رمز جدید
4- تکرار رمز جدید

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

public static function handler_edit_profile()
  {
    $username = $GLOBALS['temp_user_data']['uname'];
    $expire_timestamp_session = $GLOBALS['temp_user_data']['expire'];

    $user_db_data = $GLOBALS['db']->row_select(["table" => "users", "content" => "username=? LIMIT 1", "types" => "s", "values" => [$username]]);
    $user_db_data = $user_db_data[0];

    $password = $user_db_data['password'];
    $fullname = $user_db_data['fullname'];

    $post_data = $_POST;
    $prefix_msg = "عدم بروزرسانی اطلاعات : ";
    $msg = "";
    $password_changed = false;

    if (!empty($post_data['fullname'])) {

      $validate_fullname = Helper::validate_fullname($post_data['fullname']);


      if (!empty($post_data['password']) || !empty($post_data['new-password']) || !empty($post_data['re-new-password']))
        $password_changed = true;

      if (!$validate_fullname['is_valid'])
        $msg = "نام کامل معتبر نیست";
      elseif ($password_changed && (empty($post_data['password']) || empty($post_data['new-password']) || empty($post_data['re-new-password'])))
        $msg = "هر 3 ورودی رمز را کامل وارد کنید";
      elseif ($password_changed && !password_verify($post_data['password'], $password))
        $msg = "رمز فعلی صحیح نمی باشد";
      elseif ($password_changed && $post_data['new-password'] !== $post_data['re-new-password'])
        $msg = "رمزعبور جدید با تکرار آن همخوانی ندارد";
      elseif ($password_changed && !Helper::validate_password($post_data['new-password']))
        $msg = "رمزعبور جدید معتبر نیست";
      else {

        $current_timestamp = time();
        

        if ($password_changed) {
          $password = password_hash($post_data['new-password'], PASSWORD_BCRYPT);
          $expire_timestamp_session = is_null($expire_timestamp_session) ? null : $expire_timestamp_session;
          $db_days = 90;
          Helper::invalid_session_token_db($username);
          $session_token = UserVerify::set_user_session_db($GLOBALS['temp_user_data']['uname'],$current_timestamp, $current_timestamp + 86400 * $db_days , $db_days);
          $user_token = ["username" => $username, "session_token" => $session_token , "expire"=> $expire_timestamp_session];
          $user_token = json_encode($user_token);
          UserVerify::set_user_session($user_token, $expire_timestamp_session);
        }

        $fullname = $validate_fullname['validated'];

        $GLOBALS['db']->row_update(["table" => "users", "content" => "fullname=? , password=? , time_updated=? WHERE username=?", "types" => "ssss", "values" => [$fullname, $password, $current_timestamp, $username]]);

        $prefix_msg = "موفق : ";
        $msg = "تغییرات با موفقیت اعمال شد";
      }
    } else
      $msg = "نام کامل خالی است";



    if ($msg && !empty($post_data['test']))
      $_GET['msg'] = $prefix_msg . $msg;

    return $fullname;
  }

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

ساخت صفحه ویرایش پروفایل کاربر در PHP
ساخت صفحه ویرایش پروفایل کاربر در PHP


6- گزارش گیری کاربران با PHP و Mysql

public static function handler_list_users()
  {

    $list_users = [];

    if (isset($GLOBALS['temp_user_data'])) {
      $users = $GLOBALS['db']->row_select(["table" => "users", "content" => "1=? ORDER BY `id` ASC", "types" => "s", "values" => [1]]);

      foreach ($users as $user) {
        $list_users[] = $user;
      }
    } else
      $_GET['msg'] = "برای مشاهده کاربران وارد شوید";

    return $list_users;
  }
گزارش گیری کاربران با PHP و Mysql
گزارش گیری کاربران با PHP و Mysql

آموزش ساخت پنل کاربری در php

7- ساخت سیستم بازیابی رمزعبور کاربر با PHP و Mysql

public static function handler_verify_acc_reset($get_data)
  {
    global $current_timestamp, $expire_timestamp;

    $acc_reset_token = $get_data['token'] ?? false;

    if (!empty($acc_reset_token)) {
      $is_token_valid = $GLOBALS['db']->row_exist(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire AND checked=? AND token=?", "types" => "sssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0, $acc_reset_token]]);
      if ($is_token_valid) {
        $GLOBALS['db']->row_update(["table" => "user_token", "content" => "checked=? WHERE token=?", "types" => "ss", "values" => [1, $acc_reset_token]]);
        $user_db_data = Helper::select_user_by_uname($get_data['username']);
        $user_email = $user_db_data[0]['email'];
        $token = UserVerify::generate_token($user_email, $current_timestamp);
        $expire_timestamp = $current_timestamp + 300;
        $GLOBALS['db']->row_insert(["table" => "user_token", "content" => "(type , username , token , time_created , time_expire , time_sent) VALUES (? , ? , ? , ? , ? , ?)", "types" => "ssssss", "values" => ['npwd', $get_data['username'], $token, $current_timestamp, $expire_timestamp, $current_timestamp]]);

        $direct_to = HTTP_ROOT . "?action=new-password&token={$token}";
        header("Location: {$direct_to}");
      } else
        $_GET['msg'] = 'توکن داده شده معتبر نیست';

      return $get_data;
    }


    $is_token_generated = $GLOBALS['db']->row_exist(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire AND checked=? LIMIT 1", "types" => "ssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0]]);
    $user_db_data = Helper::select_user_by_uname($get_data['username']);
    $user_db_data = $user_db_data[0];


    if (!$is_token_generated)
      UserVerify::verify_data_to_send($user_db_data, $get_data['username'], $get_data['type'], $current_timestamp, $expire_timestamp, "بازگردانی رمزعبور در رپید کد");
    else {
      $token_db = $GLOBALS['db']->row_select(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire AND checked=? LIMIT 1", "types" => "ssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0]]);
      $token = $token_db[0];
      $temp_next_request = intval($token['time_sent']);
      $next_request = $current_timestamp - $temp_next_request;
      $time_per_request = 1200;

      if ($next_request < $time_per_request) {
        $temp_next_request = $temp_next_request + $time_per_request;
        $temp_next_request = date("H:i:s ⏺ Y/m/d", $temp_next_request);
        $_GET['msg'] = "امکان ارسال مجدد درخواست از {$temp_next_request} به بعد وجود دارد";
        return;
      }
      $token = $token['token'];
      $GLOBALS['db']->row_update(["table" => "user_token", "content" => "time_sent=? WHERE token=?", "types" => "ss", "values" => [$current_timestamp, $token]]);
      $link = UserVerify::verify_link($get_data['username'], $get_data['type'], $token);
      UserVerify::send_mail(1, $get_data['type'], $user_db_data['email'], "بازگردانی رمزعبور در رپید کد", $user_db_data['fullname'], $link);
    }

    global $description_verify;
    $description_verify = ["title" => "تایید ایمیل", "description" => "جهت بازگردانی رمزعبور ایمیل خود را بررسی کنید ( لینک ارسال شده تا 1 ساعت معتبر است )"];


    return $user_db_data ?? false;
  }

1- در ابتدا بررسی می کنیم که آیا کاربر با لینک داده شده به ایمیل به این صفحه میاد با استفاده از query string که برای token تعریف کردیم . در صورتی که معتبر بود یک token جدید با اعتبار 5 دقیقه ساخته و به فرم تغییر رمز جدید ارسال می کنیم ( کاربر 5 دقیقه وقت دارد تا رمز جدیدی انتخاب کند )

2- در صورتی که کاربر برای اولین درخواست بازگردانی رمز جدید می کند توکن برای آن ساخته و ارسال می شود.

3- اما اگر برای دومین بار کاربر درخواست بازگردانی رمز جدید می کند از آخرین ارسال ایمیل اگر 20 دقیقه گذشته بود مجدد لینک بازگردانی برای آن ایمیل شود در غیر اینصورت از زمان آخرین ارسال ایمیل باید 20 دقیقه بگذرد تا بتواند درخواست جدید ثبت کند .

ساخت سیستم بازیابی رمزعبور کاربر با PHP و Mysql
ساخت سیستم بازیابی رمزعبور کاربر با PHP و Mysql


8- کدنویسی خروج از حساب کاربری (Log-out) در PHP

public static function remove_auth_session()
{
 setcookie('auth_token', '', time() - 3600);
}
Helper::remove_auth_session();
$direct_to = HTTP_ROOT . "?action=login";
header("Location: {$direct_to}");

کوکی auth_token که برای اعتبارسنجی کاربر است را پاک کرده و به صفحه ورود ارجاع می دهیم .

کدنویسی خروج از حساب کاربری (Log-out) در PHP
کدنویسی خروج از حساب کاربری (Log-out) در PHP


قبل از استفاده وارد پوشه inc شده و فایل db.php را متناسب با سرور تان تنظیم کنید .

دانلود پروژه پنل کاربری حرفه ای در PHP

آموزش ساخت پنل کاربری در php

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

لیست نظرات

  1. زهرا
    زهرا

    سلام مجدد یه سوال دیگه هم داشتم. این فرم های ثبت نام هستند که به صورت کلی یه سری اطلاعات زیاد می‌گیرند و درکنارش هم عکس کاربر می‌گیرند و در نهایت گوشه صفحه عکس کاربر هم نمایش داده میشه. این مدل فرم ها چطوری میشه زد؟ خیلی سرچ کردم ولی تیکه تیکه کدها بودند و واضح جایی نبود. شاید هم من درست سرچ نمی‌کردم.

    20 بهمن 1400 | 21:39:48
  • حسین باقری
    حسین باقری

    سلام سوال جالبی بود به تا 2 الی 3 روز آینده این آموزش رو هم میذاریم . آپدیت : اینم آموزش

    21 بهمن 1400 | 14:19:14
  • زهرا
    زهرا

    سلام وقت بخیر چطوری تاریخ تولد افراد رو به صورت فارسی می‌تونیم به فرم اضافه کنیم؟ ممنون

    20 بهمن 1400 | 19:23:51
    • حسین باقری
      حسین باقری

      سلام این آموزش به کار میاد

      20 بهمن 1400 | 20:47:37
  • محمد خلیلی
    محمد خلیلی

    سلام وقت بخیر خسته نباشید. من میخوام ثبت نام کاربران و new-password و forgot-password رو کلا بردارم به صورتی که فقط یک اکانت ادمین باشه در دیتابیس admin = 1 or admin = 0 که اون بتونه از پنل حساب بسازه، مسدود کنه و پاک کنه (دیدن لیست حساب ها و تغییر اطلاعاتشون) و میخوام وقتی کاربر عادی وارد شد فقط یک پیام سلام نشان داده بشه مثلا (خودم ویرایش میکنم بعدا)، و اینکه قضیه verified اگر 0 بود به جای اینکه بگه تایید کنید بگه حساب شما مسدود شده، یه قابلیت تیکت هم میخوام خیلی مهم نیست ولی باشه خوبه، اموزش این رو میتونید بزارید؟ چون واقعا نیاز دارم نمیدونم کجا بدم برام بسازن، اگر اموزشش رو بزارید ممنون میشم، تشکر بابت اموزش خوب

    21 دی 1400 | 13:53:41
    • حسین باقری
      حسین باقری

      درود ، همین مورد کافیه که بخش های که نمی خواین رو مثل new-password فایل ش رو پاک کنید و لینک و slug که داخل سورس PHP هست رو بردارید در رابطه با سیستم تیکت بزودی در وبسایت قرار خواهد گرفت .

      21 دی 1400 | 14:11:02
  • سهیل
    سهیل

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

    13 تیر 1400 | 10:07:33
    • حسین باقری
      حسین باقری

      وارد پوشه xampp و سپس پوشه www شوید و پوشه جدید با نام web بسازید پروژه را در آن کپی کرده و وارد در مرورگر وارد آدرس : http://localhost/web شوید

      07 مرداد 1400 | 14:34:38
  • علی
    علی

    ممنونم بابت پروژه خوبتون

    31 خرداد 1400 | 14:04:57
  • hasan salehi
    hasan salehi

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

    20 خرداد 1400 | 16:06:58
    • حسین باقری
      حسین باقری

      سلام بهتره که روی دامنه مجازی لوکال یا واقعی پروژه رو تست کنید .

      07 مرداد 1400 | 14:41:56
  • امیر آبرون
    امیر آبرون

    ممنون از مینی پروژه خوب وکاملتون

    06 خرداد 1400 | 15:32:50
  • mohammad
    mohammad

    سلام فایل install.php رو چطوری توی php my admin ایمپورت کنم؟

    29 فروردین 1400 | 14:15:40
    • حسین باقری
      حسین باقری

      درود نیازی به این کار نیست کافیه که پوشه پروژه رو داخل www کپی کنید با نام panel یا هر نامی که دوست دارید و با مرورگر وارد : http://localhost/panel بشید .

      27 اردیبهشت 1400 | 16:55:42
  • علی جمالی
    علی جمالی

    سلام من توی سیستم میزنم ساخت حساب کاربری میره به صفحه localhostچیکار کنم ادرس signup.php که میدم وقتی وارد صفحه میشه همه جا سفیده

    26 فروردین 1400 | 12:59:28
    • حسین باقری
      حسین باقری

      درود به پاسخی که به mohammad داده شد دقت کنید

      27 اردیبهشت 1400 | 17:08:20
  • parsa
    parsa

    سلام, من لیستی از غذاها را بصورت منو در سمت چپ دارم و در سمت راست یک مربع که خاصیت فیکس دارد. می خواهم وقتی که روی منوی غذاها کلیک می شود, جمع حساب آن در سمت راست روی کادر نمایش داده شود. اگر لطف کنید و من را راهنمایی کنید حد اقل سیصد هزار تومان و اگر راهنمایی جامع باشد؛ تا پانصد هزار تومان می پردازم. بسیار متشکرم. ایمیل من: parsa.*****beik@gmail.com

    01 اسفند 1399 | 18:56:08
    • حسین باقری
      حسین باقری

      درود و احترام . کار زیاد سختی نیست کافی هست مقدار آیتم ها رو با query جمع آوری کرده و جمع نهایی بزنید .

      06 اسفند 1399 | 16:34:35
  • علیرضا
    علیرضا

    عالییییییییییییییییییییییییییی

    24 دی 1399 | 17:03:39
  • امین
    امین

    دیتابیس چی بسازیم

    20 مهر 1399 | 23:18:42
    • حسین باقری
      حسین باقری

      مطمئن شوید که از آخرین نسخه پی اچ پی استفاده می کنید و دیتابیس را هم نام با آموزش بسازید .

      13 آذر 1399 | 18:24:39
  • امین
    امین

    سلام چرا این کلا ارور میده

    20 مهر 1399 | 23:12:02
  • Sajjad
    Sajjad

    سلام در بعضی از خطوط از ?? استفاده شده که توسط php ناشناخته است. باید چه گاری انجام بدیم؟

    04 مهر 1399 | 14:50:23
    • حسین باقری
      حسین باقری

      مطمئن شوید که از آخرین نسخه پی اچ پی استفاده می کنید .

      13 آذر 1399 | 18:25:35
  • سید محمد علی حسینی
    سید محمد علی حسینی

    سلام.دوست عزیز امکان داره برام تو هاستم نصب کنید

    26 مرداد 1399 | 14:47:04
  • contact us