ThinkPhp框架:分頁查詢

weixin_30639719發表於2020-04-05

一、一個條件的查詢資料

查詢資料自然是先要顯示出資料,然後根據條件進行查詢資料

(1)顯示出表的資料

這個方法我還是寫在了HomeController.class控制器檔案中

(1.1)寫了一個方法shouye()

public function shouye()
{
    $n = M("nation");   //資料庫中的表
    $arr = $n->select();  //查詢表中的所有資料
    $this->assign("shuju",$arr);  //將二維陣列注入變數
    $this->show();  //顯示資料
}

(1.2)方法寫完了之後,下面就是寫顯示頁面了,這個名字和方法名一致

這裡我們用表格來顯示一下資料

<table width="50%" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td>代號</td>
        <td>名稱</td>
        <td>操作</td>
    </tr><br>
    <!--注意:這裡的迴圈沒有{}這是和smarty模板的區別-->       
    <foreach name="shuju" item="v" >   <!--引數name是php頁面中的注入的名字,item是賦值的量-->
        <tr>
            <td>{$v.code}</td> <!--這就是顯示的code列-->
            <td>{$v.name}</td> <!--這是顯示的name列-->
            <td>操作</td>
        </tr>
    </foreach>
</table>            

 

下面執行看下效果:注意位址列的書寫:http://localhost/tp/index.php/Home/Home/shouye

(2)新增查詢條件

(2.1)這樣的話就要新增查詢的文字框和查詢按鈕了,我們新增在表的前面

這裡用表單來寫,因為提交嘛,所以用表單進行寫

<form action="__ACTION__" method="post">
    <div>
        根據名稱查詢:<input type="text" name="name" />
        <input type="submit" value="查詢"/>
    </div>
</form>        

 

看下顯示效果

(2.2)顯示出來之後,就是後面的處理頁面了

這個查詢和新增、修改的邏輯處理方式還不一樣,這裡就不用if判斷了

public function shouye()
{
    $tj = " 1=1 "; //條件恆成立
    if(!empty($_POST["name"]))  //判斷傳過來的name值是不是空的
    {
        $name = $_POST["name"]; 
        $tj = " Name like '%{$name}%' ";  //修改$tj的值
    }
    $n = M("nation");  
    $arr = $n->where($tj)->select();  //因為是tp框架,所以直接可以呼叫這個條件,用where()方法
    $this->assign("shuju",$arr);
    $this->show();
}        

 

查詢一下“回”的資訊,可以實現這個查詢

(2.3)可以在這個查詢中新增分頁,也就是分頁的顯示

1.這裡我們引用一下以前寫過的page分頁的類,先把這個page的類放到自己的模組下面,我放在了這裡

開啟這個類檔案,修改一下名稱空間如下所示:

然後關閉就可以了。

2.在shouye()方法中呼叫Page類

  2.1首先要呼叫這個page類

  2.2這個類要有兩個引數:分頁的總條數,顯示的條數

$page = new \Home\shuju\page($zts,2);  //第一個引數:資料總條數;第二個引數是顯示幾條

      2.3總條數:查詢也是要顯示總條數

$zts = $n->where($tj)->count();  //總條數也要包括查詢

    2.4在limit這裡要對原始檔,進行修改

$page->limit;  //LIMIT 10,3

 這樣的話會多著個limit,那麼在page.class.php原始檔中刪除就可以

  2.5查詢所有條件時加上這個limit($page->limit)方法

$arr = $n->where($tj)->limit($page->limit)->select();

       2.6注入變數(將分頁的資訊顯示資訊注入)

$this->assign("fenye",$page->fpage());  //page的fpage分頁的顯示資訊

 看下總的這個shouye()的方法,上面的綜合

public function shouye()
{
  $tj = " 1=1 ";
  if(!empty($_POST["name"]))
  {
    $name = $_POST["name"];
    $tj = " Name like '%{$name}%' ";   
  }    
  $n = M("nation");
  $zts = $n->where($tj)->count();  //總條數也要包括查詢
         
  $page = new \Home\shuju\page($zts,2);  //第一個引數:資料總條數;第二個引數是顯示幾條
  //$page->limit;  //LIMIT 10,3
         
  $arr = $n->where($tj)->limit($page->limit)->select();  //這是顯示的分頁
  $this->assign("shuju",$arr);  //注入變數(總的資料的)
  $this->assign("fenye",$page->fpage());  //注入變數(分頁的顯示資訊)
  $this->show();
}

   2.7在顯示頁面,顯示這個變數

<div>{$fenye}</div>

 

看先執行結果,是有了分頁資訊

但是這樣有個缺陷,就是在查詢一個條件時,第一條是顯示的總條數是正確的額,但是後面的是錯誤的,那麼就是要修改程式碼

注意:將資料的傳輸方式修改(post修改為get)

3.查詢的文字框顯示預設值

這裡在條件恆成立下,定義一個name值為空,然後在注入變數

在顯示頁面的文字框的中,新增value值是前面注入的變數

注意:

1.看下完整的php頁面的程式碼

public function shouye()
{
      $tj = " 1=1 ";
      $name = "";
  if(!empty($_POST["name"]))
  {
    $name = $_POST["name"];
    $tj = " Name like '%{$name}%' ";   
  }    
  $n = M("nation");
  $zts = $n->where($tj)->count();  //總條數也要包括查詢
         
  $page = new \Home\shuju\page($zts,2);  //第一個引數:資料總條數;第二個引數是顯示幾條
  //$page->limit;  //LIMIT 10,3
         
  $arr = $n->where($tj)->limit($page->limit)->select();  //這是顯示的分頁
  $this->assign("shuju",$arr);  //注入變數(總的資料的)
  $this->assign("fenye",$page->fpage());  //注入變數(分頁的顯示資訊)
      $this->assign("name",$name);  //將name的值注入變數    
  $this->show();
}

 2.顯示頁面的整體內容

<form action="__ACTION__" method="get">
     <div>
        根據名稱查詢:<input type="text" name="name"  value="{$name}"/>
        <input type="submit" value="查詢"/>
    </div>
</form>
<br />
<table width="50%" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td>代號</td>
        <td>名稱</td>
        <td>操作</td>
    </tr>
             
    <foreach name="shuju" item="v" >
        <tr>
            <td>{$v.code}</td>
            <td>{$v.name}</td>
            <td>操作</td>
        </tr>
    </foreach>
</table>
         
<div>{$fenye}</div>        

 

進行查詢後,文字框顯示查詢的名字,顯示的條數也是會變換的

轉載於:https://www.cnblogs.com/zhaohui123/p/7159365.html

相關文章