PDA

View Full Version : سوال: فرم لاگین با mvc



Louai_M
پنج شنبه 12 دی 1392, 10:44 صبح
با سلام

دوستان کسی هست به من کمک کنه یه فرم لاگین ساده با mvc در php و mysql یادم بده

نیاز فوری دارم

Louai_M
پنج شنبه 12 دی 1392, 11:41 صبح
من این کدها را نوشتم ببینید چطورن
این صفحه لاگین :



<html>
<head>
<title>ورود به پنل کاربری</title>
<style type="text/css">
body{background:#e1e1e1; font-family:tahoma; font-size:8pt;}
.boxpanel{width:230px; height:auto; background:#f26c4f; border-radius:5px; z-border-radius:10px; box-shadow: 2px 3px 3px #313131; margin:auto; color:#fff; margin-top: 15%; padding: 10px;}
.boxpanel table{font-family: tahoma; font-size: 9pt; color:#fff;}
.boxpanel form input{font-family: tahoma; font-size:9pt;}
.boxpanel td{height: 30px; line-height:28px;}
</style>
</head>
<body dir="rtl">
<div class="boxpanel">
<?php

require_once("../controllers/blog_login.php");
if(isset($_POST['submit']))
{
if(!isset($_POST['username']) == '')
{
$msglog = "نام کاربری را وارد کنید";
$check_error = 1;
}
if(!isset($_POST['password']) == '')
{
$msglog = "کلمه عبور را وارد کنید";
$check_error = 1;
}

$loginSystem = new CheckLogin();
if($loginSystem->check($_POST['username'],$_POST['password']))
{

// Redirect here to your secure page

header('location: index.php');
}
else
{
$msglog = "نام کاربری یا رمز عبور اشتباه است.";
exit;
}
}

?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table>
<tr>
<td>نام کاربری :</td><td><input name="username" id="user" type="text" class="form-ltr" /> </td>
</tr><tr>
<td>کلمه عبور :</td><td><input name="password" id="pss" type="password" class="form-ltr" /> </td>
</tr><tr>
<td>مرا بخاطر بسپار</td><td><input name="remember" type="checkbox" checked="checked" id="remember" /> </td>
</tr><tr>
<td colspan="2" style="text-align:center;">
<input type="hidden" name="check" value="sended" />
<input type="submit" value="ورود" name="submit"/>
</td>
</tr>
<tr><td colspan="2"><?php $msglog; ?></td></tr>
</table>
</form>
</div>
</body>
</html>



این کلاس checklogin در آدرس controllers/blog_login.php



<?php
require_once('../model/Loginsystem.php');
class ChechLogin
{
var $username,
$pass;

function isLoggedIn()
{
if($_SESSION['LoggedIn'])
{
return true;
}
else return false;
}

function check($user , $pass)
{
$this->username=$user;
$this->pass=$pass;

$loginSystem = new LoginSystem();
if($loginSystem->doLogin($this->username,$this->pass))
{
session_regenerate_id();

//set session vars up
$_SESSION['LoggedIn'] = true;
$_SESSION['userName'] = $this->username;

}
return true;
}

function logout()
{
unset($_SESSION['LoggedIn']);
unset($_SESSION['userName']);
session_destroy();
}

}
?>


و این هم کلاس loginsystem در مسیر model/loginsystem.php


<?php session_start();



class LoginSystem
{
var $db_host,
$db_name,
$db_user,
$db_password,
$connection,
$username,
$password;

/**
* Constructor
*/
function LoginSystem()
{
require_once('config.php');

$this->db_host = $dbhost;
$this->db_name = $dbname;
$this->db_user = $dbuser;
$this->db_password = $dbpassword;
}



/**
* Check username and password against DB
*
* @return true/false
*/
function doLogin($username, $password)
{
$this->connect();

$this->username = $username;
$this->password = $password;

// check db for user and pass here.
$sql = sprintf("SELECT * FROM `tbllogin` WHERE username = '$this->username' and password = '$this->password'",
$this->clean($this->username), md5($this->clean($this->password)));

$result = mysql_query($sql, $this->connection);

// If no user/password combo exists return false
if(mysql_affected_rows($this->connection) != 1)
{
$this->disconnect();
return false;
}
else // matching login ok
{
$row = mysql_fetch_assoc($result);

// more secure to regenerate a new id.
//session_regenerate_id();

//set session vars up
//$_SESSION['LoggedIn'] = true;
// $_SESSION['userName'] = $this->username;

}

$this->disconnect();
return true;
}


function connect()
{
$this->connection = mysql_connect($this->db_host, $this->db_user, $this->db_password) or die("Unable to connect to MySQL");

mysql_select_db($this->db_name, $this->connection) or die("Unable to select DB!");

// Valid connection object? everything ok?
if($this->connection)
{
return true;
}
else return false;
}

/**
* Disconnect from the db
*/
function disconnect()
{
mysql_close($this->connection);
}

/**
* Cleans a string for input into a MySQL Database.
* Gets rid of unwanted characters/SQL injection etc.
*
* @return string
*/
function clean($str)
{
// Only remove slashes if it's already been slashed by PHP
if(get_magic_quotes_gpc())
{
$str = stripslashes($str);
}
// Let MySQL remove nasty characters.
$str = mysql_real_escape_string($str);

return $str;
}




}

?>


و این هم فایل کانفیگ model/config.php



<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpassword = '';
$dbname = 'db1';
$con = mysql_connect ($dbhost, $dbuser, $dbpassword) or die(mysql_error());
mysql_select_db ($dbname, $con) or die(mysql_error());

?>

Louai_M
پنج شنبه 12 دی 1392, 12:52 عصر
دوستان کسی نیست یتونه جوابم بده

metal gear solid 4
پنج شنبه 12 دی 1392, 13:20 عصر
این چیزی که شما نوشتید به هیچ وجه MVC نیست. لایه هاتون کاملاً با هم دیگه ادغام هستند. کنترلری هم نمیبینم.
در هر حال. تمام کد رو من نگاه نکردم. اما یک سری مسائل حل شدست. سعی کنید با توابع MySQL نام فیلدهای جداول رو بگیرید. با استفاده از متدهای __set و __get کلاسهاتون رو داینامیک طراحی کنید. نیازی نباشه به ازای هر مدل، فیلدهاشو هم توی کلاستون بنویسید. در هر حال این سیستم به نظر مشکلی نداره. اما پیشنهاد میکنم از این قبیل کد نویسی پرهیز کنید و از یک فریمورک استاندارد و آماده استفاده کنید که واقعاً مفاهیم MVC درونش رعایت شده باشه.

Louai_M
پنج شنبه 12 دی 1392, 13:45 عصر
باتشکر
دوستان من تازه کارم و این مثالو از سرچ کرند بدست آوردم


من کل کاری که می خوام اینه که یه صفحه لاگین درست کنم کاربر وارد بخش مدیریت بشه

1- کاربران نتونن بهمند کد من چیه
2- کاربر موقعی که وارد بشه یه ایمل برام بیاد که حاوی نام کاربریش باشه
3- به صفحه مخصوص خودش منتثل بشه

اگه کسی بتونه کمک کنه خیلی ممنون میشم.

metal gear solid 4
پنج شنبه 12 دی 1392, 13:53 عصر
کاربر که کد شما رو متوجه نمیشه. این کد سمت سرور تفسیر میشه و نتیجش تحت HTML به کاربر نشون داده میشه.
با استفاده از سشن ها $_SESSION میتونی اطلاعات کاربر رو بعد از ورود موفقیت آمیزش ذخیره کنی و از این به بعد کاربر رو به عنوان یک کاربر معتبر شناسایی کنی.
برای ایمیل زدن هم بعد از ورود موفقیت آمیز از تابع mail استفاده کن. در صورتی که میخای از پورت استفاده کنی روی POP3 یا SMTP واسه ایمیل زدن و از ارائه دهنده ی هاست خودت باید از کتابخونه های کمکی استفاده کنی. swiftmailer به کارت میاد. اما واسه الان از همون mail استفاده کن.
یک صفحه ی عمومی طراحی کن برای همه ی کاربرا. فقط جای اسامی کاربری، واسه نشون دادن اطلاعات کاربران خاص، از $_SESSION ای که اطلاعات کاربر توشه استفاده کن.