آموزش ساخت صفحه لاگین و فرم ثبت نام با PHP

Sarp

مدیر بازنشسته
ابتدا از صفحه لاگین شروع میکنم و با یه مثال توضیح میدم .

واسه طراحی یک صفحه لاگین واسه یه سایت داینامیک ما نیاز به طراحی 5 تا صفحه داریم که عبارتند از :

config.php
login-form.php
login-exec.php
logout.php
auth.php


  • فایل config.php واسه تنظیمات وصل شدن به دیتابیس هست . مثل یوزرنیم و پسورد و . . .
  • login-form.php هم که از اسمش معلومه . همون فرم لاگین مون هست
  • بعد دریافت اطلاعات از طریق login-form.php این اطلاعات برای پردازش و سنجش اعتبار و تنظیمات session به صفحه login-exec.php فرستاده خواهند شد .
  • logout.php هم واسه خروج از session هست
  • auth.php واسه بررسی لاگین یا لاگ اوت بودن اربر هست

در این مثال ما ابتدا یه دیتابیس میسازیم که حاوی یه جدول به اسم member هست :

PHP:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
--
-- Database: `login`
--
 
-- --------------------------------------------------------
 
--
-- Table structure for table `members`
--
 
CREATE TABLE IF NOT EXISTS `members` (
  `member_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `firstname` varchar(100) DEFAULT NULL,
  `lastname` varchar(100) DEFAULT NULL,
  `login` varchar(100) NOT NULL DEFAULT '',
  `passwd` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`member_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
 
--
-- Dumping data for table `members`
--
 
INSERT INTO `members` (`member_id`, `firstname`, `lastname`, `login`, `passwd`) VALUES
(1, 'test', 'test', 'test', '098f6bcd4621d373cade4e832627b4f6');
با اجرای این کد ما یه جدول مثل این خواهیم داشت :



حالا برسم سر وقت ساختن صفحه config
این کدها رو تو صفحه configrvhv میدیم :
PHP:
<?php
 define('DB_HOST', 'localhost');
 define('DB_USER', 'root');
 define('DB_PASSWORD', '');
 define('DB_DATABASE', 'login');
?>

  • در خط دوم نام هاست مورد استفاده رو باید ذکر کنیم
  • در خط سوم نام کاربری ای که واسه کانکت شدن به دیتابیس ازش استفاده میکنیم که به صورت دیفالت root هست
  • خط چهارم پسورد همون یوزرنیم هست که به صورت دیفالت خالی هستش
  • در خط پنجم هم نام نام دیتابیس رو تعیین میکنیم که در اینجا login هست اسم دیتابیسمون
حالا باید فرم login رو طراحی کنیم .
در صفحه login-form.php این کدها رو قرار میدیم (توضیح خاصی نیاز نداره) :
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login Form</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
    if( isset($_SESSION['ERRMSG_ARR']) &&  is_array($_SESSION['ERRMSG_ARR']) &&  count($_SESSION['ERRMSG_ARR']) >0 ) {
        echo '<ul class="err">';
        foreach($_SESSION['ERRMSG_ARR'] as $msg) {
            echo '<li>',$msg,'</li>';
        }
        echo '</ul>';
        unset($_SESSION['ERRMSG_ARR']);
    }
?>
<p> </p>
<form id="loginForm" name="loginForm" method="post" action="login-exec.php">
 <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
 <tr>
 <td width="112"><b>Login</b></td>
 <td width="188"><input name="login" type="text" id="login" /></td>
 </tr>
 <tr>
 <td><b>Password</b></td>
 <td><input name="password" type="password" id="password" /></td>
 </tr>
 <tr>
 <td> </td>
 <td><input type="submit" name="Submit" value="Login" /></td>
 </tr>
 </table>
</form>
</body>
</html>
فایل login-exec.php :
PHP:
<?php
 session_start();
 
 require_once('config.php');
 
 $errmsg_arr = array();
 $errflag = false;
 
 $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
 if(!$link) {
 die('خطا در برقراری ارتباط با سرور: ' . mysql_error());
 }
 
 $db = mysql_select_db(DB_DATABASE);
 if(!$db) {
 die("سرور قادر به انتخاب دیتابیس نیست");
 }
 
 function clean($str) {
 $str = @trim($str);
 if(get_magic_quotes_gpc()) {
 $str = stripslashes($str);
 }
 return mysql_real_escape_string($str);
 }
 
 $login = clean($_POST['login']);
 $password = clean($_POST['password']);
 
 if($login == '') {
 $errmsg_arr[] = 'نام کاربری اشتباه است';
 $errflag = true;
 }
 if($password == '') {
 $errmsg_arr[] = 'پسورد اشتباه است';
 $errflag = true;
 }
 
 if($errflag) {
 $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
 session_write_close();
 header("location: login-form.php");
 exit();
 }
 
 $qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
 $result=mysql_query($qry);
 
 if($result) {
 if(mysql_num_rows($result) == 1) {
 session_regenerate_id();
 $member = mysql_fetch_assoc($result);
 $_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
 $_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
 $_SESSION['SESS_LAST_NAME'] = $member['lastname'];
 session_write_close();
 header("location: member-index.php");
 exit();
 }else {
 header("location: login-failed.php");
 exit();
 }
 }else {
 die("Query failed");
 }
?>
خط 2 . session رو استارت میزنیم
خط 3 . اضافه کردن فایل config برای اتصال به دیتابیس
خط 4 . خطاهایی که موقع سنجش اعبار اطلاعات ورودی رخ میده رو تو یهآرایه قرار میده
خط 6 . اتصال به mysql سرور
خط 10 . انتخاب دیتابیس
خط 14 . فراخوانی تابع clean که کاراکترهای غیرمجاز رو پاک میکنه که برای جلوگیری از حملات SQL injection لازمه (یا بهتره بگم واجبه )
خط 21 . مقادیر ارسالی از طرف کاربر رو بررسی میکنه با استفاده از تابع clean
خط 23 . تعیین صحت فرم یا همون validation فرم
خط 31 . در صورتی که مقادیر ارسالی از طرف کاربر صحیح یا معتبر نباشند ، به فرم لاگین ریدایرکت میشه
خط 37 . کوئری
خط 40 . بررسی میکنه عمل کوئری با موفقیت انجام شده یا نه !
خط 42 . لاگین با موفقیت اجرا شد
خط 41 . لاگین با خطا مواجه شد

یه فایل به اسم login-failed.php میسازیم تا اگه لاگین با خطا مواجه شد ، به این فرم هدایت شه :
PHP:
<!DOCTYPE  html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login Failed</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Login Failed </h1>
<p align="center"> </p>
<h4 align="center">Login Failed!<br />
 Please check your username and password</h4>
</body>
</html>
و همچنین فایلی به اسم member-index.php که در صورت موفقیت آمیز بودن لاگین بهش هدایت شه :
PHP:
<?php
 require_once('auth.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Member Index</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Welcome <?php echo $_SESSION['SESS_FIRST_NAME'];?></h1>
<a href="logout.php">Logout</a>
<p>This is a password protected area only accessible to members. </p>
</body>
</html>
فایل auth.php برای اطلاع از لاگین شدن کاربر :
کد:
<?php
    session_start();
 
    if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
        header("location: access-denied.php");
        exit();
    }
?>
در خط سوم بررسی میشه که آیا در session آی دی کاربر وجود دارد یا نه !

ایجاد فایل access-denied.php برای اینکه اگه کاربر لاگین نکرده باشه لود شه :
PHP:
<!DOCTYPE  html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Access Denied</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Access Denied </h1>
<p align="center"> </p>
<h4 align="center" class="err">Access Denied!<br />
  You do not have access to this resource.</h4>
</body>
</html>
و در آخرین مرحله از ساخت صفحه لاگین ، logout.php رو میسازیم که کاربر بعد از لاگین بتونه خارج شه و از جلسه ش پاک شه
PHP:
<?php
 session_start();
 
 unset($_SESSION['SESS_MEMBER_ID']);
 unset($_SESSION['SESS_FIRST_NAME']);
 unset($_SESSION['SESS_LAST_NAME']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Logged Out</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Logout </h1>
<p align="center"> </p>
<h4 align="center">You have been logged out.</h4>
<p align="center">Click here to <a href="login-form.php">Login</a></p>
</body>
</html>
در خط سوم متغییرهایی که در session ذخیره شده اند unset میشن
 
آخرین ویرایش:

Sarp

مدیر بازنشسته
نوبت میرسه به ساخت فرم ثبت نام
واسه این کار هم به سه تا فایل نیاز هست :

register-form
register-exec
register-success



  • فایل register-form همان فرم ورودیه که کاربر باید فیلذهاش رو پر کنه
  • پس از پر کردن فرم register-form و ارسال آن توسط کاربر ، اطلاعات ارسالی به register-exec منتقل شده و پس از تایید صحت اطلاعات ، اطلاعات در دیتابیس ذخیره میشه
  • بعد از موفقیت آمیز بودن عملیات ثبت نام صفحه register-success اجرا میشود
حالا فایل register-form رو با استفاده از کدهای زیر ایجاد میکنیم :
PHP:
<?php
    session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login Form</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
    if( isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0 ) {
        echo '<ul class="err">';
        foreach($_SESSION['ERRMSG_ARR'] as $msg) {
            echo '<li>',$msg,'</li>';
        }
        echo '</ul>';
        unset($_SESSION['ERRMSG_ARR']);
    }
?>
<form id="loginForm" name="loginForm" method="post" action="register-exec.php">
  <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
    <tr>
      <th>First Name </th>
      <td><input name="fname" type="text" class="textfield" id="fname" /></td>
    </tr>
    <tr>
      <th>Last Name </th>
      <td><input name="lname" type="text" class="textfield" id="lname" /></td>
    </tr>
    <tr>
      <th width="124">Login</th>
      <td width="168"><input name="login" type="text" class="textfield" id="login" /></td>
    </tr>
    <tr>
      <th>Password</th>
      <td><input name="password" type="password" class="textfield" id="password" /></td>
    </tr>
    <tr>
      <th>Confirm Password </th>
      <td><input name="cpassword" type="password" class="textfield" id="cpassword" /></td>
    </tr>
    <tr>
      <td> </td>
      <td><input type="submit" name="Submit" value="Register" /></td>
    </tr>
  </table>
</form>
</body>
</html>
در سطر 14 بررسی میشه که آیا خطائی در اطلاعات ورودی وجود داره یا نه

حالا فایل register-exec رو میسازیم با کدهای زیر :
PHP:
<?php
    session_start();
 
    require_once('config.php');
 
    $errmsg_arr = array();
    $errflag = false;
 
    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
    if(!$link) {
        die('Failed to connect to server: ' . mysql_error());
    }
 
    $db = mysql_select_db(DB_DATABASE);
    if(!$db) {
        die("Unable to select database");
    }
 
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }
 
    $fname = clean($_POST['fname']);
    $lname = clean($_POST['lname']);
    $login = clean($_POST['login']);
    $password = clean($_POST['password']);
    $cpassword = clean($_POST['cpassword']);
 
    if($fname == '') {
        $errmsg_arr[] = 'First name missing';
        $errflag = true;
    }
    if($lname == '') {
        $errmsg_arr[] = 'Last name missing';
        $errflag = true;
    }
    if($login == '') {
        $errmsg_arr[] = 'Login ID missing';
        $errflag = true;
    }
    if($password == '') {
        $errmsg_arr[] = 'Password missing';
        $errflag = true;
    }
    if($cpassword == '') {
        $errmsg_arr[] = 'Confirm password missing';
        $errflag = true;
    }
    if( strcmp($password, $cpassword) != 0 ) {
        $errmsg_arr[] = 'Passwords do not match';
        $errflag = true;
    }
 
    if($login != '') {
        $qry = "SELECT * FROM members WHERE login='$login'";
        $result = mysql_query($qry);
        if($result) {
            if(mysql_num_rows($result) > 0) {
                $errmsg_arr[] = 'Login ID already in use';
                $errflag = true;
            }
            @mysql_free_result($result);
        }
        else {
            die("Query failed");
        }
    }
 
    if($errflag) {
        $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
        session_write_close();
        header("location: register-form.php");
        exit();
    }
 
    $qry = "INSERT INTO members(firstname, lastname, login, passwd) VALUES('$fname','$lname','$login','".md5($_POST['password'])."')";
    $result = @mysql_query($qry);
 
    if($result) {
        header("location: register-success.php");
        exit();
    }else {
        die("Query failed");
    }
?>
چون تعداد زیادی از خطوط رو در پست اول توضیح دادم پس دستوراتی که تکرار شده اند رو توضیح نمیدم!

خط 21 تا 25 . اطلاعات رو واسه امنیت بیشتر با تابع clean بررسی میکنه . برای جلوگیری از حملات SQL injection
خط 50 . نام کاربری انتخاب شده بررسی میشه که آیا قبلا انتخاب شده یا نه !
خط 64 . اگه در اطلاعات ورودی خطائی موجود باشه به فرم ثبت نام (register-form) ریدایرکت میکنه
خط 70 . اگه اطلاعات ورودی صحیح و معتبر (بدون خطا) باشند ، اطلاعات در دیتابیس ذخیره میشن

فایل register-success :
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Registration Successful</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Registration Successful</h1>
<p><a href="login-form.php">Click here</a> to login to your account.</p>
</body>
</html>

 
آخرین ویرایش:

mmosaddegh

عضو جدید
تشکر

تشکر

با سپاس فراوان از پست خوبتان
برای من که با برنامه نویسی آشنایی ندارم خیلی مفید بود
در کد php که برای ایجاد table نوشته اید یکی از فیلد ها passwd میباشد اما در تصویر پیوست password آمده است
اگر یک فرم Change password یا Edit Information نیز ایجاد کنید چیزی کم و کسر نگذاشته اید
چگونه میتوان یک فرم php را طوری تغییر داد که کسانی که لوگین شده اند بتوانند دسترسی داشته باشند!

با تشکر
http://mci.eu5.orghttp://mci.eu5.orghttp://mci.eu5.org/login-form.php
 
آخرین ویرایش:

mmosaddegh

عضو جدید
صفحه لوگین

صفحه لوگین

سلام
یک نمونه ساده را پیوست کردم
به همراه یک نمونه پیشرفته
 

پیوست ها

  • testing.rar
    4.9 کیلوبایت · بازدیدها: 0
  • ZabetFreeIstgah-www.zabet.ir.rar
    100.5 کیلوبایت · بازدیدها: 0

yallfa

عضو جدید
ابتدا از صفحه لاگین شروع میکنم و با یه مثال توضیح میدم .

واسه طراحی یک صفحه لاگین واسه یه سایت داینامیک ما نیاز به طراحی 5 تا صفحه داریم که عبارتند از :

config.php
login-form.php
login-exec.php
logout.php
auth.php


  • فایل config.php واسه تنظیمات وصل شدن به دیتابیس هست . مثل یوزرنیم و پسورد و . . .
  • login-form.php هم که از اسمش معلومه . همون فرم لاگین مون هست
  • بعد دریافت اطلاعات از طریق login-form.php این اطلاعات برای پردازش و سنجش اعتبار و تنظیمات session به صفحه login-exec.php فرستاده خواهند شد .
  • logout.php هم واسه خروج از session هست
  • auth.php واسه بررسی لاگین یا لاگ اوت بودن اربر هست

در این مثال ما ابتدا یه دیتابیس میسازیم که حاوی یه جدول به اسم member هست :

PHP:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
--
-- Database: `login`
--
 
-- --------------------------------------------------------
 
--
-- Table structure for table `members`
--
 
CREATE TABLE IF NOT EXISTS `members` (
  `member_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `firstname` varchar(100) DEFAULT NULL,
  `lastname` varchar(100) DEFAULT NULL,
  `login` varchar(100) NOT NULL DEFAULT '',
  `passwd` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`member_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
 
--
-- Dumping data for table `members`
--
 
INSERT INTO `members` (`member_id`, `firstname`, `lastname`, `login`, `passwd`) VALUES
(1, 'test', 'test', 'test', '098f6bcd4621d373cade4e832627b4f6');

با اجرای این کد ما یه جدول مثل این خواهیم داشت :




حالا برسم سر وقت ساختن صفحه config
این کدها رو تو صفحه configrvhv میدیم :
PHP:
<?php
 define('DB_HOST', 'localhost');
 define('DB_USER', 'root');
 define('DB_PASSWORD', '');
 define('DB_DATABASE', 'login');
?>

  • در خط دوم نام هاست مورد استفاده رو باید ذکر کنیم
  • در خط سوم نام کاربری ای که واسه کانکت شدن به دیتابیس ازش استفاده میکنیم که به صورت دیفالت root هست
  • خط چهارم پسورد همون یوزرنیم هست که به صورت دیفالت خالی هستش
  • در خط پنجم هم نام نام دیتابیس رو تعیین میکنیم که در اینجا login هست اسم دیتابیسمون
حالا باید فرم login رو طراحی کنیم .
در صفحه login-form.php این کدها رو قرار میدیم (توضیح خاصی نیاز نداره) :
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login Form</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
    if( isset($_SESSION['ERRMSG_ARR']) &&  is_array($_SESSION['ERRMSG_ARR']) &&  count($_SESSION['ERRMSG_ARR']) >0 ) {
        echo '<ul class="err">';
        foreach($_SESSION['ERRMSG_ARR'] as $msg) {
            echo '<li>',$msg,'</li>';
        }
        echo '</ul>';
        unset($_SESSION['ERRMSG_ARR']);
    }
?>
<p> </p>
<form id="loginForm" name="loginForm" method="post" action="login-exec.php">
 <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
 <tr>
 <td width="112"><b>Login</b></td>
 <td width="188"><input name="login" type="text" id="login" /></td>
 </tr>
 <tr>
 <td><b>Password</b></td>
 <td><input name="password" type="password" id="password" /></td>
 </tr>
 <tr>
 <td> </td>
 <td><input type="submit" name="Submit" value="Login" /></td>
 </tr>
 </table>
</form>
</body>
</html>
فایل login-exec.php :
PHP:
<?php
 session_start();
 
 require_once('config.php');
 
 $errmsg_arr = array();
 $errflag = false;
 
 $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
 if(!$link) {
 die('خطا در برقراری ارتباط با سرور: ' . mysql_error());
 }
 
 $db = mysql_select_db(DB_DATABASE);
 if(!$db) {
 die("سرور قادر به انتخاب دیتابیس نیست");
 }
 
 function clean($str) {
 $str = @trim($str);
 if(get_magic_quotes_gpc()) {
 $str = stripslashes($str);
 }
 return mysql_real_escape_string($str);
 }
 
 $login = clean($_POST['login']);
 $password = clean($_POST['password']);
 
 if($login == '') {
 $errmsg_arr[] = 'نام کاربری اشتباه است';
 $errflag = true;
 }
 if($password == '') {
 $errmsg_arr[] = 'پسورد اشتباه است';
 $errflag = true;
 }
 
 if($errflag) {
 $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
 session_write_close();
 header("location: login-form.php");
 exit();
 }
 
 $qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
 $result=mysql_query($qry);
 
 if($result) {
 if(mysql_num_rows($result) == 1) {
 session_regenerate_id();
 $member = mysql_fetch_assoc($result);
 $_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
 $_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
 $_SESSION['SESS_LAST_NAME'] = $member['lastname'];
 session_write_close();
 header("location: member-index.php");
 exit();
 }else {
 header("location: login-failed.php");
 exit();
 }
 }else {
 die("Query failed");
 }
?>
خط 2 . session رو استارت میزنیم
خط 3 . اضافه کردن فایل config برای اتصال به دیتابیس
خط 4 . خطاهایی که موقع سنجش اعبار اطلاعات ورودی رخ میده رو تو یهآرایه قرار میده
خط 6 . اتصال به mysql سرور
خط 10 . انتخاب دیتابیس
خط 14 . فراخوانی تابع clean که کاراکترهای غیرمجاز رو پاک میکنه که برای جلوگیری از حملات SQL injection لازمه (یا بهتره بگم واجبه )
خط 21 . مقادیر ارسالی از طرف کاربر رو بررسی میکنه با استفاده از تابع clean
خط 23 . تعیین صحت فرم یا همون validation فرم
خط 31 . در صورتی که مقادیر ارسالی از طرف کاربر صحیح یا معتبر نباشند ، به فرم لاگین ریدایرکت میشه
خط 37 . کوئری
خط 40 . بررسی میکنه عمل کوئری با موفقیت انجام شده یا نه !
خط 42 . لاگین با موفقیت اجرا شد
خط 41 . لاگین با خطا مواجه شد

یه فایل به اسم login-failed.php میسازیم تا اگه لاگین با خطا مواجه شد ، به این فرم هدایت شه :
PHP:
<!DOCTYPE  html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login Failed</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Login Failed </h1>
<p align="center"> </p>
<h4 align="center">Login Failed!<br />
 Please check your username and password</h4>
</body>
</html>
و همچنین فایلی به اسم member-index.php که در صورت موفقیت آمیز بودن لاگین بهش هدایت شه :
PHP:
<?php
 require_once('auth.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Member Index</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Welcome <?php echo $_SESSION['SESS_FIRST_NAME'];?></h1>
<a href="logout.php">Logout</a>
<p>This is a password protected area only accessible to members. </p>
</body>
</html>
فایل auth.php برای اطلاع از لاگین شدن کاربر :
کد:
<?php
    session_start();
 
    if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
        header("location: access-denied.php");
        exit();
    }
?>
در خط سوم بررسی میشه که آیا در session آی دی کاربر وجود دارد یا نه !

ایجاد فایل access-denied.php برای اینکه اگه کاربر لاگین نکرده باشه لود شه :
PHP:
<!DOCTYPE  html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Access Denied</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Access Denied </h1>
<p align="center"> </p>
<h4 align="center" class="err">Access Denied!<br />
  You do not have access to this resource.</h4>
</body>
</html>
و در آخرین مرحله از ساخت صفحه لاگین ، logout.php رو میسازیم که کاربر بعد از لاگین بتونه خارج شه و از جلسه ش پاک شه
PHP:
<?php
 session_start();
 
 unset($_SESSION['SESS_MEMBER_ID']);
 unset($_SESSION['SESS_FIRST_NAME']);
 unset($_SESSION['SESS_LAST_NAME']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Logged Out</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Logout </h1>
<p align="center"> </p>
<h4 align="center">You have been logged out.</h4>
<p align="center">Click here to <a href="login-form.php">Login</a></p>
</body>
</html>
در خط سوم متغییرهایی که در session ذخیره شده اند unset میشن


















سلام

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

می دونی مشکلش از چیه؟
 

yallfa

عضو جدید
سلام
Sarp جان ، ممنون از پاسخ ات

راستش من aspکارم و تازه php شروع کردم

سوالم اینه: وقتی اطلاعاتی که در پایگاه داده به درستی نشون داده میده رو از پایگاه داده می خونم و چاپ می کنم علامت سوال چاپ میشه
حروف فارسی درون فایل درست است اما فقط اون چیزایی که از پایگاه داده خونده میشه و فارسی است به صورت علامت سوال نشون داده می شه
 

5mmmmm

عضو جدید
چرا از من بعد از اینکه یوزر و پسور چک شد به فرم member-index نمیره و توی همون فرم login-exec باقی میمونه؟
 

computer127

عضو جدید
سلام دوستان.
ممنون از این تاپیک خوبتون.
برای کسی که با مفهوم session خیلی اشنا نیست، اگه بخواهد ی فرم login بسازه بدون استفاده از session ها باید چطور کار کنه؟
ممنون میشم این رو هم توضیح بدید.
من یه صفحه ی login میسازم ولی توی حالت اجرا بعد از زدن یوزر و پسورد هیچ کاری نمیکنه؟ یعنی صفحه بعدی رو نشون نمیده!!!
 

reza_tayebi

عضو جدید
سلام
من یه مشکل دارم
زمانی که توی فرم ثبت نام اطلاعات رو وارد می کنم، اطلاعات ثبت میشه ولی به فایل register-success نمیره
مشکل چیه؟
 

asusk43sj

عضو جدید
سلام . من طبق این آموزش خوبتون فایل ها رو آپلود می کنم ولی هر دفعه که میام صفحه رو تست کنم می زنه query faild . میشه راهنماییم کنید مشکل از کجاست ؟ ممنون
 

asusk43sj

عضو جدید
آموزش لاگین

آموزش لاگین

سلام . ممنون از آموزش خوبتون . من فایل ها رو آپلود می کنم و دیتابیس رو با cpanel می سازم ولی هر دفعه که صفحه لاگین رو تست می کنم پیام query failed رو میده . اگه میشه من رو راهنمایی کنید .
 

madareto.com

عضو جدید
فوق العاده مفید و عالی
 

saeid147

عضو جدید
سلام
با این خطا مواجه شدم
-----------------------------------------------------



Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in /home/u751204536/public_html/register-exec.php on line 9
Failed to connect to server: Access denied for user 'root'@'localhost' (using password: YES)
 

naserzadeh

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

Syd Barrett

عضو جدید
سلام
با این خطا مواجه شدم
-----------------------------------------------------



Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in /home/u751204536/public_html/register-exec.php on line 9
Failed to connect to server: Access denied for user 'root'@'localhost' (using password: YES)

سلام
احتمالا شما این کد ها رو روی یه سرور share شده ریختی و مقادیر اتصال به بانک اطلاعاتی رو به درستی وارد نکردی ( یوزر دیتابیس شما روی یه سرور که share شده نمیتونه root باشه )
این خطا میگه که شما نمیتونی به دیتا بیس وصل بشی ، شما اول یه Database روی سرور بساز و مقادیر اون رو توی فایلی که مشخصات دیتابیس رو داره وارد کن.

با سلام
اگه بخواهم برای هر کاربر مشخص یک صفحه نشان داده بشه باید چیکار کنم یه حالتی مثل مثلا مشاهده نمرات دانشجویی برای هر دانشجو یک یوزر نیم و پسورد که وقتی وارد میشه صفحه مربوط به اون نشون داده بشه

سلام شما میتونی بعد از لوگین شدن اون کاربر ، نام کاربری رو بگیری و مقادیری رو که میخوای برای اون کاربر نمایش داده بشه با یه query که در صفحه member اجرا میشه توی یک آرایه بریزی و نمایش بدی ، یا برای هر کاربر یه صفحه بسازی روی سرور و آدرس اون صفحه رو با نام کاربری توی یه جدول ذخیره کنی ، بعد از لوگین با یه query آدرس صفحه هر کاربر رو از اون سطر جدول بگیری و load کنی .
 
آخرین ویرایش:

nafasgir

عضو جدید
سلام

سلام

سلام آقا فرم رجیستر شما کار نمیکنه که

http://nafasgir.ir/Registerha/register-form.php

تازه فایل کانفیگ . php هم درست نکرده بودید من درست کردم گذاشتم اما لاین به لاین داره خطا میگیره از دستورتون لطفا" راهنمایی کنید خیلی عجله دارم

مرسی عزیز
 

yas87

کاربر حرفه ای
کاربر ممتاز
سلام آقا فرم رجیستر شما کار نمیکنه که

http://nafasgir.ir/Registerha/register-form.php

تازه فایل کانفیگ . php هم درست نکرده بودید من درست کردم گذاشتم اما لاین به لاین داره خطا میگیره از دستورتون لطفا" راهنمایی کنید خیلی عجله دارم

مرسی عزیز

تو ++notepad کار ميکني يا xamp رو نصب کردي ...ايشون خودش نيست که راهنمايي کنه مگه اينکه خطاي دستورات رو بشناسي و رفع کني
 

Syd Barrett

عضو جدید
سلام آقا فرم رجیستر شما کار نمیکنه که

http://nafasgir.ir/Registerha/register-form.php

تازه فایل کانفیگ . php هم درست نکرده بودید من درست کردم گذاشتم اما لاین به لاین داره خطا میگیره از دستورتون لطفا" راهنمایی کنید خیلی عجله دارم

مرسی عزیز
دوست عزیز شما مشخصات دیتا بیس رو درست وارد نکردید
احتمالا از جایی که کپی کردید به همون صورت دیفالت مونده ...
Unknown MySQL server host 'DB_HOST'
این یعنی اینکه شما هاست رو DB_HOST گذاشتید که اگر از دیتا بیس روی یه سرور دیگه استفاده نمیکنید باید localhost باشه
اگر باز هم سوالی بود پی ام بدید ...ممکنه اینجا رو نبینم ...
 

s.m71

عضو جدید
سلام دوستان من یک فرم لاگین ساده طراحی کردم ولی نمیدونم چرا اجرا نمیشه اگر امکانش هست راهنماییم کنید.

برنامه صفحه
login.php
<body>
<?php
if($_GET['err']=="yes")
echo "نام کاربری و یا رمز عبور اشتباه است";
?>
<form id="form1" name="form1" method="post" action="target.php">
<table width="200" border="1" align="center">
<tr>
<th scope="col"><label for="textfield"></label>
<input type="text" name="textfield" id="textfield" /></th>
<th nowrap="nowrap" scope="col">نام کاربری</th>
</tr>
<tr>
<td><label for="textfield2"></label>
<input type="text" name="textfield2" id="textfield2" /></td>
<th>رمز عبور</th>
</tr>
<tr>
<td colspan="2"><input type="submit" name="button" id="button" value="Submit" /></td>
</tr>
</table>
</form>
</body>
</html>

برنامه صفحه target.php


<?php
mysql_connect("localhost","root","");
mysql_query("set names 'utf8'");
mysql_select_db("dbclass");
$sq=mysql_query("select * from student where username='$_POST[user]' and password='$_POST[pass]'")or die(mysql_error());
if($row=mysql_fetch_assoc($sq))
echo"کاربر گرامی خوش آمدید".$row['stname']." ".$row['stfamily'];
else
echo " نام کاربریا رمزعبور اشتباه است ";
?>

 

hoseng

کاربر بیش فعال
سلام دوستان من یک فرم لاگین ساده طراحی کردم ولی نمیدونم چرا اجرا نمیشه اگر امکانش هست راهنماییم کنید.

دوست عزیز کدهاتو تو قالب کد ادیتور بنویس که خوندنش راحت باشه
جواب شما هم خیلی ساده هستش
شما توی صفحه لاگین textfield رو به user و textfield2 رو به pass تغییر بدین درست میشه
 

s.m71

عضو جدید
دوست عزیز کدهاتو تو قالب کد ادیتور بنویس که خوندنش راحت باشه
جواب شما هم خیلی ساده هستش
شما توی صفحه لاگین textfield رو به user و textfield2 رو به pass تغییر بدین درست میشه

ممنوم از جوانتون ولی بازم مشکل حل نشد
خودم فکر میکنم مشکل از دیتابیسه چون وقتی دیتابیسم باز میکنم این خطاهارو میده:

Message: 'parentNode' is null or not an object
Line: 124
Char: 120
Code: 0
URI: http://localhost/phpmyadmin/js/mootools.js


Message: Object doesn't support this property or method
Line: 149
Char: 1
Code: 0
چرا این خطاهارو میده؟

ببخشید منظورتون ازاینکه برنامه توی کد ادیتور بنویسم چیه؟
 

hoseng

کاربر بیش فعال
ممنوم از جوانتون ولی بازم مشکل حل نشد
خودم فکر میکنم مشکل از دیتابیسه چون وقتی دیتابیسم باز میکنم این خطاهارو میده:

Message: 'parentNode' is null or not an object
Line: 124
Char: 120
Code: 0
URI: http://localhost/phpmyadmin/js/mootools.js


Message: Object doesn't support this property or method
Line: 149
Char: 1
Code: 0
چرا این خطاهارو میده؟

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

saeedengine

عضو جدید
سلام
موقع ثبت انم این خطا رو میده.مشکل از کجاست؟
Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\php\PEAR\Config.php on line 80

Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\php\PEAR\Config.php on line 166

Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\xampp\htdocs\macromedia\proje\register\arzyabi-register.php on line 23

Warning: mysql_connect() [function.mysql-connect]: [2002] php_network_getaddresses: getaddrinfo failed: No such host is known. (trying to connect via tcp://maghalat:3306) in C:\xampp\htdocs\macromedia\proje\register\arzyabi-register.php on line 23

Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\xampp\htdocs\macromedia\proje\register\arzyabi-register.php on line 23
Failed to connect to server: php_network_getaddresses: getaddrinfo failed: No such host is known.
 
آخرین ویرایش:

koorosh4

عضو جدید
چطور میشه فعالیتهای کاربران سایت را ذخیره کرد (اعم از ورود و خروج و اعمال تغییرات همراه با ساعت و تاریخ و آی پی آدرس کاربر) و ماهیانه و یا هفتگی به کاربران گزارش عملکرد داد ؟
مثلا گوگل هر چند از گاهی برام میل میده و گزارش عملکردم را بهم میده؟
به این کار میگن log گرفتن از فعالیت کاربران
لان کاربر که وارد سایت میشه نام کاربری و آی پی و تاریخ ورود و ساعت ورودش را نمایش میده . اما برای ذخیره در بانک اطلاعاتی موندم چیکار کنم . کتاب جعفرنژاد قمی و محمد مصدری را مطالعه کردم . توی هیچکدومشون به چنین چیزی اشاره نشده . اونا فقط میگن برای ذخیره در بانک اطلاعاتی باید یه فرم بسازیم با html و اطاعات را از کاربر بگیریم . تو نت هم گشتم دیگه خسته شدم . همه جا بانک اطلاعاتی را با ورودی کاربر آوردن
اینم کد اطلاعاتی که باید ذخیره بشن (ساعت و تاریخ و آی پی و نام کاربری

<script> TIME = new Date(); DIFF = new Date() - TIME ; INTV = window.setInterval("Show_Clock()",1000) ; function Show_Clock(){ TIME = new Date(new Date() - DIFF) ; HH = TIME.getHours() ; MM = TIME.getMinutes() ; SS = TIME.getSeconds() ; document.getElementById('CLOCK').innerHTML=((HH<10 )? "0"+HH:HH) + ":" + ((MM<10)? "0"+MM:MM) + ":" + ((SS<10)? "0"+SS:SS); } </script> <span id="CLOCK"></span> <br> <?php echo jdate('j / F / Y');?> <!-- پایان کد تاریخ و ساعت --> <br> <?php echo $this->currentUser->username; ?> <?php echo('خوش آمدید '); ?> <br> <?php echo ('آی پی شما :');?> <?php
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP']))
//check ip from share internet
$ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
//to check ip is pass from proxy
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
$ip=$_SERVER['REMOTE_ADDR'];

return $ip;
}
$ip = getRealIpAddr();
echo ($ip);
?>
ممنون میشم راهنماییم کنید . خیلی گشتم دنبال مطلبش . تو خیلی سایتها رفتم .
 

Similar threads

بالا