C語言編寫的PHP框架--yaf入門編程

首先--添加dll,修改php.ini--不一樣的版本,不一樣的需求php

 

 

 

 

其次,根據教程http://www.laruence.com/manual/tutorial.firstpage.html#tutorial.directory手動搭建好目錄結構html

 

 

 

 

入口文件index.php位置稍做修改--我的習慣mysql

入口文件內容sql

<?php
header("Content-Type: text/html;charset=utf-8");
define("APP_PATH",  realpath(dirname(__FILE__) . '/../')); /* 指向public的上一級 */
$app  = new Yaf_Application(APP_PATH . "/yaf/conf/application.ini");
$app->run();

配置文件數據庫

配置文件內容數組

[product]
;支持直接寫PHP中的已定義常量
application.directory=APP_PATH "/yaf/application" 

集成了一個數據庫操做類app

 

控制器寫法socket

 

new DBModel();的意思是去models文件夾下找DB.php裏的DBModel類函數

 

DB.phpfetch

 

D:\WWW\yaf\application\models\Mysqli.php

<?php
/**
 * +----------------------------------------------------------------------
 * | WeizePHP [ This is a freeware ]
 * +----------------------------------------------------------------------
 * | Copyright (c) 2013 - 2113 http://75hh.com/weizephp/ All rights reserved.
 * +----------------------------------------------------------------------
 * | Author: 韋澤 <e-mail:weizesw@gmail.com> <QQ:310472156>
 * +----------------------------------------------------------------------
 * | 文件功能:mysqli 數據庫操做、分頁類
 * +----------------------------------------------------------------------
 */



/*

// 使用方法
// define('ROOT_PATH', '..'); // 單獨提取本站的 db_mysqli 類在其餘地方使用時,請注意錯誤日誌 ROOT_PATH 路徑是否正確

$host = 'localhost';
$username = 'root';
$passwd = '';
$dbname = 'weizephp';
$port = 3306;
$socket = NULL;
$dbcharset = 'utf8';
$error_reporting = TRUE; // $error_reporting 爲 FALSE 時,顯示錯誤,適用於開發的時候調試

$DB = new db_mysqli($host, $username, $passwd, $dbname, $port, $socket, $dbcharset, $error_reporting); // 鏈接數據庫

echo '<br>---------------------------- 獲取單條結果 ----------------------------<br><br>';

$sql = "SELECT * FROM `weize_user_admin_log`";
$row = $DB->get_one($sql); // 獲取單條結果
print_r($row);

echo '<br><br>---------------------------- 獲取所有結果 ----------------------------<br><br>';

$sql = "SELECT * FROM `weize_user_admin_log`";
$all = $DB->get_all($sql); // 獲取所有結果
print_r($all);

echo '<br><br>---------------------------- 獲取[分頁]結果 ----------------------------<br><br>';

$sql = "SELECT * FROM `weize_user_admin_log`";
$page_data = $DB->page($sql); // 獲取分頁結果
$showpage = $DB->showpage();  // 獲取上一頁、下一頁的變量
print_r($page_data);          // 輸出分頁數據
echo '<br><br>';
echo $showpage;               // 輸出上一頁、下一頁的HTML字符串

*/



class MysqliModel extends mysqli {
    
    

    

    public $error_reporting = FALSE; // 是否顯示錯誤報告,false爲顯示,true爲不顯示
    public $result = NULL; // 結果集
    
    public $page_count = 0; // 總記錄數,用於分頁
    public $page_all = 0; // 總頁數
    public $page_current = 1; // 當前頁
    public $page_size = 10; // 每頁顯示條數
    
    /**
     * 構造函數
     */
    public function __construct($host, $username, $passwd, $dbname = '', $port = 3306, $socket = NULL, $dbcharset = 'utf8', $error_reporting = TRUE) {
        parent::__construct($host, $username, $passwd, $dbname, $port, $socket);
        if($this->connect_error) {
            if($error_reporting === FALSE) {
                die('Could not connect: (' . $this->connect_errno . ') '. $this->connect_error);
            } else {
                // 記錄鏈接錯誤日誌
                $url = htmlspecialchars($_SERVER['REQUEST_URI']);
                $time = time();
                $date = date('Y-m-d H:i:s', $time);
                $data = "<?php exit; ?> [DATE]$date [URL]$url [CONNECT_ERRNO]". $this->connect_errno ." [CONNECT_ERROR]". $this->connect_error ."\n";
                error_log($data, 3, ROOT_PATH . '/data/log/'.date('Ymd', $time).'_mysql_error.php');
                // 中止程序執行
                //die('Could not connect MySQL.');
            }
        }
        $this->error_reporting = $error_reporting;
        $this->set_charset($dbcharset);
    }
    
    /**
     * 數據庫執行語句,可執行查詢添加修改刪除等任何sql語句
     * 失敗時返回 FALSE,經過 mysqli_query() 成功執行SELECT, SHOW, DESCRIBE或 EXPLAIN查詢會返回一個mysqli_result 對象,其餘查詢則返回TRUE。
     */
    public function query($sql, $resultmode = MYSQLI_STORE_RESULT) {
        $this->result = parent::query($sql, $resultmode);
        if($this->result === FALSE) {
            if($this->error_reporting === FALSE) {
                die('Invalid query: ' . $this->errno . ' '. $this->error. '. SQL: ' . $sql);
            } else {
                // 記錄請求錯誤日誌
                $url = htmlspecialchars($_SERVER['REQUEST_URI']);
                $time = time();
                $date = date('Y-m-d H:i:s', $time);
                $data = "<?php exit; ?> [DATE]$date [URL]$url [QUERY_ERRNO]". $this->errno ." [QUERY_ERROR]". $this->error ."\n";
                error_log($data, 3, ROOT_PATH . '/data/log/'.date('Ymd', $time).'_mysql_error.php');
                // 中止程序執行
                //die('Invalid query.');
            }
        }
        return $this->result;
    }
    
    /**
     * 獲取一條數據,若是沒有數據返回空數組
     * @param array
     */
    public function get_one($sql) {
        $res = $this->query($sql);
        if ($res !== FALSE) {
            $row = $res->fetch_assoc();
            if(!empty($row)) {
                return $row;
            } else {
                return array();
            }
        } else {
            return array();
        }
    }
    
    /**
     * 獲取全部數據,若是沒有數據返回空數組
     */
    public function get_all($sql) {
        $res = $this->query($sql);
        if ($res !== FALSE) {
            //$arr = $result->fetch_all($resulttype); // MYSQLI_NUM,MYSQLI_ASSOC,MYSQLI_BOTH (PHP 5 >= 5.3.0)
            $arr = array();
            while($row = $res->fetch_assoc()) {
                $arr[] = $row;
            }
            $res->free(); // free result set
            return $arr;
        } else {
            return array();
        }
    }
    
    /**
     * +-----------------------------------
     * | 分頁
     * +-----------------------------------
     * | 使用實例:
     * | $DB = new db_mysqli(...);
     * | $page_data = $DB->page("SELECT * FROM `test`"); // 獲取數據
     * | $showpage = $DB->showpage(); // 生成分頁連接
     * | print_r($page_data);
     * | echo $showpage; // 輸出分頁連接
     * +-----------------------------------
     */
    public function page($sql, $page_size = 10) {
        // 總記錄數
        $this->page_count = $this->query($sql)->num_rows;
        if($this->page_count > 0) {
            // 總頁數
            $this->page_all = ceil($this->page_count / $page_size);
            // 當前頁
            $this->page_current = ( isset($_GET['page']) && (intval($_GET['page'])>0) ) ? intval($_GET['page']) : 1;
            if($this->page_current > $this->page_all) {
                $this->page_current = $this->page_all;
            }
            // 每頁顯示條數
            $this->page_size = $page_size;
            $sql = $sql . " LIMIT " . (($this->page_current-1) * $this->page_size) . ", " . $this->page_size;            
            return $this->get_all($sql);
        } else {
            return array();
        }
    }
    // 獲取地址欄差數,主要用於分頁時傳遞其餘差數。$unset用於去掉不須要傳值的參數,多個用,隔開
    public function geturl($unset = '') {
        $list = array();
        $keys = explode(',', $unset);
        foreach ($_GET as $key => $val) {
            if (!in_array($key, $keys)) {
                $list[] = $key.'='.urlencode($val);
            }
        }
        return implode('&amp;', $list);
    }
    // 顯示分頁,須要配合page()函數使用,$show_num=TRUE表示顯示數字分頁,不然顯示首頁、上一頁、下一頁、尾頁
    public function showpage($show_num = TRUE) { 
        //echo "123123";
        $page = ''; 
        if($this->page_all > 1) { 
            $url = $this->geturl('page'); 
            $url = empty($url) ? '?page=' : '?'.$url.'&amp;page='; 
            if($this->page_current > 1) { 
                $page .= ' <a href="'.$url.'1">首頁</a> <a href="'.$url.($this->page_current-1).'">上一頁</a> '; 
            } else { 
                $page .= ' <span>首頁</span> <span>上一頁</span> '; 
            } 
     
            if($show_num) { 
                if($this->page_all < 6) { 
                    $arr = range(1, $this->page_all); 
                } else { 
                    if($this->page_current < 3) { 
                        $arr = range(1, 5); 
                    } elseif ( $this->page_current <= $this->page_all && $this->page_current > ($this->page_all - 3) ) { 
                        $arr = range(($this->page_all - 4), $this->page_all); 
                    } else { 
                        $arr = range(($this->page_current - 2), ($this->page_current + 2)); 
                    } 
                } 
                foreach($arr as $val) { 
                    if($val == $this->page_current) { 
                        $page .= ' <span>'.$val.'</span> '; 
                    } else { 
                        $page .= ' <a href="'.$url.$val.'">'.$val.'</a> '; 
                    } 
                } 
            } 
     
            if($this->page_current < $this->page_all) { 
                $page .= ' <a href="'.$url.($this->page_current + 1).'">下一頁</a> <a href="'.$url.$this->page_all.'">尾頁</a> '; 
            } else { 
                $page .= ' <span>下一頁</span> <span>尾頁</span> '; 
            } 
                 
            $page .= $this->page_count . "條記錄 ". $this->page_current . "&#047;" . $this->page_all . "頁 "; 
        } 
        return $page; 
    } 
}







 

視圖

 

完成

相關文章
相關標籤/搜索