一、一個條件的查詢資料
查詢資料自然是先要顯示出資料,然後根據條件進行查詢資料
(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>
進行查詢後,文字框顯示查詢的名字,顯示的條數也是會變換的