Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcossantana10

Passar parâmetro de busca para paginação

Recommended Posts

Estou desenvolvendo um sistema de busca com paginação utilizando php+mysql.

 

Estava tudo perfeito até eu perceber que quando faço uma busca, a primeira página aparece os resultados referentes ao que eu digitei no campo de busca, porém, quando tento passar para próxima página ele me retorna todos os registros do banco, ignorando o termo da busca.

 

O que posso fazer pra corrigir isso? Segue o código:

 

//trecho de código que faz a paginação

 

$quantidade = 8;
$pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1;
$inicio = ($quantidade * $pagina) - $quantidade;
$buscar_pacientes = mysql_query ("SELECT * FROM paciente WHERE nome LIKE '%$nome_paciente%' ORDER BY nome LIMIT $inicio, $quantidade");
$total_registros = mysql_num_rows ($buscar_pacientes);
$sql_total = "SELECT id FROM paciente WHERE nome LIKE '%$nome_paciente%'";
$qr_total = mysql_query ($sql_total) or die (mysql_error());
$num_total = mysql_num_rows ($qr_total);
$total_pagina = ceil($num_total/$quantidade);
//código que exibe os links das páginas
<?php
if ($pagina == 1)
echo '<a href="#">Primeira </a>';
else
echo '<a href="?pagina=1">Primeira </a>';
for ($i=1; $i <= $total_pagina; $i++){
if ($i == $pagina)
echo "<a href=\"#\">$i </a>";
else
echo " <a href=\"?pagina=$i\">$i</a> ";
}
if ($pagina == $total_pagina)
echo '<href="#"> Última</a>';
else
echo "<a href=\"?pagina=$total_pagina\"> Última</a>";
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque as mesmas informações no link da paginação...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro Marcos, vamos tentar pensar, na primeira página você tem um variável chamada $nome_paciente, correto? Essa variável não vem do além, ela vem de algum lugar, correto? Então, você deve passar a mesma informação nos links da paginação, nos links você sempre passa:

pagina=$i

Então deverá passar também a informação adicional:

pagina=$i&nome_paciente=$nome_paciente

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Claro Marcos, vamos tentar pensar, na primeira página você tem um variável chamada $nome_paciente, correto? Essa variável não vem do além, ela vem de algum lugar, correto? Então, você deve passar a mesma informação nos links da paginação, nos links você sempre passa:

pagina=$i

Então deverá passar também a informação adicional:

pagina=$i&nome_paciente=$nome_paciente

Bom amigo, vejo que esse é o caminho mas ainda tenho problemas. Fiz a alteração que você falou e o que tá acontecendo agora é um pouco diferente.

 

Quando faço a busca, ele me retorna a primeira página de resultados normalmente. Quando eu clico em qualquer outra (Exemplo: Estou na página 1 e clico na 2, 3 ou 4...) ele funciona, me dando esse link aqui:

 

http://localhost/idag/buscar_paciente.php?pagina=3&nome_paciente=Getulio

 

onde "Getulio" foi o nome que digitei na busca.

 

O problema é que quando tento passar pra qualquer outra página novamente, ele não funciona mais. O link fica assim:

http://localhost/idag/buscar_paciente.php?pagina=3&nome_paciente=

 

É como se o parâmetro perdesse. Não importa de qual página para qual eu alterne, ele sempre funciona uma única vez em que mudo.

Algo me diz que o problema pode está no loop...

A alteração que fiz no código foi:

 

 

if ($pagina == 1)
echo '<a style="font-weight:bold; font-size: 12px;" href="#">Primeira </a>';
else
echo '<a href="?pagina=$i&nome_paciente=$nome_paciente=1">Primeira </a>';
for ($i=1; $i <= $total_pagina; $i++){
if ($i == $pagina)
echo "<a style='font-weight:bold; font-size: 12px;' href=\"#\">$i </a>";
else
echo " <a href=\"?pagina=$i&nome_paciente=$nome_paciente\">$i</a> ";
}
if ($pagina == $total_pagina)
echo '<a style="font-weight:bold; font-size: 12px;" href="#"> Última</a>';
else
echo "<a href=\"?pagina=$i&nome_paciente=$nome_paciente=$total_pagina\"> Última</a>";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagino que na primeira página o parâmetro esteja sendo enviado via POST, já nas outras está via GET, seu script previu isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagino que na primeira página o parâmetro esteja sendo enviado via POST, já nas outras está via GET, seu script previu isto?

Na verdade, estavam via POST, não sei como tinha conseguido pegar antes.

 

Consegui, está tudo certo. Muito obrigado cara!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por daemon
      Preciso fazer uma busca antes de inserir um registro no banco de dados.

      No caso preciso verificar se existe uma frase no banco antes de cadastrar uma nova.
       
      Exemplo:
       
      Tenho no banco a coluna ASSUNTO = "Morre David Johansen, vocalista dos New York Dolls, aos 75 anos".
       
      Quando vou cadastrar uma nova notícia "Morre, aos 75 anos, David Johansen, do New York Dolls" é parecida. Mas não quero cadastrar 2 vezes.
       
      No like não consigo fazer esta busca.... o que posso fazer para verificar esta busca antes de cadastrar ?
    • Por Negrito
      Olá Pessoal, 
       
      Converti o banco de dados de uma app em ASP Classico de MSSQL para MySQL para redução de custos e percebi que alguns componentes ou recursos não estão mais funcionando devido a não compatibilidade com o MySQL , como por exemplo a função : RecordCount
       
      Já consegui converter e atualizar 95% de aplicação para rodar com o MySQL, mas tem 1 item que esta tirando meu sono e após dias pesquisando, resolvi pedir ajuda.
       
      Segue o meu codigo abaixo , onde estou com problema no resultado dessa operação:
       
      <%
      ...
      Set RS = Server.CreateObject("ADODB.Recordset")
      RS.CursorLocation = 3
      RS.CursorType = 3
      RS.ActiveConnection = Cn
      RS.Open strSQL, Cn, 3, 3
      RS.PageSize = 25
      RS.CacheSize = RS.PageSize
      intPageCount = RS.PageCount
      intRecordCount = RS.RecordCount
          If NOT (RS.BOF AND RS.EOF) Then
      If CInt(intPage) > CInt(intPageCount) Then intPage = intPageCount
          If CInt(intPage) <= 0 Then intPage = 1
              If intRecordCount > 0 Then
                  RS.AbsolutePage = intPage
                  intStart = RS.AbsolutePosition
                  If CInt(intPage) = CInt(intPageCount) Then
                      intFinish = intRecordCount
                  Else
                      intFinish = intStart + (RS.PageSize - 1)
                  End if
              End If
          If intRecordCount > 0 Then
              For intRecord = 1 to RS.PageSize
          QntExibicoes = QntExibicoes + Rs.fields("views")
      ...
      %>
       
       
      Já percebi que a função RecordCount não pode ser usada com o MySQL ou pelo menos não é compativel.
       
      A paginação esta funcionando ! 
      Porem , não consigo fazer ele calcular a quantidade de linhas (rows) do MySQL com a função RecordCount e acredito que possa ter alguma outra função que não esta compativel , mas como não conheço MySQL , não posso afirmar.
       
      Enfim, algum pode me dar uma luz ?
       
      Desde já agradeço pela atenção.
       
      Obrigado.
    • Por RodrigoWD3
      Pessoal boa tarde, estou criando uma galeria com categorias no php e mysql, gostaria de saber como faço para colocar um botão -  Exibir Mais Fotos - fazendo exibir o restante dos registros na mesma pagina, teria alguma forma de limitar as fotos sem usar o LIMIT do sql? pode ser usando jQuery algo assim , obrigado
    • Por Inside
      Olá amigos,
       
      Eu estou precisando de uma paginação ASP que exiba tipo de 1 até 3 páginas e depois Próxima Página ou de 1 até 6 depois Próxima Página. De 3 em 3 ou ou de 6 em 6.
       
      Alguém já viu algum exemplo desse tipo?
       
      Paginação, 1 2 3 próxima
       
      Eu procurei na web não achei nada do tipo em ASP. Aqui no fórum também não achei.
       
      Obrigado pela atenção.
    • Por mkboy
      Olá,
       
      Uso MySQL no dia a Dia, mas tenho essa consulta em uma aplicação em uma base SQL Server onde conecto via PHP.
       
      Tenho 5000 registros na tabela, preciso trazer de 500 em 500.
      Assim, atualizo todos que preciso.

      No MySQL eu faria ASSIM
       
      SELECT campos FROM tabela CONDICAO Limit 0,500 SELECT campos FROM tabela CONDICAO Limit 500,500 SELECT campos FROM tabela CONDICAO Limit 1000,500  
      Então, eu passaria por todos os registros até chegar no 5000.
       
      Estou fazendo o select abaixo no SQL, mas fica um intervalo de produtos que não vem a cada select.
       
      Veja como fiz: (Um amigo ajudou na época que foi feito, não entendo bem)
       
      $sql = "SELECT TOP 500 data.CodigoInterno, data.CodigoFabricante, data.Fabricante, data.PrecoVenda, data.SaldoEstoque, data.Titulo, data.Aplicacao FROM ( SELECT ROW_NUMBER() OVER(ORDER BY CodigoInterno ASC) AS Row, CodigoInterno, CodigoFabricante, Fabricante, PrecoVenda, SaldoEstoque, Titulo, Aplicacao FROM PRODUTOS ) AS data WHERE data.Row >= ".addslashes($_GET['qtdRegistro'])." ORDER BY data.CodigoInterno ASC";  
      Então na Query envio o 0...500....
       
      Podem me ajudar por favor?
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.