2013-12-13
TPP是我最近写的一个简单的PHP框架,本文使用TPP做一个简单的登录系统。 TPP框架项目地址:https://github.com/letiantian/TPP
在mysql5中的test库下建立表users
CREATE TABLE `test`.`users` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`email` VARCHAR(45) NOT NULL ,
`passwd` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `name_UNIQUE` (`name` ASC) )
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
主键是id字段,name字段内容具有唯一性约束。
添加一组数据,用户名为a,email为aaa@163.com,密码aaa。图个方便,密码明文存储。
将TPP放在/var/www中,TPP的配置不变。
创建文件./Userlib/userstate.php:
<?php
class userstate extends TPP{
public function is_login() {
if (isset($_SESSION['user_name'])) {
return true;
}
else {
return false;
}
}
public function login($user_name, $user_passwd) {
$db = $this->tpp_loader()->load_core_class('Medoo');
$db->connect([
'database_type' => 'mysql',
'database_name' => 'test',
'server' => 'localhost',
'username' => 'root',
'password' => '123']);
$sql = "select * from users where name =".$db->quote($user_name)." and passwd=".$db->quote($user_passwd).";";
//$datas = $db->select("users","*");
$datas = $db->query($sql)->fetchAll();
if(count($datas) >= 1) {
$_SESSION['user_name'] = $user_name;
return true;
}
else {
return false;
}
}
public function logout() {
unset($_SESSION['user_name']);
return true;
}
public function get_user_name() {
return $_SESSION['user_name'];
}
}
session会在控制器文件中启动,所以该文件中也就没有session_start()
。SESSION只存储用户名user_name
。is_login()
函数判断是否已经登录。login($user_name, $user_passwd)
函数提供登录功能,登录成功则返回true,否则false。logout()函数提供退出功能。get_user_name()
函数获取登录用户的名字。
创建文件./Controller/usermanager.php:
<?php
class usermanage extends TPP {
public function __construct() {
session_start();
$this->userstate = $this->tpp_loader()->load_user_class('userstate');
}
public function index() {
if($this->userstate->is_login()) {
header("Location: /usermanage/show");
}
else {
header("Location: /usermanage/login");
}
}
public function login() {
if($this->userstate->is_login()) {
$this->show();
return;
}
if(isset($_POST['user_name']) && isset($_POST['user_passwd'])) {
if ($this->userstate->login($_POST['user_name'], $_POST['user_passwd'])) {
$this->show();
return ;
}
}
$render = $this->tpp_loader()->load_core_class('Render');
$render->render('usermanage/header',['title'=>'登录']);
$render->render('usermanage/login_body',['welcome'=>'登录']);
$render->render('usermanage/footer', null);
$render->show();
}
public function logout() {
$this->userstate->logout();
header("Location: /usermanage/index");
exit;
}
public function show() {
if($this->userstate->is_login() === false) {
header("Location: /usermanage/login");
return;
}
$render = $this->tpp_loader()->load_core_class('Render');
$render->render('usermanage/header',['title'=>'主页']);
$render->render('usermanage/show_body',['user_name'=>$this->userstate->get_user_name()]);
$render->render('usermanage/footer', null);
$render->show();
}
}
在构造函数中启动了session,同时生成./Userlib/userstate.php
中userstate类的实例$this->userstate
。login()函数为用户展示登录页。在登录成功后,跳转到show()生成的页面中。函数logout()提供退出功能。index()函数根据用户是否登录选择跳转到login()或者show()。
下面建立视图文件:
./Template/usermanager/header.php文件内容如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title><?=$title;?></title>
<script src="<?=$tpp_base_url();?>static/jquery-1.10.2.min.js" type="text/javascript"></script>
<script src="<?=$tpp_base_url();?>static/bootstrap3/js/bootstrap.min.js" type="text/javascript"></script>
<link href="<?=$tpp_base_url();?>static/bootstrap3/css/bootstrap.min.css" rel="stylesheet">
<style>
.user_margin {
height: 20px;
width: 100%;
}
</style>
</head>
<body>
由于TPP配置不变,$tpp_base_url()
的结果是'/'。
./Template/usermanager/login_body.php文件内容如下:
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4 ">
<div class="user_margin"></div>
<h2><?=$welcome;?></h2>
<div class="user_margin"></div>
<form role="form" method="POST" action="/usermanage/login">
<div class="form-group">
<label>用户名</label>
<input type="text" class="form-control" placeholder="Enter name" name="user_name">
</div>
<div class="form-group">
<label>密码</label>
<input type="password" class="form-control" placeholder="Password" name="user_passwd">
</div>
<button type="submit" class="btn btn-default">登录</button>
</form>
<div class="user_margin"></div>
</div>
<div class="col-md-4"></div>
</div>
./Template/usermanager/show_body.php文件内容如下:
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4 ">
<div class="user_margin"></div>
<h2>你好,<?=$user_name;?></h2>
<a class="btn" href="/usermanage/logout">注销</a>
</div>
<div class="col-md-4"></div>
</div>
./Template/usermanager/footer.php文件内容如下:
</body>
</html>
效果图
输入http://127.0.0.1/usermanage/
,则跳转到登录页面http://127.0.0.1/usermanage/login
,如下:

填写用户名a和密码aaa,进入show页面: