2013-09-03 3 views
0

У меня проблема, когда я делаю запрос, и он возвращается примерно с 30 страницами, я надеялся вернуть его с 1,2,3 ..., 30 вместо 1, 2,3,4,5,6,7,8 и др. смотрите ниже код, который я использовал:PHP Sqlsrv Pagination

function getPage($stmt, $pageNum, $rowsPerPage) 
{ 
$offset = ($pageNum - 1) * $rowsPerPage; 
$rows = array(); 
$i = 0; 
while(($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC, 
    SQLSRV_SCROLL_ABSOLUTE,   $offset + $i)) && $i < $rowsPerPage) 
{ 
    array_push($rows, $row); 
    $i++; 
} 
return $rows; 
} 

// Set the number of rows to be returned on a page. 
$rowsPerPage = 30; 

// Connect to the server. 
$serverName = 'test'; 
$connOptions = array("Database"=>"test"); 
$conn = sqlsrv_connect($serverName, $connOptions); 
if (!$conn) 
die(print_r(sqlsrv_errors(), true)); 

// Define and execute the query. 
// Note that the query is executed with a "scrollable" cursor. 
$sql = "select * from info"; 

$stmt = sqlsrv_query($conn, $sql, array(), array("Scrollable" => 'static')); 
if (!$stmt) 
die(print_r(sqlsrv_errors(), true)); 

// Display the selected page of data. 
echo "<table border='1px' align='center'>"; 
$pageNum = isset($_GET['pageNum']) ? $_GET['pageNum'] : 1; 
$page = getPage($stmt, $pageNum, $rowsPerPage); 

foreach($page as $row) 
echo "<tr><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]</td></tr>"; 

echo "</table>"; 
?> 
<table align='center'> 
<?php 
// Get the total number of rows returned by the query. 
// Display links to "pages" of rows. 
$rowsReturned = sqlsrv_num_rows($stmt); 
if($rowsReturned === false) 
die(print_r(sqlsrv_errors(), true)); 
elseif($rowsReturned == 0) 
{ 
echo "No rows returned."; 
exit(); 
} 
else 
{  
// Display page links. 
$numOfPages = ceil($rowsReturned/$rowsPerPage); 
for($i = 1; $i<=$numOfPages; $i++) 
{ 
    $pageLink = "?pageNum=$i"; 
    print("<a href=$pageLink>$i</a>&nbsp;&nbsp;"); 
} 
echo "<br/><br/>"; 
} 



sqlsrv_close($conn); 
+0

Я думаю, этот вопрос лучше подходит для обмена стеком кода, так как люди могут прокомментировать ваш код и предложить улучшения: http://codereview.stackexchange.com/ – Maximus2012

+0

Я добавил этот вопрос к предлагаемому форуму, но был уведомлен о том, что он не подходит для сайта. – phpyesphp

+0

Да, я видел, что оно было приостановлено, но я верю, что здесь могут быть другие вопросы, такие как здесь или на обмене стека кода. Вам просто нужно его искать. – Maximus2012

ответ

0

Я пошел на просмотр кода и JohnMark13 помог мне найти решение этой проблемы:

// Display page links. 
$numOfPages = ceil($rowsReturned/$rowsPerPage); 
$renderedEllipses = false; 
for($i = 1; $i<=$numOfPages; $i++) 
{ 
    //If you always want to render pages 1 - 3 
    if($i < 4) { 
     //render link 
     $pageLink = "?pageNum=$i"; 
     print("<a href=$pageLink>$i</a>&nbsp;&nbsp;"); 
    } 

    //If you always want to render current page number 
    else if($i == $pageNum) { 
     //render link 
     $pageLink = "?pageNum=$i"; 
     print("<a href=$pageLink>$i</a>&nbsp;&nbsp;"); 
     //reset ellipses 
     $renderedEllipses = false; 
    } 

    //if you always want the last page number 
    else if ($i == $numOfPages - 1) { 
     //render link 
     $pageLink = "?pageNum=$i"; 
     print("<a href=$pageLink>$i</a>&nbsp;&nbsp;"); 
    } 

    //make sure you only do this once per ellipses group 
    else { 
     if (!$renderedEllipses){ 
      print("..."); 
      $renderedEllipses = true; 
     } 
    } 
} 

Спасибо @ JohnMark13

+0

Ребята, у меня проблемы с этим кодом, но не с теми же проблемами, больше с поиском, не был уверен, слишком ли открыт другой вопрос или продолжайте в этом как его один и тот же код, кто-то может посоветовать :) - @ JohnMark13 – phpyesphp