亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? adodb.php

?? asterisk用 的voip記費軟件
?? PHP
字號:
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 4                                                        |
// +----------------------------------------------------------------------+
// |                                                                      |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license,      |
// | that is bundled with this package in the file LICENSE, and is        |
// | available at through the world-wide-web at                           |
// | http://www.php.net/license/2_02.txt.                                 |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | license@php.net so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Authors: Martin Jansen <mj@php.net>
// |	Richard Tango-Lowy <richtl@arscognita.com>                                  |
// +----------------------------------------------------------------------+
//
// $Id: ADOdb.php,v 1.3 2005/05/18 06:58:47 jlim Exp $
//

require_once 'Auth/Container.php';
require_once 'adodb.inc.php';
require_once 'adodb-pear.inc.php';
require_once 'adodb-errorpear.inc.php';

/**
 * Storage driver for fetching login data from a database using ADOdb-PHP.
 *
 * This storage driver can use all databases which are supported
 * by the ADBdb DB abstraction layer to fetch login data.
 * See http://php.weblogs.com/adodb for information on ADOdb.
 * NOTE: The ADOdb directory MUST be in your PHP include_path!
 *
 * @author   Richard Tango-Lowy <richtl@arscognita.com>
 * @package  Auth
 * @version  $Revision: 1.3 $
 */
class Auth_Container_ADOdb extends Auth_Container
{

    /**
     * Additional options for the storage container
     * @var array
     */
    var $options = array();

    /**
     * DB object
     * @var object
     */
    var $db = null;
    var $dsn = '';
	
    /**
     * User that is currently selected from the DB.
     * @var string
     */
    var $activeUser = '';

    // {{{ Constructor

    /**
     * Constructor of the container class
     *
     * Initate connection to the database via PEAR::ADOdb
     *
     * @param  string Connection data or DB object
     * @return object Returns an error object if something went wrong
     */
    function Auth_Container_ADOdb($dsn)
    {
        $this->_setDefaults();
		
        if (is_array($dsn)) {
            $this->_parseOptions($dsn);

            if (empty($this->options['dsn'])) {
                PEAR::raiseError('No connection parameters specified!');
            }
        } else {
        	// Extract db_type from dsn string.
            $this->options['dsn'] = $dsn;
        }
    }

    // }}}
    // {{{ _connect()

    /**
     * Connect to database by using the given DSN string
     *
     * @access private
     * @param  string DSN string
     * @return mixed  Object on error, otherwise bool
     */
     function _connect($dsn)
    {
        if (is_string($dsn) || is_array($dsn)) {
        	if(!$this->db) {
	        	$this->db = &ADONewConnection($dsn);
	    		if( $err = ADODB_Pear_error() ) {
	   	    		return PEAR::raiseError($err);
	    		}
        	}
        	
        } else {
            return PEAR::raiseError('The given dsn was not valid in file ' . __FILE__ . ' at line ' . __LINE__,
                                    41,
                                    PEAR_ERROR_RETURN,
                                    null,
                                    null
                                    );
        }
        
        if(!$this->db) {
        	return PEAR::raiseError(ADODB_Pear_error());
        } else {
        	return true;
        }
    }

    // }}}
    // {{{ _prepare()

    /**
     * Prepare database connection
     *
     * This function checks if we have already opened a connection to
     * the database. If that's not the case, a new connection is opened.
     *
     * @access private
     * @return mixed True or a DB error object.
     */
    function _prepare()
    {
    	if(!$this->db) {
    		$res = $this->_connect($this->options['dsn']);  		
    	}
        return true;
    }

    // }}}
    // {{{ query()

    /**
     * Prepare query to the database
     *
     * This function checks if we have already opened a connection to
     * the database. If that's not the case, a new connection is opened.
     * After that the query is passed to the database.
     *
     * @access public
     * @param  string Query string
     * @return mixed  a DB_result object or DB_OK on success, a DB
     *                or PEAR error on failure
     */
    function query($query)
    {
        $err = $this->_prepare();
        if ($err !== true) {
            return $err;
        }
        return $this->db->query($query);
    }

    // }}}
    // {{{ _setDefaults()

    /**
     * Set some default options
     *
     * @access private
     * @return void
     */
    function _setDefaults()
    {
    	$this->options['db_type']	= 'mysql';
        $this->options['table']       = 'auth';
        $this->options['usernamecol'] = 'username';
        $this->options['passwordcol'] = 'password';
        $this->options['dsn']         = '';
        $this->options['db_fields']   = '';
        $this->options['cryptType']   = 'md5';
    }

    // }}}
    // {{{ _parseOptions()

    /**
     * Parse options passed to the container class
     *
     * @access private
     * @param  array
     */
    function _parseOptions($array)
    {
        foreach ($array as $key => $value) {
            if (isset($this->options[$key])) {
                $this->options[$key] = $value;
            }
        }

        /* Include additional fields if they exist */
        if(!empty($this->options['db_fields'])){
            if(is_array($this->options['db_fields'])){
                $this->options['db_fields'] = join($this->options['db_fields'], ', ');
            }
            $this->options['db_fields'] = ', '.$this->options['db_fields'];
        }
    }

    // }}}
    // {{{ fetchData()

    /**
     * Get user information from database
     *
     * This function uses the given username to fetch
     * the corresponding login data from the database
     * table. If an account that matches the passed username
     * and password is found, the function returns true.
     * Otherwise it returns false.
     *
     * @param   string Username
     * @param   string Password
     * @return  mixed  Error object or boolean
     */
    function fetchData($username, $password)
    {
        // Prepare for a database query
        $err = $this->_prepare();
        if ($err !== true) {
            return PEAR::raiseError($err->getMessage(), $err->getCode());
        }

        // Find if db_fields contains a *, i so assume all col are selected
        if(strstr($this->options['db_fields'], '*')){
            $sql_from = "*";
        }
        else{
            $sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields'];
        }
        
        $query = "SELECT ".$sql_from.
                " FROM ".$this->options['table'].
                " WHERE ".$this->options['usernamecol']." = " . $this->db->Quote($username);
        
        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
        $rset = $this->db->Execute( $query );
        $res = $rset->fetchRow();

        if (DB::isError($res)) {
            return PEAR::raiseError($res->getMessage(), $res->getCode());
        }
        if (!is_array($res)) {
            $this->activeUser = '';
            return false;
        }
        if ($this->verifyPassword(trim($password, "\r\n"),
                                  trim($res[$this->options['passwordcol']], "\r\n"),
                                  $this->options['cryptType'])) {
            // Store additional field values in the session
            foreach ($res as $key => $value) {
                if ($key == $this->options['passwordcol'] ||
                    $key == $this->options['usernamecol']) {
                    continue;
                }
                // Use reference to the auth object if exists
                // This is because the auth session variable can change so a static call to setAuthData does not make sence
                if(is_object($this->_auth_obj)){
                    $this->_auth_obj->setAuthData($key, $value);
                } else {
                    Auth::setAuthData($key, $value);
                }
            }

            return true;
        }

        $this->activeUser = $res[$this->options['usernamecol']];
        return false;
    }

    // }}}
    // {{{ listUsers()

    function listUsers()
    {
        $err = $this->_prepare();
        if ($err !== true) {
            return PEAR::raiseError($err->getMessage(), $err->getCode());
        }

        $retVal = array();

        // Find if db_fileds contains a *, i so assume all col are selected
        if(strstr($this->options['db_fields'], '*')){
            $sql_from = "*";
        }
        else{
            $sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields'];
        }

        $query = sprintf("SELECT %s FROM %s",
                         $sql_from,
                         $this->options['table']
                         );
        $res = $this->db->getAll($query, null, DB_FETCHMODE_ASSOC);

        if (DB::isError($res)) {
            return PEAR::raiseError($res->getMessage(), $res->getCode());
        } else {
            foreach ($res as $user) {
                $user['username'] = $user[$this->options['usernamecol']];
                $retVal[] = $user;
            }
        }
        return $retVal;
    }

    // }}}
    // {{{ addUser()

    /**
     * Add user to the storage container
     *
     * @access public
     * @param  string Username
     * @param  string Password
     * @param  mixed  Additional information that are stored in the DB
     *
     * @return mixed True on success, otherwise error object
     */
    function addUser($username, $password, $additional = "")
    {
        if (function_exists($this->options['cryptType'])) {
            $cryptFunction = $this->options['cryptType'];
        } else {
            $cryptFunction = 'md5';
        }

        $additional_key   = '';
        $additional_value = '';

        if (is_array($additional)) {
            foreach ($additional as $key => $value) {
                $additional_key .= ', ' . $key;
                $additional_value .= ", '" . $value . "'";
            }
        }

        $query = sprintf("INSERT INTO %s (%s, %s%s) VALUES ('%s', '%s'%s)",
                         $this->options['table'],
                         $this->options['usernamecol'],
                         $this->options['passwordcol'],
                         $additional_key,
                         $username,
                         $cryptFunction($password),
                         $additional_value
                         );

        $res = $this->query($query);

        if (DB::isError($res)) {
           return PEAR::raiseError($res->getMessage(), $res->getCode());
        } else {
          return true;
        }
    }

    // }}}
    // {{{ removeUser()

    /**
     * Remove user from the storage container
     *
     * @access public
     * @param  string Username
     *
     * @return mixed True on success, otherwise error object
     */
    function removeUser($username)
    {
        $query = sprintf("DELETE FROM %s WHERE %s = '%s'",
                         $this->options['table'],
                         $this->options['usernamecol'],
                         $username
                         );

        $res = $this->query($query);

        if (DB::isError($res)) {
           return PEAR::raiseError($res->getMessage(), $res->getCode());
        } else {
          return true;
        }
    }

    // }}}
}

function showDbg( $string ) {
	print "
-- $string</P>";
}
function dump( $var, $str, $vardump = false ) {
	print "<H4>$str</H4><pre>";
	( !$vardump ) ? ( print_r( $var )) : ( var_dump( $var ));
	print "</pre>";
}
?>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄色网址在线观看| 欧美激情综合网| 亚洲国产高清aⅴ视频| 亚洲风情在线资源站| 成人免费毛片高清视频| 日韩一卡二卡三卡国产欧美| 国产精品美女www爽爽爽| 青青草91视频| 欧美亚洲综合网| 国产精品美日韩| 国产麻豆91精品| 日韩欧美国产三级| 亚洲国产精品久久不卡毛片| 99久久婷婷国产综合精品电影| 精品国产不卡一区二区三区| 日本大胆欧美人术艺术动态| 欧美三级蜜桃2在线观看| 亚洲乱码中文字幕| 91免费看`日韩一区二区| 中文字幕欧美三区| 国产91丝袜在线播放九色| 久久影院午夜论| 狠狠色丁香久久婷婷综合_中 | 亚洲一区二区三区四区五区黄| 久草中文综合在线| 91精品国产色综合久久不卡蜜臀 | 久久精品国产精品青草| 欧美日韩激情一区| 一区二区久久久久久| 处破女av一区二区| 国产精品久久久久久久久久久免费看 | 欧美精品亚洲二区| 日韩国产在线一| 欧美日韩成人综合天天影院| 无码av免费一区二区三区试看| 欧美三片在线视频观看| 午夜电影网一区| 欧美福利视频一区| 青青草视频一区| 日韩欧美国产高清| 国产精品资源站在线| 国产日韩在线不卡| 成人国产精品免费网站| 亚洲精品网站在线观看| 91官网在线观看| 天天影视网天天综合色在线播放| 91精品视频网| 国产成人免费视频网站高清观看视频 | 在线视频观看一区| 午夜影院在线观看欧美| 日韩精品中文字幕一区二区三区 | 久久69国产一区二区蜜臀| 久久蜜桃一区二区| 色就色 综合激情| 日韩电影免费在线观看网站| 久久影院午夜论| 色噜噜狠狠成人网p站| 日韩一区欧美二区| 欧美—级在线免费片| 欧洲精品视频在线观看| 久久99国产精品麻豆| 中文字幕亚洲精品在线观看| 欧美老女人在线| 高清不卡一区二区在线| 亚洲福利视频一区二区| 久久久久成人黄色影片| 欧美日韩一本到| 成人精品一区二区三区中文字幕| 亚洲一线二线三线视频| 国产日韩欧美精品综合| 777精品伊人久久久久大香线蕉| 福利电影一区二区| 秋霞午夜鲁丝一区二区老狼| 亚洲欧洲性图库| 精品欧美一区二区久久| 欧美性色黄大片手机版| 成人午夜伦理影院| 蜜桃精品在线观看| 伊人色综合久久天天| 久久久精品影视| 日韩限制级电影在线观看| 色噜噜狠狠成人中文综合| 国产乱子轮精品视频| 亚洲777理论| 亚洲激情六月丁香| 国产亚洲欧洲一区高清在线观看| 欧美日韩另类国产亚洲欧美一级| 成人激情电影免费在线观看| 麻豆成人av在线| 亚洲国产成人av好男人在线观看| 欧美国产日韩在线观看| 26uuu精品一区二区在线观看| 色噜噜狠狠成人网p站| 成人av免费观看| 成人性视频免费网站| 国产一区 二区 三区一级| 日韩国产欧美三级| 香蕉成人啪国产精品视频综合网| 亚洲精品自拍动漫在线| 自拍偷在线精品自拍偷无码专区| 亚洲国产高清在线| 中文字幕欧美国产| 国产午夜精品一区二区三区视频 | 狠狠色综合色综合网络| 日本伊人色综合网| 日本不卡一二三区黄网| 日本特黄久久久高潮| 亚洲国产美女搞黄色| 亚洲精选一二三| 一区二区三区四区亚洲| 亚洲综合激情另类小说区| 亚洲精品日韩一| 樱桃国产成人精品视频| 亚洲国产精品久久人人爱| 亚洲一二三专区| 亚洲444eee在线观看| 免费人成在线不卡| 蜜臀av亚洲一区中文字幕| 久久精品免费看| 黄页视频在线91| 成人免费毛片高清视频| 色域天天综合网| 精品视频一区 二区 三区| 在线播放91灌醉迷j高跟美女| 在线综合亚洲欧美在线视频| 日韩欧美国产一区在线观看| 久久众筹精品私拍模特| 亚洲国产精品精华液2区45| 亚洲欧美日韩在线| 天天影视网天天综合色在线播放| 男人操女人的视频在线观看欧美| 精彩视频一区二区| av成人免费在线| 欧美日韩一区二区电影| 2014亚洲片线观看视频免费| 亚洲国产精品黑人久久久| 亚洲激情在线激情| 看电视剧不卡顿的网站| 成人动漫视频在线| 色吧成人激情小说| 精品日韩在线一区| 日韩一区在线看| 日韩va亚洲va欧美va久久| 国产高清视频一区| 欧美日韩一区中文字幕| 精品少妇一区二区三区在线播放 | www.激情成人| 欧美日韩国产一区二区三区地区| 欧美岛国在线观看| 亚洲免费在线观看| 卡一卡二国产精品| 在线免费不卡电影| 久久精品夜色噜噜亚洲aⅴ| 亚洲精品国产品国语在线app| 麻豆精品视频在线观看| 91免费看片在线观看| 精品国精品国产尤物美女| 亚洲精品一二三区| 国产一区二三区好的| 欧美视频中文字幕| 国产亚洲精品免费| 天堂午夜影视日韩欧美一区二区| 成人在线一区二区三区| 制服丝袜日韩国产| 亚洲精品久久久久久国产精华液| 国产麻豆91精品| 在线不卡免费av| 亚洲综合一区二区| 粉嫩av一区二区三区| 欧美一区二区三区人| 一区二区在线观看av| 风间由美性色一区二区三区| 日韩午夜三级在线| 亚洲h动漫在线| 色婷婷亚洲婷婷| 国产精品对白交换视频| 国产一区在线观看麻豆| 7777精品伊人久久久大香线蕉的| 亚洲视频狠狠干| 国产成人综合自拍| 精品99999| 美女在线观看视频一区二区| 欧美另类videos死尸| 亚洲国产视频直播| 欧美性受xxxx黑人xyx| 国产精品国产精品国产专区不蜜 | 国产精品久久看| 高清在线成人网| 国产夜色精品一区二区av| 国产一区在线精品| 久久久久免费观看| 国产成人在线视频网站| 久久久天堂av| 国产一区不卡视频| 国产情人综合久久777777| 国产精品888| 久久九九久久九九| 成人久久视频在线观看| ●精品国产综合乱码久久久久 | 国产精品美女久久久久久久久久久 |