صفحه لاگین یکی از امکانات هر وبسایت کاربر محوری است. ساخت صفحه لاگین و ثبت نام با php بسیار آسان است . در این آموزش ، به شما نشان می دهیم چطور یک سیستم لاگین را توسط php و mysql ایجاد کنید.
اسکریپت php ما ثبت نام کاربر و ورود را با استفاده از mysql و سئشن های php ایجاد کرده است. همچنین ، اعتبارسنجی ورودی های کاربر در هنگام ثبت نام و لاگین از طریق سرور-ساید انجام می شود.
قبل از اینکه آموزش را شروع کنیم ، نگاهی به فایل های سیستم لاگین میاندازیم
User.php
– مدیریت کار های مربوط به دیتابیسUserAccount.php
– مدیریت ثبت نام ، ورود ، خروج با درخواست های کلاس UserIndex.php
– نمایش فرم لاگین / اطلاعات کاربرRegistration.php
– نمایش فرم ثبت نامStyle.css
– استایل دهی به فرم ثبت نام و لاگین
ساخت جداول دیتابیس
یک جدول برای ذخیره اطلاعات کاربران نیاز داریم. کد sql زیر یک جدول users با ستون های مورد نیاز ایجاد می کند.
1 2 3 4 5 6 7 8 9 10 11 12 |
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `first_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `phone` varchar(15) COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; |
کلاس User (user.php)
کلاس User همه کار های مربوط به دیتابیس را مدیریت می کند .
که شامل ۳ متد __construct()
، getRows()
و insert()
است . تابع __construct() برای اتصال به دیتابیس استفاده می شود . تابع getRows() برای خواندن اطلاعات کاربران از دیتابیس و تابع insert() برای اضافه کردن اطلاعات کاربران به دیتابیس هنگام ثبت نام استفاده شده است. حتما مقادیر $dbHost,$dbusername,$dbPassword,$dbName
را برای اتصال به دیتابیس تغییر بدید.
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
<?php /* * User Class * This class is used for database related (connect, fetch, and insert) operations * @author netparadis.com * @url http://www.netparadis.com */ class User{ private $dbHost = "localhost"; private $dbUsername = "root"; private $dbPassword = ""; private $dbName = "netparadis"; private $userTbl = "users"; public function __construct(){ if(!isset($this->db)){ // Connect to the database $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName); if($conn->connect_error){ die("Failed to connect with MySQL: " . $conn->connect_error); }else{ $this->db = $conn; } } } /* * Returns rows from the database based on the conditions * @param string name of the table * @param array select, where, order_by, limit and return_type conditions */ public function getRows($conditions = array()){ $sql = 'SELECT '; $sql .= array_key_exists("select",$conditions)?$conditions['select']:'*'; $sql .= ' FROM '.$this->userTbl; if(array_key_exists("where",$conditions)){ $sql .= ' WHERE '; $i = 0; foreach($conditions['where'] as $key => $value){ $pre = ($i > 0)?' AND ':''; $sql .= $pre.$key." = '".$value."'"; $i++; } } if(array_key_exists("order_by",$conditions)){ $sql .= ' ORDER BY '.$conditions['order_by']; } if(array_key_exists("start",$conditions) && array_key_exists("limit",$conditions)){ $sql .= ' LIMIT '.$conditions['start'].','.$conditions['limit']; }elseif(!array_key_exists("start",$conditions) && array_key_exists("limit",$conditions)){ $sql .= ' LIMIT '.$conditions['limit']; } $result = $this->db->query($sql); if(array_key_exists("return_type",$conditions) && $conditions['return_type'] != 'all'){ switch($conditions['return_type']){ case 'count': $data = $result->num_rows; break; case 'single': $data = $result->fetch_assoc(); break; default: $data = ''; } }else{ if($result->num_rows > 0){ while($row = $result->fetch_assoc()){ $data[] = $row; } } } return !empty($data)?$data:false; } /* * Insert data into the database * @param string name of the table * @param array the data for inserting into the table */ public function insert($data){ if(!empty($data) && is_array($data)){ $columns = ''; $values = ''; $i = 0; if(!array_key_exists('created',$data)){ $data['created'] = date("Y-m-d H:i:s"); } if(!array_key_exists('modified',$data)){ $data['modified'] = date("Y-m-d H:i:s"); } foreach($data as $key=>$val){ $pre = ($i > 0)?', ':''; $columns .= $pre.$key; $values .= $pre."'".$val."'"; $i++; } $query = "INSERT INTO ".$this->userTbl." (".$columns.") VALUES (".$values.")"; $insert = $this->db->query($query); return $insert?$this->db->insert_id:false; }else{ return false; } } } |
userAccount.php
این فایل درخواست ثبت نام ، لاگین و خروج (logout) از index.php و registration.php را کنترل می کند . کلاس User برای قرار دادن اطلاعات کاربران در جدول users استفاده می شود. همچنین ، Session ها برا لاگین نگه داشتن کاربر در سیستم به کار می رود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
<?php //start session session_start(); //load and initialize user class include 'user.php'; $user = new User(); if(isset($_POST['signupSubmit'])){ //check whether user details are empty if(!empty($_POST['first_name']) && !empty($_POST['last_name']) && !empty($_POST['email']) && !empty($_POST['phone']) && !empty($_POST['password']) && !empty($_POST['confirm_password'])){ //password and confirm password comparison if($_POST['password'] !== $_POST['confirm_password']){ $sessData['status']['type'] = 'error'; $sessData['status']['msg'] = 'Confirm password must match with the password.'; }else{ //check whether user exists in the database $prevCon['where'] = array('email'=>$_POST['email']); $prevCon['return_type'] = 'count'; $prevUser = $user->getRows($prevCon); if($prevUser > 0){ $sessData['status']['type'] = 'error'; $sessData['status']['msg'] = 'Email already exists, please use another email.'; }else{ //insert user data in the database $userData = array( 'first_name' => $_POST['first_name'], 'last_name' => $_POST['last_name'], 'email' => $_POST['email'], 'password' => md5($_POST['password']), 'phone' => $_POST['phone'] ); $insert = $user->insert($userData); //set status based on data insert if($insert){ $sessData['status']['type'] = 'success'; $sessData['status']['msg'] = 'You have registered successfully, log in with your credentials.'; }else{ $sessData['status']['type'] = 'error'; $sessData['status']['msg'] = 'Some problem occurred, please try again.'; } } } }else{ $sessData['status']['type'] = 'error'; $sessData['status']['msg'] = 'All fields are mandatory, please fill all the fields.'; } //store signup status into the session $_SESSION['sessData'] = $sessData; $redirectURL = ($sessData['status']['type'] == 'success')?'index.php':'registration.php'; //redirect to the home/registration page header("Location:".$redirectURL); }elseif(isset($_POST['loginSubmit'])){ //check whether login details are empty if(!empty($_POST['email']) && !empty($_POST['password'])){ //get user data from user class $conditions['where'] = array( 'email' => $_POST['email'], 'password' => md5($_POST['password']), 'status' => '1' ); $conditions['return_type'] = 'single'; $userData = $user->getRows($conditions); //set user data and status based on login credentials if($userData){ $sessData['userLoggedIn'] = TRUE; $sessData['userID'] = $userData['id']; $sessData['status']['type'] = 'success'; $sessData['status']['msg'] = 'Welcome '.$userData['first_name'].'!'; }else{ $sessData['status']['type'] = 'error'; $sessData['status']['msg'] = 'Wrong email or password, please try again.'; } }else{ $sessData['status']['type'] = 'error'; $sessData['status']['msg'] = 'Enter email and password.'; } //store login status into the session $_SESSION['sessData'] = $sessData; //redirect to the home page header("Location:index.php"); }elseif(!empty($_REQUEST['logoutSubmit'])){ //remove session data unset($_SESSION['sessData']); session_destroy(); //store logout status into the ession $sessData['status']['type'] = 'success'; $sessData['status']['msg'] = 'You have logout successfully from your account.'; $_SESSION['sessData'] = $sessData; //redirect to the home page header("Location:index.php"); }else{ //redirect to the home page header("Location:index.php"); } |
فرم لاگین و اطلاعات کاربر (index.php)
در ابتدا فایل index.php یک صفحه لاگین و لینک ثبت نام را نشان می دهد . بعد از لاگین ، آی دی کاربر از طریق سئشن قابل دسترس و اطلاعات کاربر از طریق کلاس User نمایش داده می شود .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?php session_start(); $sessData = !empty($_SESSION['sessData'])?$_SESSION['sessData']:''; if(!empty($sessData['status']['msg'])){ $statusMsg = $sessData['status']['msg']; $statusMsgType = $sessData['status']['type']; unset($_SESSION['sessData']['status']); } ?> <div class="container"> <?php if(!empty($sessData['userLoggedIn']) && !empty($sessData['userID'])){ include 'user.php'; $user = new User(); $conditions['where'] = array( 'id' => $sessData['userID'], ); $conditions['return_type'] = 'single'; $userData = $user->getRows($conditions); ?> <h2>Welcome <?php echo $userData['first_name']; ?>!</h2> <a href="userAccount.php?logoutSubmit=1" class="logout">Logout</a> <div class="regisFrm"> <p><b>Name: </b><?php echo $userData['first_name'].' '.$userData['last_name']; ?></p> <p><b>Email: </b><?php echo $userData['email']; ?></p> <p><b>Phone: </b><?php echo $userData['phone']; ?></p> </div> <?php }else{ ?> <h2>Login to Your Account</h2> <?php echo !empty($statusMsg)?'<p class="'.$statusMsgType.'">'.$statusMsg.'</p>':''; ?> <div class="regisFrm"> <form action="userAccount.php" method="post"> <input type="email" name="email" placeholder="EMAIL" required=""> <input type="password" name="password" placeholder="PASSWORD" required=""> <div class="send-button"> <input type="submit" name="loginSubmit" value="LOGIN"> </div> </form> <p>Don't have an account? <a href="registration.php">Register</a></p> </div> <?php } ?> </div> |
فرم ثبت نام (registration.php)
فایل حاوی فرم html ثبت نام و یک action به فایل userAccount.php است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php session_start(); $sessData = !empty($_SESSION['sessData'])?$_SESSION['sessData']:''; if(!empty($sessData['status']['msg'])){ $statusMsg = $sessData['status']['msg']; $statusMsgType = $sessData['status']['type']; unset($_SESSION['sessData']['status']); } ?> <div class="container"> <h2>Create a New Account</h2> <?php echo !empty($statusMsg)?'<p class="'.$statusMsgType.'">'.$statusMsg.'</p>':''; ?> <div class="regisFrm"> <form action="userAccount.php" method="post"> <input type="text" name="first_name" placeholder="FIRST NAME" required=""> <input type="text" name="last_name" placeholder="LAST NAME" required=""> <input type="email" name="email" placeholder="EMAIL" required=""> <input type="text" name="phone" placeholder="PHONE NUMBER" required=""> <input type="password" name="password" placeholder="PASSWORD" required=""> <input type="password" name="confirm_password" placeholder="CONFIRM PASSWORD" required=""> <div class="send-button"> <input type="submit" name="signupSubmit" value="CREATE ACCOUNT"> </div> </form> </div> </div> |
کد CSS
برای استایل دهی به به فرم لاگین و ثبت نام استفاده شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
.container { width: 40%; margin: 0 auto; background-color: #f7f7f7; color: #757575; font-family: 'Raleway', sans-serif; text-align: left; padding: 30px; } h2 { font-size: 30px; font-weight: 600; margin-bottom: 10px; } .container p { font-size: 18px; font-weight: 500; margin-bottom: 20px; } .regisFrm input[type="text"], .regisFrm input[type="email"], .regisFrm input[type="password"] { width: 94.5%; padding: 10px; margin: 10px 0; outline: none; color: #000; font-weight: 500; font-family: 'Roboto', sans-serif; } .send-button { text-align: center; margin-top: 20px; } .send-button input[type="submit"] { padding: 10px 0; width: 60%; font-family: 'Roboto', sans-serif; font-size: 18px; font-weight: 500; border: none; outline: none; color: #FFF; background-color: #2196F3; cursor: pointer; } .send-button input[type="submit"]:hover { background-color: #055d54; } a.logout{float: right;} p.success{color:#34A853;} p.error{color:#EA4335;} |
جمع بندی
امیدواریم از راهنمایی مرحله به مرحله و مثال اسکریپت ساخت صفحه لاگین و ثبت نام با php لذت برده باشید . شما به راحتی می توانید فرم ثبت نام و لاگین با php و mysql را در زمان بسیار کم پیاده کنید . همچنین با استفاده از آموزش “ساخت سیستم فراموشی رمزعبور با php” می توانید امکانات دیگه ای به صفحه لاگین خود اضافه کنید
برای دانلود پروژه کامل ساخت صفحه لاگین و ثبت نام با php از قسمت زیر اقدام کنید
امیدوارم همیشه موفق باشید
سلام
من اطلاعات دیتابس رو تغیر دادم ولی هنگام لوگین این ارور میاد دلیل چیه؟
Failed to connect with MySQL: Access denied for user ‘noonch_noonchy’@’localhost’ (using password: YES)
سلام. احتمالا پسورد دیتابیس را اشتباه زدید یا privlage های لازم یوزر رو ندادید
سلام وقتتون بخیر. من همه کدها رو از خودتون کپی کردم و اطلاعات مورد نیاز برای اتصال به دیتابیس رو هم تغییر دادم. اما وقتی روی create acount یا login میزنم فقط همه ی کدهایی که توی فایل یوزر اکانت نوشتم رو نشون میده. مشکل از کجاست؟
سلام. ممنون از شما.
دسترسی برای ساخت فایل سشن در درایو c وجود نداره برای همین اجازه نمیده
سلام و وقت بخیر.
من می خواهم در دیتابیس متنی یا اطلاعاتی ذخیره کنم ولی همچنان چیزی از mysql نمی فهمم ، چه کارکنم؟
سلام. ممنون
باید از صفر مفهوم دیتابیس و کار باهاش داخل php رو یاد بگیرید.
برای این کار میتونید تو گوگل آموزش mysql با php ٰرو جستجو کنید