一、页面关系结构图
-
Index.php是入口主文件,根据自己的情况需要,载入start.inc.php(初始页面)、register.inc.php(注册页面)、login.inc.php(登录页面)、member.inc.php(个人中心页面)。
1、index.php
# 类的自动加载
<?php
function __autoload($_classname) {
require $_classname.".class.php";
}
if (isset($_GET["index"])) {
$_main = new Main($_GET["index"]);
} else {
$_main = new Main();
}
$_main ->_run();
?>
2、start.inc.php
<h2>欢迎光临注册登录</h2>
<div class="start">
<a href="index.php?index=login">登录</a>
<a href="index.php?index=register">注册</a>
</div>
index.png
3、register.inc.php
<h2>欢迎注册</h2>
<div class="register">
<form method="post" action="">
<p>用 户 名:<input type="text" name="username"></p>
<p>密 码 :<input type="password" name="password"></p>
<p>密码确认:<input type="password" name="notpassword"></p>
<p>电子邮件:<input type="text" name="email"></p>
<p><input type="submit" name="send" value="注册"></p>
<p>[<a href="?">返回上一层]</a></p>
</form>
</div>
register.png
4、login.inc.php
<h2>欢迎登录</h2>
<div class="login">
<form method="post" action="">
<p>用户名:<input type="text" name="username"></p>
<p>密 码:<input type="password" name="password"></p>
<p><input type="submit" name="send" value="登录"></p>
<p>[<a href="?">返回上一层]</a></p>
</form>
</div>
login.png
5、mumber.inc.php
<h2>欢迎回来</h2>
<div class="member">
<p>欢迎回来,[<?php if (isset($_COOKIE["user"])) echo $_COOKIE["user"]?>]</p>
<p>[<a href="?">返回首页</a>]</p>
</div>
member.png
二、业务关系结构图
-
在业务逻辑上,Main.class.php作为主入口调用各个模块处理的功能,比如:User.class.php(登录注册处理父类)、Register.class.php(注册类)、Login.class.php(登录类)、Tool.class.php(工具类)。
1、Main.class.php
//主类,控制页面载入,处理数据
class Main
{
private $_index;
private $_send;
//构造方法,用来初始化数据
public function __construct($_index="")
{
$this->_index = $_index;
if (isset($_POST["send"])) {
$this->_send = $_POST["send"];
}
}
//总管
public function _run() {
//调用注册登录方法
$this->_send();
//载入界面
include $this->_ui();
}
//创建一个载入界面的方法
//这个方法,我想得到login.inc.php这个字符串
private function _ui()
{
if (empty($this->_index)|| !file_exists($this->_index.".inc.php")) {
$this->_index = "start";
}
return $this->_index.".inc.php";
}
//创建一个方法来接收登录和注册发送的操作
private function _send()
{
switch ($this->_send) {
case "注册":
$this->_exec(new Register($_POST["username"],$_POST["password"],$_POST["notpassword"],$_POST["email"]));
break;
case "登录":
$this->_exec(new Login($_POST["username"],$_POST["password"]));
break;
}
}
//创建一个执行的方法,里面传一个参数,是Reg或者Login类的对象引用
private function _exec($_class)
{
if ($_class->_check()) {
$_class->_query();
} else {
Tool::_alertBack("字段不能为空");
}
}
2、User.class.php
//这个用户类,规范子类的字段和方法
//这是个抽象类,不可以实例化只能是子类继承
abstract class User
{
//成员字段
protected $_username;
protected $_password;
protected $_notpassword;
protected $_email;
//一个方法,登录和注册
//如果你点了登录,就执行这个方法登录
//如果你点了注册,就执行这个方法注册
abstract function _query();
//验证
abstract function _check();
}
3、Register.class.php
class Register extends User
{
//写一构造方法来接收表单的值
public function __construct($_userName,$_passWord,$_notPassWord,$_eMail)
{
$this->_username = $_userName;
$this->_password = $_passWord;
$this->_notpassword = $_notPassWord;
$this->_email = $_eMail;
}
//将信息注册到xml里
public function _query()
{
//xml字符串
$_xml = <<<_xml
<?xml version="1.0" encoding="utf-8"?>
<user>
<username>$this->_username</username>
<password>$this->_password</password>
<email>$this->_email</email>
</user>
_xml;
//创建simplexml类
$_sex = new SimpleXMLElement($_xml);
//生成xml
$_sex->asXML("user.xml");
//跳转到login.inc.php页面
Tool::_alertLocation("恭喜您,注册成功","?index=login");
}
# 注册验证,只是限定不能为空
public function _check()
{
if (empty($this->_username)||
empty($this->_password)||
empty($this->_notpassword)||
empty($this->_email) ){
return false;
}
return true;
}
}
4、Login.class.php
class Login extends User
{
public function __construct($_username,$_password)
{
$this->_username = $_username;
$this->_password = $_password;
}
//从xml里读出信息
public function _query()
{
//载入xml文件
$_sex = simplexml_load_file("user.xml");
if ($this->_username == $_sex->username && $this->_password == $_sex->password) {
//生成一个cookies
setcookie("user",$this->_username);
Tool::_alertLocation($this->_username."欢迎回来","?index=member");
} else {
Tool::_alertBack("登录失败");
}
}
# 登录验证,只是验证不能为空
public function _check()
{
if (empty($this->_username) || empty($this->_password)) {
return false;
}
return true;
}
}
5、Tool.class.php
//辅助工具类,里面存放的都是静态方法,直接调用,无需实例化
class Tool
{
//弹出一个信息,然后跳转到指定的页面
static public function _alertLocation($_info,$_url)
{
echo "<script>alert('$_info');location.href='$_url';</script>";
exit();
}
//弹窗返回之前
static public function _alertBack($_info)
{
echo "<script>alert('$_info');history.back()</script>";
exit();
}
}
总结
本程序使用到了OOP和XML技术来注册、登录。使用到了类和面向对象创建程序的思维和方法。
网友评论