首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > PHP > Mojavi入门--第七章:生成query的类,session,用户认证功能
【标  题】:Mojavi入门--第七章:生成query的类,session,用户认证功能
【关键字】:Mojavi,--,query,session
【来  源】:http://blog.csdn.net/dls_7788/archive/2006/09/16/1232136.aspx

Mojavi入门--第七章:生成query的类,session,用户认证功能

第七章:生成query的类,session,用户认证功能
1.生成query的类SQLStatement
     SQLStatement类,在SQLStatement实例中登录字段名后,可以进行生成query,添加或删除字段名,控制字段名等操作。例如:
/webapp/modules/Mochat/actions/IndexAction.class.php的向数据库中插入数据            
         //得到要插入的数据
            $name = $DB->qstr($request->getParameter('name'));
            $comment = $DB->qstr($request->getParameter('comment'));
            //保存数据
            $sql = "INSERT INTO t_comment(name,comment) VALUES ($name,$comment)"; 
如果改成用SQLStatement操作            
           //调用并实例化
            require_once(OPT_DIR . 'sql/SQLStatement.class.php');
            $sqlst = new SQLStatement();
            //登陆数据的字段名
            $sqlst->setStringAttribute('name',$request->getParameter('name'));
            $sqlst->setStringAttribute('comment',$request->getParameter('comment'));
            //クエリ?作成
            $sql = $sqlst->prepare('INSERT INTO t_comment (%A{names}) VALUES (%A{values})'); 
    使用SQLStatement的setStringAttribute()方法时,登陆字段名和数据后,在prepare()函数%A{names}中的内容是用逗号分割的字段名,%A{values}中的内容是用逗号分割的字段值。setStringAttribute()会自动执行特殊字符(如字符内有「'」sql会出错)及用「'」扩起的处理。
    的AutoExecute()函数的功能与SQLStatementADOdb相近。

2.SQLStatement
    SQLStatement的地址/mojavi/opt/sql/SQLStatement.class.php
    require_once(OPT_DIR . 'sql/SQLStatement.class.php');  
    调用
    $sqlst = new SQLStatement();生成实例
    主要是用以下两种方法将字段名和值登录到SQLstatement对象中。
 void setRawAttribute (string $name, mixed $value)
    在Attribute内用$name做键$value设。此时尚未处理$value。
    例:$sqlst->setRawAttribute('number','110');
void setStringAttribute (string $name, mixed $value)
    在Attribute内用$name做键$value设。与setRawAttribute不同,$value已被处理。(处理特殊字符和用‘’扩起$value)
    例:$sqlst->setStringAttribute('messages','This is test message.');
    此时$sqlst->attribute[messages]的值为'This is test message.'。 
    setStringAttribute()是主要针对字符串的函数,会自动对字符串做一些特殊处理。setRawAttribute()是针对数值型的函数,不对字符串作特殊处理。
    $name主要作为字段名,$value主要作为字段值是用。还有setRawValue(),setStringValue()等方法,不再详述。

    登陆后的数据可用prepare()函数调出。
string &prepare (string $statement)
  参数的字符串中可使用如下的控制代码
%a{name} 是attribute[name]的值
例 %a{title} → Test
%A{names|values} 用逗号分割的字段名或字段值
例 %A{names} → id, title, messages 、 %A{values} → 'TestID', 'test', 'This is test message.'
%C{constant} php的预设值
例 %C{BASE_DIR} → /workspace/mojavi/
%e attribute显示成name=value
例 %e → ID = 'TestID', title = 'test', messages = 'This is test message.'
%n 换行
 
    调用SQLStatement.class.php:require_once(OPT_DIR . 'sql/SQLStatement.class.php');
    SQLStatement实例化:$sqlst = new SQLStatement();
    用setStringAttribute和setRawAttribute登陆数据:$sqlst->setStringAttribute('title','test');
    插入数据:$sql = $sqlst->prepare('INSERT INTO テ?ブル名(%A{names}) VALUES (%A{values})');
    更新数据:$sql = $sqlst->prepare("UPDATE テ?ブル名 SET %e WHERE ~");
    void removeAttribute(string $name)
    通过$name删除字段属性
    void clearAttributes()
    删除所有字段属性
3.session
    Mojavi通过User对象(Action的execute之类的参数$user)来使用session功能。
    User的使用方法与Request几乎相同,对$user进行setAttribute()和removeAttribute()操作。看如下例子:
/webapp/modules/Mochat/actions/IndexAction.class.php     /*
     * GET方式:读文件
     */
    function getDefaultView (&$controller, &$request, &$user)
    {
        …
        //设字段
        $request->setAttribute('data', $data);
       
        //从session中读入姓名
        $request->setAttribute('name',$user->getAttribute('name'));
               
        return VIEW_INPUT;
    }

   
    /*
     * POSTの方式:追加文件
     */
    function Execute (&$controller, &$request, &$user)
    {
        …
           
        //将姓名存入session中
        $user->setAttribute('name',$request->getParameter('name'));
           
        $module = $controller->getRequestModule();  //模块名
        $controller->redirect("?module=$module");
    } 
在session的有效时间内(默认180分钟)名字被保存在session内。
    在使用类似手机这样不能使用cookie的浏览器时,session被写入URL中,在编译PHP时如果不设定--enable-trans-sid(自动将session写入URL)的话session就会中断。
    User不能自动序列化,对象被存入session中时需要手动序列化。
4.Mojavi的认证功能
    认证功能主要有两步:用户认证,登陆权限。
5.用户认证
    为能使用认证功能,在需要使用认证的Action中,写入isSecure()函数,当需要认证时返回TRUE否则返回FALSE。
function isSecure ()
    {
        return TRUE;
    } 
所有Action的父类Action类已经定义了isSecure()函数,在未被重写的情况下通常返回FALSE。
    如果使用户被认证,需对User对象设置如下方法void setAuthenticated(bool $status)
    当$status为TRUE时认证,否则为FALSE时未认证。
    判断是否被认证用bool isAuthenticated()
    返回TRUE时为被认证,返回FALSE时为未被认证。

    未认证的状态下与isSecure()设为TRUE的Action相连接时,将被转送到在config.php内被按如下设置的程序中处理(默认情况下是Default模块的GlobalSecure程序)
 define('AUTH_MODULE', 'Default');
define('AUTH_ACTION', 'Login');
6.设定权限
    认证后,如果想要设置权限的话,在Action内需设置可返回权限名的函数getPrivilege()。
    function getPrivilege (&$controller, &$request, &$user)
{
    return array('权限名', '权限namespace(可省略,默认为org.mojavi)');

   
父类Action类中该函数已经被定义,默认的返回值是NULL(不设权限)
    namespace是权限的分类名,不指定的话也没关系。(内部处理时,在处理权限时,数组$namespace[$name]被设值时表示允许处理,未被设值表示不允许处理。namespace是数组,权限名是数组的键)

User的权限,User的如下函数群中设定。
void addPrivilege(string $name, [string $namespace = 'org.mojavi'])
    User中追加权限。$name权限名、$namespace
void  &removePrivilege(string $name, [string $namespace = 'org.mojavi'])
    删除User权限
void removePrivileges([string $namespace = 'org.mojavi'])
    删除指定的$namespace的所有权限。
login同时,权限也被设定

在没有权限的情况下,将被转送到在config.php内被按如下设置的程序中处理。(默认情况下是Default模块的GlobalSecure程序) define('SECURE_MODULE', 'Default');
define('SECURE_ACTION', 'GlobalSecure'); 
7.Login示例
   以下是填入用户名和密码,利用数据库进行认证处理和添加权限的例子。
<?php
require_once(LIB_DIR . 'DBAction.class.php');

class LoginAction extends DBAction
{
   
    /*
     * GET方式:输入画面
     */
    function getDefaultView (&$controller, &$request, &$user)
    {
        return VIEW_INPUT;
    }

   
    /*
     * POST方式:认证
     */
    function Execute (&$controller, &$request, &$user)
    {
        $DB = $request->getAttribute('DB');
       
        $id = $db->qstr($request->getParameter('id'));
        $pass = $db->qstr($request->getParameter('pass'));
        $sql = "SELECT Privilege FROM t_user WHERE id = $id AND pass = $pass";
       
        if($array = $db->GetRow($sql)){
            //认证成功
            $user->setAuthenticated(true);
           
            if($array['Privilege'] == 'admin') {
             //如果是管理者添加特权
             $user->addPrivilege('ADMIN');
            }
        }else{
            //认证失败
            return VIEW_INPUT;
        }
       
        //成功画面
        return VIEW_SUCCESS;
    }
 
    function getRequestMethods ()
    {
        return REQ_POST;
    }
   
    //校验功能有效
    function validate (&$controller, &$request, &$user)
    {
        return TRUE;
    }
   
    //Validator登陆
    function registerValidators (&$validatorManager, &$controller, &$request, &$user)
    {   
        //用户名密码必填
        $validatorManager->setRequired('id', TRUE, '用户名必填');
        $validatorManager->setRequired('pass', TRUE,'密码必填');
    }
   
    //错误处理
    function handleError (&$controller, &$request, &$user)
    {
        return VIEW_INPUT;
    }
}
?> 

在显示和模板完成后,在需要设置访问权限的Action内写unction isSecure()和function getPrivirage()即可。

<?php
class SampleAction extends Action
{
    /*
    * GET:成功画面
    */
    function getDefaultView (&$controller, &$request, &$user)
    {
    return VIEW_SUCCESS;
    }
   
    function getRequestMethods ()
    {
        return REQ_NONE;
    }
   
    function isSecure ()
    {
        return true;
    }
   
    function getPrivilege (&$controller, &$request, &$user)
    {
        return array('ADMIN');
    }
}
?> 

============================================================================

整篇资料就这些了,希望对大家有帮助。
 

我心目中的女神,,,居然有人叫自己男人一样的神?!:【上一篇】
Mojavi入门--第六章:数据库连接程序库:【下一篇】
【相关文章】
  • HOW TO:利用Excel的QueryTable下载网上数据
  • 在类中创建线程(VC)----转载
  • XML语法分析器-VC中使用--转载
  • JDOM操作XML文件--转载
  • windows核心编程--线程池
  • windows核心编程--纤程
  • 关于原始输入--XP中的新技术(原创,转载请注明出处)
  • 汇编语言的准备知识--给初次接触汇编者[转载]
  • Qt--简单的例子
  • RHCA---Red Hat终极认证最新消息!
  • 【随机文章】
  • STL容器的拷贝构造和赋值特性
  • ORACLE 系统紧急故障处理方法
  • 非凡的Altova StyleVision,同源输出HTML,PDF,RTF。
  • ES255-C7:RAID Manager6
  • .NET菜菜鸟三、设计模式
  • ASP:UPFILE_CLASS.ASP
  • Apache模块 mod_rewrite
  • ES222:chapter16-Hot spare pools(overview)
  • Glade-3 下载
  • Loading Kernel from ext2fs
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.