آموزش ساخت پنل کاربری در 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 ورودی کاربر یعنی ایمیل و نام کاربری که منحصر به فرد است را بررسی می کنیم در صورت که در پایگاه داده مان وجود داشت پیغام ایمیل یا نام کاربری از قبل وجود داشته را نمایش می دهیم .
در صورتی که بخش نهایی یعنی وارد کردن اطلاعات کاربر به دیتابیس رسید یعنی کاربر می تواند به راحتی ثبت نام کند و آن را به صفحه تایید ایمیل دایرکت می کنیم .
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 هدایت شده بررسی می کنیم از قبل توکن معتبر برای آن ساخت شده یا خیر ، در صورتی که وجود داشت آن را به ایمیل ارسال می کنیم در صورت که وجود نداشته یکی ساخت و ارسال می کنیم .
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 بررسی می کنیم .
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
$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 جدید می سازد .
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
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 دقیقه بگذرد تا بتواند درخواست جدید ثبت کند .
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 که برای اعتبارسنجی کاربر است را پاک کرده و به صفحه ورود ارجاع می دهیم .
قبل از استفاده وارد پوشه inc شده و فایل db.php را متناسب با سرور تان تنظیم کنید .
دانلود پروژه پنل کاربری حرفه ای در PHP
آموزش ساخت پنل کاربری در php
لیست نظرات
تمام توضیحات عالی بود
سلام. خسته نباشید من فایل رو اجرا کردم اطلاعات در دیتابیس ثبت میشه اما خطا در ارتباط میده و ایمیل اعتبار سنجی ارسال نمیشه. یه سوال دیگه هم داشتم برای ثبت نام آی دی رو در فایل class-db صفر تعیین کردین حالا اگه دونفر باهم ثبت نام کنن و ایمیل تایید رو نزنن کلا ارور میده !
درود ، ساشا در مقاله هم ذکر شده که حتما باید از هاست واقعی برای تست ارسال ایمیل در برنامه استفاده کنید البته بعضی از هاستینگ ها تابع mail به درستی کار نمی کنه که باید از PHPMailer استفاده کنید . اون عدد صفر یعنی ایمیل تایید نشده ، اگر بخشی اعتبار سنجی ایمیل تکمیل بشه برنامه باید به درستی کار کنه .
بسیار عالی
سلام و ممنون خیلی ممنون از آموزش کامل و خوبتون من سورس کد رو دانلود کردم ولی ارور PHP network db.class line12رو میده ممنون میشم راهنمایی کنید MySQL فعال هستش MyphpAdmin درست کار میکنه ولی ارور PHP network db.class line 12رو میده جدول ها هم ساختم و درست هستش PHP network db.class line 12 چی هست این؟؟؟
درود ، دلایل خطا می تونه یکی یا چندی از این موارد باشه :
پس از وارد کردن آدرسم تونستم دانلود کنم بابت برنامه خیلی ممنونم
سلام من میخواهم سایت فروشگاه اینترنتی بسازم که که صفحه لاگین داشته باشد که وقتی کاربر در آن لاگین میکند در صفحه خودش هدایت شود و وارد پروفایل کاربری خودش شود که بتواند در آن خدماتی مانند : خرید کردن ثبت آگهی اضافه کردن محصول به سبد خرید و... را انجام دهد کدی هست که به من در این زمینه کمک کند
درود ، این سیستمی که در نظر دارید یک فروشگاه اینترنتی هست که سیستم ثبت نام و لاگین فقط یک قسمت از اون حساب میشه .
سلام MySQL من فعال هست ولی این ارور رو میده :()MySQL__construc PHP_network_getaddres:getadrinfo No such host
درود ، فکر می کنم هاست mysql رو اشتباه دادید باید localhost یا 127.0.0.1 باشه .
سلام و ممنون خیلی ممنون از آموزش کامل و خوبتون من سورس کد رو دانلود کردم ولی ارور PHP network db.class line12رو میده ممنون میشم راهنمایی کنید
درود ، احتمالا mysql تون فعال نیست برای اینکه مطمئن بشید درست کار می کنه وارد آدرس http://localhost/phpmyadmin بشید اگر صفحه phpmyadmin رو مشاهده کردید یعنی mysql فعال هست .
سلام وقت بخیر . چطور میشه session رو همیشه آنلاین نگه داشت و با بسته شدن مرورگر یا قطع اینترنت و هرچیزی session استپ نشه و مجدد لاگین نخواد.
به طور کلی زمانی که "مرا به خاطر بسپار" انتخاب می شه به صورت کوکی ذخیره میشه و اگر مرورگر بسته بشه و مجددا برگرده باز هم لاگین شده خواهد بود . البته توجه داشته باشید که نباید در حالت incognito یا privacy مرورگر باشید .
من هنوز دوره رو ندیدم احازه دانلود بهم نمیده
این دوره نیست بلکه سورس پنل کاربری برای PHP هست ، امکان دانلود وجود داره فقط باید ثبت نام سپس دانلود کنید ( سورس رایگان هست )
سلام نوشته بودید با کاربر مهمان هم میشه وارد شد چکار باید کرد که این گزینه فعال بشه . و سوال دوم اینکه راهی داره که بشه فایلهارو تو روت هاست نصب نکرد و داخل فولدری برد ؟
درود ، 1- در متغیر files_can_load_in_guest لیست فایل هایی می شه کاربر میهمان وارد اون بشه مثل فراموشی رمز عبور ، مشاهده پروفایل دیگر کاربران 2- بله میشه اما باید مطابق فولدری که تنظیم کردید url های داخل سورس رو تغییر بدید .
خوب بود
سلام وقت بخیر میشه فقط با یه ایمیل خاص بشه وارد شد مثلا ما یه سرویس ایمیل دهی خاص بزنیم که فقط با اون وارد بشن( نه با یاهو و جیمیل) ؟
درود ، بله نمونه این که با ایمیل از دامنه خاص فقط قبول کنه سیستم در این آموزش پیاده سازی کردیم .
سلام ببخشید من فایل رو خواستم دانلود کنم و به صفحه ی ثبت نام منتقل شدم و پیام داد برای تایید ایمیل به سرویس ایمیل خود سر بزنید من چک کردم ولی هیچ ایمیلی در اینباکس و یا اسپم و درفت نبود چکار کنم؟
این برنامه باید در root سرور نصب بشه و از example.com اجرا بشه دوم : اینکه روی هاست آنلاین باشه و کانفیگ ایمیل هاست فعال باشه .
سلام وقت بخیر چگونه باید درون روت نصبش کنیم و کانفیگ ایمیل هاست رو فعال کنیم اگه به جیمیلم بفرستید ممنون میشم
در اکثر هاستینگ ها این قابلیت به طور پیشفرض فعال اگر فعال نیست باید تیکت بزنید تا براتون فعال اش کنند .