美文网首页程序员
PHP用户注册系统动手实践

PHP用户注册系统动手实践

作者: 夏元 | 来源:发表于2015-08-28 16:15 被阅读184次

源起

借来一本书,《PHP&MySQL范例精解——创建、修改、重用》。虽然是2008年出版的老书,但对与我这样的新手来说还是挺有帮助的,毕竟那些基本的设计思想是不会过时的。

目录结构设计

书中说,在开发过程中第一步是设计程序的目录结构。建议创建三个主文件夹,分别用来:

  • public_files:保存可以公共访问的页面;
  • lib:保存可以被其他文件调用的引用文件;
  • templates:保存页面显示文件。

Web服务器只允许访问public_files下的文件,如此一来可以增强系统的安全性。

数据库设计

将使用次数很少甚至只有一次的数据单独存放在一个表中并及时删除,以避免数据冗余。
例如,此书就将用户激活相关的信息单独放在了一个表中。因为这些信息只在激活时用到一次,用完即删。

编写共享代码

将共享的代码及链接数据库的代码分别存在在一个文件中,增加代码的重用度,方便其他文件调用。

User类的设计

在MVC思想中该部分属于model的设计。
在设计一个类的时候应牢记,在面向对象编程中,对象即对应着生活中的实体。类的属性用于描述对象,而类的方法则用于直接操作对象或者做一些与该对象相关的操作。
对于一个用户类而言,首先要有用户ID、用户名、密码等这些用户信息,是为该类的属性。再者,我们需要对用户进行查找、创建、更新信息、激活等操作,于是便有与之对应的方法来完成这些操作。

属性的重载

此书使用了重载的放松来动态地创建属性。这样做的好处是若以后要新增一些属性几乎不用对代码作出改动,直接调用这些需要添加的属性,就行了。
利用重载来动态创建属性与直接再代码中添加一个新的属性是不一样的。属性的重载利用了魔术方法__get()和__set()。在给不可访问属性(未定义或不可见)赋值时,__set()会被调用;在读取不可访问属性的值时__get()会被调用。一般通过__set()将重载的属性的数据保存到一个私有数组字段中,需要读取重载的属性时又通过__get()从这个私有数组字段中读取。示例代码如下:

class User
{
    private $uid;
    private $field;

    //initialize a User object
    public function __construct()
    {
        $this->uid = null;
        $this->field = array('username' => '',
            'password' => '',
            'emailAddr' => '',
            'isActive' => false);
    }

    //override magic method to retrieve properties
    public function __get($field)
    {
        if($field == 'userId'){
            return $this->uid;
        }else{
            return $this->field[$field];
        }
    }

    //override magic method to set properties
    public function __set($field, $value)
    {
        if(array_key_exists($field, $this->field)){
            $this->field[$field] = $value;
        }
    }
}

需要注意的是PHP中的重载与其他语言的不同。其他语言的重载一般是指同函数名称不同参数个数从而实现同名的多个函数。关于PHP重载的更多内容见PHP手册:重载

对数据进行验证

在对数据进行处理之前需要对数据进行验证。当数据验证为是我们期望的那样之后再对数据进行处理。否则可能会出现不可预知的错误。新手往往可能会忽视这一点。
例如在PHP的代码中经常会出现检测某个量是否为空,若非空再进行操作。

动态的SQL语句

实现查找、保存等方法是需要用到动态的SQL语句。此书通过sprintf()函数来实现。sprintf()函数类似与C#中的String.Format()。然而这种方式略繁琐,个人感觉目前会有更好的方式。
当使用sprintf()函数实现动态SQL时,对于较复杂的字符串参数需要使用real_escape_string()函数进行转义,以确保代码的安全性。(编码问题貌似一般和SQL注入有关)。

模板

使用模板可以将逻辑和页面设计分离。此书在这里使用了一个简单的模板:将页面各个部分的内容保存到$GLOBALS数组中,模板文件在各个部分直接输出数组的内容。因此若想动态的展示页面,只需修改$GLOBALS中的内容,再展示模板文件即可。

结语

本文是一篇简单的学习笔记,主要是帮助自己整理思路,如果能对其他人也有一些帮助就更好了~【用markdown写东西确实也挺爽的

相关文章

  • PHP用户注册系统动手实践

    源起 借来一本书,《PHP&MySQL范例精解——创建、修改、重用》。虽然是2008年出版的老书,但对与我这样的新...

  • php注册登录系统开发实战

    php用户注册登录系统之验证码制作 验证码的分析 登录注册页面设置验证码主要是为了防止暴力破解、恶意注册等情况的发...

  • 【推荐系统实践-03】推荐系统冷启动

    项亮老师的《推荐系统实践》学习笔记​。 目录 1、冷启动问题简介 2、利用用户注册信息 3、选择合适的物品启动用户...

  • Django实践(七)房贷计算器

    上一章我们在Django实践(六)房贷计算器中,达成了用户注册登陆系统,这样可以保证用户在自己的账号下录入数据,由...

  • APNS(苹果推送通知服务)

    一、 推送流程 注册部分 1、我们的应用向系统注册推送2、系统向用户询问是否允许推送3、用户允许后系统会向苹果推送...

  • Laravel 基础学习 第二天

    用户注册页面的实现 创建控制器 php artisan make:controller UserControlle...

  • 登录注册

    登录系统 登录系统的账号有两种来源 1.自己注册 2.老用户邀请 注册 访问vkanban系统,点击注册链接跳转到...

  • laravel表单构建

    以构建用户注册表单resources/views/users/create.blade.php为例: csrf验证...

  • 用户注册/登录模块实践

    用户注册/登录模块实践 前言 最近负责的网站项目正式进入开发阶段,首先面临的当然就是用户登录模块的设计与实现了。说...

  • Jenkins(四)用户配置

    1、系统管理-用户配置 1.1、用户注册1.2、管理员创建用户

网友评论

    本文标题:PHP用户注册系统动手实践

    本文链接:https://www.haomeiwen.com/subject/buhkcttx.html