Ir para conteúdo
Fórum Script Brasil
  • 0

Paginação PHP MSSQL


Ricardo Nogueira

Pergunta

Olá pessoal,

Mais uma vez recorro à ajuda de vocês.

Pesquisei em inúmeros site a respeito de paginação PHP e MSSQL e percebi que é um assunto pouco discutido e até mesmo a falta de exemplos para auxiliar nos.

Então estou com um problema quando retorna os dados e começa o WHILE.

Abaixo segue o código:

<?php


require_once("conecta.php");

if ((!isset($_GET['pagenum'])) || (!is_numeric($_GET['pagenum'])) || ($_GET['pagenum'] < 1)) { $pagenum = 1; }

else { $pagenum = $_GET['pagenum']; }


$result = mssql_query ("SELECT * FROM portabilidade WHERE CONVERT(VARCHAR(50),subscription_activation_timestamp,111) BETWEEN CONVERT(VARCHAR(50),'$datainitial',111) AND CONVERT(VARCHAR(50),'$datafinal',111) order by '$ordenar' asc") or die(mssql_error());
$rows = mssql_num_rows($result);

//Nr resultados mostrado por página
$page_rows = 4;

//Retorna o nr da útlima linha
$last = ceil($rows/$page_rows);

//Checa se está na ultima linha
if (($pagenum > $last) && ($last > 0)) { $pagenum = $last; }

//Define a range para mostrar na consulta
$max = ($pagenum - 1) * $page_rows;

//Substitui o LIMIT do mysql
 $result2 = ("select * from (
         select top $max * from (
            select top $page_rows * from portabilidade WHERE CONVERT(VARCHAR(50),subscription_activation_timestamp,111) BETWEEN CONVERT(VARCHAR(50),'$datainitial',111) AND CONVERT(VARCHAR(50),'$datafinal',111)
           order by '$ordenar' asc
         ) as newtbl order by '$ordenar' desc
        ) as newtbl2 order by '$ordenar' asc");



//LINE 50 ONDE APRESENTA O ERRO
while($l = mssql_fetch_array($result2))
{
            $id = $l["portabilidadeID"];
                       $tn = $l["subscription_tn"];
                       $rn = $l["subscription_rn1"];
                       $eot = $l["subscription_recipient_eot"];
                       $spid = $l["subscription_recipient_sp"];
                       $cnl = $l["subscription_new_cnl"];
                       $lnp = $l["subscription_lnp_type"];
                       $line = $l["subscription_line_type"];
                       $status = $l["status"];
                       $reason = $l["subscription_download_reason"];

                                echo "<tr style='text-align: center; font-weight: normal;'>\n";
                                echo "  <td>$tn</td>\n";
                                echo "  <td>$rn</td>\n";
                                echo "  <td>$eot</td>\n";
                                echo "  <td>$spid</td>\n";
                                echo "  <td>$cnl</td>\n";
                                echo "  <td>$lnp</td>\n";
                                echo "  <td>$line</td>\n";
                                echo "  <td>$status</td>\n";
                                echo "  <td>$reason</td>\n";
                                echo "</tr>\n";

}
//echo "<p>";

// MOstra a pg que estamos e o nr total de pgs
echo " --Page $pagenum of $last-- <p>";

// Primeiro checa se está na página um, caso contrátio cria o previuous


if ($pagenum == 1) { }
else
{
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> ";
echo " ";
$previous = $pagenum-1;
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> ";
}

//Apenas um espaço
echo " ---- ";

//A mesmo coisa do previous mas agora com avançar
if ($pagenum == $last)
{
}
else {
$next = $pagenum+1;
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";
echo " ";
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";
}

?>

Não entendi direito o porque apresenta esse erro, uma vez que essa função fecth_array retorna os dados de uma pesquisa.

Grato pela atenção

Ricardo

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Obrigado ESerra pela respota.

Eu realmente identifiquei que houve um erro na query, dessa forma criei uma outra query logo abaixo:

$result2 = mssql_query("select * from (select top $page_rows * from portabilidade where portabilidadeID not in (select top $max portabilidadeID from portabilidade order by portabilidadeID asc) order by portabilidadeID asc) as netwb order by portabilidadeID asc") or die(mssql_error());

Entretanto agora ocorre outro problema:

Quando submito o form a primeira página apresenta o resultado e mostra os dados, porém quando clico em NEXT a próxima página retorna em branco.

Há alguma coisa errada no código?

Help me!!!

Abraços

Ricardo

Link para o comentário
Compartilhar em outros sites

  • 0

Na primeira página você monta a query baseado no que for enviado do formulário, certo? E na segunda página? Esses dados existirão? Óbvio que não, já que você não vai ficar submetendo o formulário pelo link, logo, você terá que passar os dados pelo link ou guardá-los em sessões e resgar nas outras páginas.

Link para o comentário
Compartilhar em outros sites

  • 0

ESerra Obrigado pela ajuda,

Eu entendi o problema, e retirei essa passagem e fiz a verificação do formulário na mesma página que submete o form.

Agora começou a paginar, verifico que consigo clicar no next, fisrt, previous e estão funcionando, entretanto tão logo submeto o formulário se clicar em LAST então irá para a última página.

Mas após isso o LAST fica com o valor '0' e o next sempre acrescenta páginas a mais, ex.

Digamos que o total de páginas fosse 20.

Tão logo faço a paginação e clico e LAST irá para a página 20, mas se observo o valor de NEXT está 21 e se clicar vai aparecendo páginas e páginas. Ao passo que o valor de LAST fica zerado e se clicar retorna para a página 1.

Não dá para entender.

Segue o código abaixo:

<html>
<head>
<link rel="stylesheet" type="text/css" href="mystyles.css" />
</head>
<body>
<?php

include_once("conecta.php");

if ((!isset($_GET['pagenum'])) || (!is_numeric($_GET['pagenum'])) || ($_GET['pagenum'] < 1)) { $pagenum = 1; }
else { $pagenum = $_GET['pagenum']; }

$result = mssql_query ("SELECT portabilidadeID,subscription_tn,subscription_rn1,subscription_recipient_eot,subscription_recipient_sp,subscription_new_cnl,subscription_lnp_type,subscription_download_reason, status  FROM portabilidade WHERE CONVERT(VARCHAR(50),subscription_activation_timestamp,111) BETWEEN CONVERT(VARCHAR(50),'$datainitial',111) AND CONVERT(VARCHAR(50),'$datafinal',111) ") or die(mssql_error());
$rows = mssql_num_rows($result);

$page_rows = 25;

$last = ceil($rows/$page_rows);

if (($pagenum > $last) && ($last > 0)) { $pagenum = $last; }

$max = ($pagenum - 1) * $page_rows;

$result2 = mssql_query("select top $page_rows portabilidadeID,subscription_tn,subscription_rn1,subscription_recipient_eot,subscription_recipient_sp,subscription_new_cnl,subscription_lnp_type,subscription_download_reason, status from portabilidade where portabilidadeID not in (select top $max portabilidadeID from portabilidade order by portabilidadeID asc) order by portabilidadeID asc") or die(mssql_error());

?>
        <table width="75%" border="0" align=center>
                       <tr>
                       <th scope="col" abbr="Number">Number</th>
                       <th scope="col" abbr="Provider">Provider</th>
                       <th scope="col" abbr="EOT">EOT</th>
                       <th scope="col" abbr="SPID">SPID</th>
                       <th scope="col" abbr="CNL">CNL</th>
                       <th scope="col" abbr="LNP">Number Type</th>
                       <th scope="col" abbr="lnp">Type</th>
                       <th scope="col" abbr="Status">Status</th>
                       <th scope="col" abbr="Reason">Reason</th>
                       </tr>

<?
echo "<p align=center>";
        echo "<font size='1' face='Verdana'>";
        echo "Searching from\n";
        echo $datainitial;
        echo "\nto\n";
        echo $datafinal;
        echo "</font>";
        echo "</p>";
echo "</font>";
echo "<hr>";
while($l = mssql_fetch_array($result2))
{
                       $id = $l["portabilidadeID"];
                       $tn = $l["subscription_tn"];
                       $rn = $l["subscription_rn1"];
                       $eot = $l["subscription_recipient_eot"];
                       $spid = $l["subscription_recipient_sp"];
                       $cnl = $l["subscription_new_cnl"];
                       $lnp = $l["subscription_lnp_type"];
                       $line = $l["subscription_line_type"];
                       $status = $l["status"];
                       $reason = $l["subscription_download_reason"];

                                echo "<tr style='text-align: center; font-weight: normal;'>\n";
                                echo "  <td>$tn</td>\n";
                                echo "  <td>$rn</td>\n";
                                echo "  <td>$eot</td>\n";
                                echo "  <td>$spid</td>\n";
                                echo "  <td>$cnl</td>\n";
                                echo "  <td>$lnp</td>\n";
                                echo "  <td>$line</td>\n";
                                echo "  <td>$status</td>\n";
                                echo "  <td>$reason</td>\n";
                                echo "</tr>\n";

}

echo "<p>";

Daqui para baixo não sei o porque acontece isso........

echo "<font size='1' face='Verdana'>";
echo " --Page $pagenum of $last-- <p>";
echo "</font>";
?>
  </table><br />
<?
echo "<hr>";

if ($pagenum == 1) { }
else
{

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> ";
echo " ";
$previous = $pagenum-1;
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> ";

}

echo " ---- ";

if ($pagenum == $last)
{
}
else {
$next = $pagenum+1;
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";
echo " ";
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";

}

?>

</body>
</html>

Abraços

Ricardo

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...