2017-10-07 33 views
0

我使用PHP分頁我的數據與Oracle數據庫。PHP分頁錯誤類型的頁面和如何設置分頁沒有顯示5 5 5

if(isSet($_GET['search'])) 
{ 
    $strSQL = oci_parse($c1, " 
     SELECT 
     T.TONEID, 
     T.TONE_NAME, 
     T.ACTIVE, 
     TO_CHAR(T.DATEADDED, 'DD-MON-YYYY HH24:MI:SS') AS DATEADDEDS, 
     T.ADDEDBY 
     FROM 
     WA_BT_TBL_TONE T 
     WHERE 
     TONE_NAME LIKE '%" . $_GET['search'] . "%' 
     ORDER BY T.DATEADDED DESC 
    "); 
} 
else 
{ 
    $strSQL = oci_parse($c1, " 
     SELECT 
     T.TONEID, 
     T.TONE_NAME, 
     T.ACTIVE, 
     TO_CHAR(T.DATEADDED, 'DD-MON-YYYY HH24:MI:SS') AS DATEADDEDS, 
     T.ADDEDBY 
     FROM 
     WA_BT_TBL_TONE T 
     ORDER BY T.DATEADDED DESC 
    "); 
} 
oci_execute ($strSQL,OCI_DEFAULT); 

$Num_Rows = oci_fetch_all($strSQL, $dData); 

$Per_Page = 10; 

$Page = $_GET["Page"]; 
if(!$_GET["Page"]) 
{ 
    $Page=1; 
} 

$Prev_Page = $Page-1; 
$Next_Page = $Page+1; 

$Page_Start = (($Per_Page*$Page)-$Per_Page); 
if($Num_Rows<=$Per_Page) 
{ 
    $Num_Pages =1; 
} 
else if(($Num_Rows % $Per_Page)==0) 
{ 
    $Num_Pages =($Num_Rows/$Per_Page) ; 
} 
else 
{ 
    $Num_Pages =($Num_Rows/$Per_Page)+1; 
    $Num_Pages = (int)$Num_Pages; 
} 

$Page_End = $Per_Page * $Page; 
if($Page_End > $Num_Rows) 
{ 
    $Page_End = $Num_Rows; 
} 

$no = 1; 

if($Num_Rows > 1) 
{ 
    for($i=$Page_Start;$i<$Page_End;$i++) 
    { 
    ?> 
     <tr> 
      <td><?php echo $dData['TONE_NAME'][$i]; ?> 
     </tr> 
    <?php 
    } 
} 

HTML分頁

<div class="pagination"> 
    <?php 
    if($Prev_Page) 
    { 
     echo " <a href='?Page=$Prev_Page'>Back</a> "; 
    } 

    for($i=1; $i<=$Num_Pages; $i++) 
    { 
     if($i != $Page) 
     { 
      echo "<a href='?Page=$i'>$i</a>"; 
     } 
     else 
     { 
      echo "<b><a> $i </a></b>"; 
     } 
    } 
    if($Page!=$Num_Pages) 
    { 
     echo " <a href ='?Page=$Next_Page'>Next</a> "; 
    } 
    ?> 
</div> 

上面的代碼工作很好,直到我拿到表顯示空行,當我嘗試用文字或數字-5手動編輯頁面。例如:http://example.com/Page=blabla enter image description here

我的問題:
1.如何防止數據顯示與行空,如果我們用異樣的價值,例如用文字或-5手動編輯的頁面?
2.是否有可能限制頁碼顯示5 5?

enter image description here

+0

您使用的是哪個版本的Oracle? –

+0

@TimBiegeleisen Oracle 11g –

+0

有什麼建議嗎? –

回答

0

一般在PHP分頁我會建議使用兩個查詢:

  1. 一個讓所有元素

SELECT count(*) from tableName

的計數如果要素計數0 for blablabla then then you do not do process second query

  1. 秒,以從例如上二月10日至20日頁

SELECT field1, field2 FROM tableName

與LIMIT對選定的頁。

該策略應該可以解決您的問題。

我發現你的東西,可以幫助:How can I perform this query in oracle

編輯:

我不擅長預言,但在這裏我只想說,讓每一個頁面上的所有記錄是不是好主意。我發現了一些可以幫助您的東西http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html

+0

Oracle是否支持'LIMIT'? –

+0

我不擅長oracle,但在這裏我只想說,在每個頁面上獲取所有記錄不是好主意。我發現了一些可以幫助http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html的內容 – Arkowsky