程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> ci框架(二),ci框架

ci框架(二),ci框架

編輯:關於PHP編程

ci框架(二),ci框架


自定義SQL語句                                                                            

當提供的API滿足不了我們對SQL語句的要求的時候,我們通常是自己來寫SQL語句,CI也提供了比較強大了,能夠滿足我們需求的一般的sql的API。

$res=$this->db->select('id,name')
    ->from('表名')
    ->whrer('id >=',5)//注意id後面要有個空格
    ->limit(3,2)//這裡與sql的limit是順序是反的
    ->order_by('id desc ')
    ->get();//翻譯成sql語句
var_dump($res->result());
echo $this->db->last_query();//先是最近一條SQL

自定義擴展控制器                                                                          

在application/core中新建MY_Controller.php

class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        //一定呀先調用父類的構造方法
        //登錄驗證、權限驗證、其他操作。。。
    }
}

同時需要在application/config/config.php中配置一下:

$config['subclass_prefix'] = 'MY_';

自定義擴展模型                                                                            

在application/models中創建user_model.php

class User_model extends CI_Model
{
    public function getAll()
    {
        $res = $this->db->get('表名');
        return $res->result();
    }
}

在控制器中調用自定義模型

application/controllers:

class User extends MY_Controller
{
    public function index()
    {
        $this->load->model('User_model');//調用以類名為主,而不是文件名
$list = $this->User_model->getAll();//調用模型獲取數據
$this->load->view('user/index',array('list'=>$list));//加載視圖  
    }   
}

加載模型的時候可以給模型取一個名字:

$this->load->model('User_model','user');//調用以類名為主,而不是文件名        
$list = $this->user->getAll();//調用模型獲取數據

Url相關函數                                                                             

在表單驗證的時候,需要把數據傳給控制器,怎麼准確的而且可擴展的寫action呢,調用API:

public function addView()
{
    $this->load->helper('url');//為了不把表單傳遞的地址寫死,用url函數
    $this->load->view('user/add');
}

在user/add.php視圖當中:

<form action="<?php echo site_url('user/insert'); ?>" method="post">
<!-- ........-->
</form>

如果是index.php目錄的話,用:

base_url();

這個API。

同時,每次加載url很麻煩,也可是設置成自動加載,在config/config.php中修改:

$config['helper'] = array('url');

可能在後面的版本中就沒有這個自動加載了。

路由                                                                                           

$route['rouxx/showxx/([\d]+)\.html'] = 'rou/show/$1';//插入這句話

分頁                                                                                           

  • 必須知道的一些參數

總共有多少條記錄

一頁要有多少條記錄

總共多少頁

當前頁前後要顯示多少個分頁鏈接

  • 設置一些CI分頁類基本參數
//總條數
$config['total_rows']
//一頁顯示幾條
$config['per_page']
//定義當前頁的前後各有幾個數字鏈接
$config['num_links']
//定義沒有分頁參數,主URL
$config['base_url']
  • 調用CI的分頁類
$this->load->library('pagination');
  • 執行分頁方法
$this->pagination->initialize($config);
  • 輸出分頁鏈接
echo $this->pagination->create_links();
  • 查詢部分數據(limit)
echo $this->db->limit($num,$start);  //從$start查$num條
<?php 
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Page extends CI_Controller {

    public function user_add(){
        $this->load->model('test_m');

        for ($i = 1;$i <= 100;$i++){
            $name = 'u'.$i;
            $arr = array("usid"=>$i,"uname"=>$name,"upass"=>123456);
            $this->test_m->user_insert($arr);

        }
    }

    public function pagelist(){
        $this->load->model('test_m');
        $user = $this->test_m->user_select_all();
        $allnum = count($user);
        $pagenum = 20;

        $config['total_rows'] = $allnum;
        $config['per_page'] = $pagenum;
        $config['num_links'] = 3;
        $config['base_url'] = "/CI/index.php/page/pagelist";
        $config['use_page_numbers'] = true;

        $this->load->library('pagination');
        $this->pagination->initialize($config);

        var_dump($this->pagination->create_links());
        echo $this->pagination->create_links();

        echo "<br />";
        $id = $this->uri->segment(3);  //獲得url第三段字符
        $id =$id ? $id:1;
        $start = ($id - 1) * $pagenum;
        $list = $this->test_m->user_select_limit($start,$pagenum);
        var_dump($list);
    }
}

上傳文件                                                                                    

視圖 /views/up.php:

<html>
    <form action="ci/CodeIgniter_2.2.0/index.php/upload/up" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile" />
        <input type="submit" name="sub" value="提交" />
    </form>
</html>

控制器:

  • 定義一個數組,設置一些與上傳相關的參數
$config['upload_path'] = './uploads/';
//設置允許上傳的類型
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
//如果是圖片還可以設置最大高度和寬度
$config['max_height'] = 768;
$config['max_width'] = 1024;

還可以設置其他的一些額外參數,詳細看用戶手冊。

  • 調用CI的上傳通用類,並執行上傳
//upload為調用的類名,全小寫
$this->load->library('upload',$config);
//如果上傳框的name寫的是userfile,那就不用傳參數了,如果不是,把name的值傳進去
$this->upload->do_upload('上傳框的name');
  • 接收出錯信息或成功信息
//出錯信息
$error = array('error' => $this->upload->display_error());
//成功信息
$data = array('upload_data' => $this->upload->data());
<?php 
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Upload extends CI_Controller {
    //顯示帶表單的視圖
    public function index(){
        $this->load->view('up');
    }
    //顯示上傳信息
    public function up(){
        $config['upload_path'] = './uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = "2000";
        $this->load->library('upload',$config);
        //打印成功或錯誤的信息
        if($this->upload->do_upload('upfile'))
        {
            $data = array("upload_data" => $this->upload->data());
            var_dump($data);
        }
        else
        {
            $error = array("error" => $this->upload->display_errors());
            var_dump($error);
        }
    }
}

Session                                                                                   

利用CI類實現session登錄

  • 修改配置文件(config.php)
//生成一個隨機不重復的字符串走位加密的key保存到config.php的encryption_key中
$config['encryption_key']='adb8bf6d0ac4e17b42a80941582497a4';
  • 加載SESSION類
$this->load->library('session');
  • 創建SESSION
$array = array('id'=>3,'name'=>'jack');
$this->session->set_userdata($array);
  • 查看SESSION
$this->session->userdata(session名);
  • 刪除SESSION
$this->session->unset_userdata('SESSION名');

$config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_expire_on_close'] = FALSE; $config['sess_encrypt_cookie'] = TRUE $config['sess_use_database'] = FALSE; $config['sess_table_name'] = 'ci_sessions'; $config['sess_match_ip'] = FALSE; $config['sess_match_useragent'] = TRUE; $config['sess_time_to_update'] = 300;

  • 一次性數據,只能讀取一次
//設置
$this->session->set_flashdata('test','aaaaa');
//讀取
$test = $this->session->flashdata('test');

php CI 框架怎從數據庫中取值(一個二維數組)以表格的形式顯示到view層

控制層
function test_func(){
//獲取model頁面需要的兩個參數
$competition_id = $_GET["competition_id"];
$report_class = $_GET["report_class"];
$this->load->model("Action"); //引入model
$data["head"] = $this->Action->get_report_item($competition_id, $report_class); //引用model的函數
$this->load->view("test_result",$data); //將結果顯示在test_result.php頁面中
}
view層:
<div id='result_div'>
<h3 style="align:center;color:blue;">添加結果顯示</h3>
<?php if ($head){?> //此處選擇了循環輸出從控制層傳輸的結果
<table align="center"; border="1" cellpadding="1" cellspacing="1">
<tr align="center">
<td>字段名稱(含義)</td> //該td中顯示的是你從數據庫、即model層中獲取到的數據的含義,想顯示多少,顯示哪個,在這裡確認
</tr>
<?php foreach ($head as $item){ ?>
<tr align="center">
<td><?php echo $item->test; ?></td>
</tr>
</table>
<?php }else {
echo “123”;
}?>
</div>
 

php CI框架問題?小弟是初學者

在view文件裡可以直接用$title了
是 CI 根據$data裡的每一個可以聲明了一個變量 到view中可以直接調用
CI 架構就是這麼干活的 具體怎麼去聲明的 沒太細看
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved