Ir para conteúdo

Arquivado

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

lendadomato

[Resolvido] Pesquisa com paginação

Recommended Posts

Olá pessoal,

 

estou precisando mais uma vez da ajuda de vcs, achei vários sistemas

de paginações q funcionam legal, mas meu problema é relacionado à busca

por palavra chave q vem de um form, a primeira página e a exibição da

paginação está correta mas, quando clicamos na página 2 ou mesmo no link

de próximo último ou primeira ele retorna todos registros existentes

na tabela "produtos", vejam o form abaixo e a seguir o arquivo responsável

por imprimir os resultados:

 

pesquisa2.asp


<!--Busca de produtos -->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr> 
	<td width="100%" height="23" background="<%=dirlingua%>/imagens/menu_esq_top.gif" align="center"><font color="#f59e2d"><strong>BUSCA DE CAMISETAS</strong></font> </td>
</tr>
<tr>
	<td background="<%=dirlingua%>/imagens/menu_esq_fundo.gif"> <BR>
	<!--- start SEARCH --->
	<TABLE width="100%" border=0 align="center" cellPadding=2 cellSpacing=0>
		<form action="buscar.asp" method="POST" name="busca">
			<TR>
				<td colspan=2> <div align="left">
					<input type=text name="caixa" size=23 style=font-size:11px;font-family:<%=fonte%>;>
					<INPUT class=searchforms type=image value="buscar" alt="Pesquisar" src="<%=dirlingua%>/imagens/botao_pesquisar.gif" onMouseOut="window.status='';return true;" onMouseOver="window.status='<%=strLg21%>';return true;" align="absmiddle"></div> 
				</td>
			</tr>
			
	</FORM>
	</TABLE>
	<!--- end SEARCH --->
</td>
</tr>
<tr> 
	<td><img src="<%=dirlingua%>/imagens/menu_esq_fim.gif" width="184" height="6"></td>
</tr>			
</table>
<!--Fim da busca de produtos-->

 

 

paginacao_busca.asp

 



<!--#Include File="arquivo_de_conexao.asp"-->



<% 

Call AbreConn()

busca = Request.Form("caixa")

'pega a pagina atual
pagina = request.ServerVariables("SCRIPT_NAME")

'numero de registros por pagina...

conn.CursorLocation = 3

pageSize = 10

if(len(Request.QueryString("p")) = 0 )then
  paginaAtual = 1
else
  paginaAtual = CInt(Request.QueryString("p"))
end if

' conta o numero de registros...
sql = "SELECT COUNT(*) AS total FROM produtos where nome like '%"&busca&"%'" 
set rs = conn.execute(sql)

'total de registros
recordCount = Cint(rs("total"))

'calculamos o numero de paginas...

pageCount = Clng(recordCount / pageSize)

If pageCount < 1 then
pageCount = 1
end if

rs.Close()


Flag1 = INT(paginaAtual / pagesize)

PI = INT(Flag1 * pagesize)

IF PI = 0 THEN
PI = 1
END IF
PF = PI + pagesize - 1

' selecionamos os registros...

sql = "SELECT * FROM produtos where nome like '%"&busca&"%' LIMIT " & (paginaAtual - 1) * pageSize & " , " & pageSize
set rs = conn.execute(sql)
  
        
do while not rs.eof
' aqui entra o q você quer exibir
  Response.Write  "  "& rs("nome") & " <a href='produtos.asp?produto=" & rs("idprod") & "'><img src='produtos/imagens/" & rs("impeq") & "' width='75' height='75' border='0'></a><br>"
  rs.MoveNext()
loop



rs.Close()
set rs = nothing
Call FechaConn()
set conn = nothing

Response.Write ("Foram encontrado(s): <b>"&recordCount&"</b> camiseta(s)<br><B><strong> Página " & paginaAtual & " de " & pagecount & " </strong></B><br>")
' cria os links de pagians...
IF CInt(paginaAtual) > 1 THEN
Response.Write "<a href='"&pagina&"?p=1'>Primeira</a> "
Else
Response.Write "<font color=""#ADADAD"">Primeira</font> "
END IF

if CInt(paginaAtual) > 1 then
Response.Write "<a href='"&pagina&"?p=" & paginaAtual - 1 &"'>Anterior</a> "
Else
Response.Write "<font color='#666666'>Anterior</font>  "
END IF

for i=1 to pageCount
  Response.Write("<a href='"&pagina&"?p=" & i & "'>" & i & "</a> ")
next
  

IF (CInt(paginaAtual) < pagecount) THEN
         IF CInt(PF) <> pagecount THEN
   Response.Write "<a href='"&pagina&"?p=" & paginaAtual+1 & "'>Próxima</a> "
  END IF
Else
  Response.Write "<font color=""#ADADAD"">Próxima</font> "
END IF


IF (CInt(paginaAtual) <> pagecount) THEN
         IF CInt(PF) <> pagecount THEN
   Response.Write "<a href='"&pagina&"?busca="&busca&"&p=" & pagecount & "'>Última</a> "
  END IF
Else
  Response.Write "<font color=""#ADADAD"">Última</font> "
  END IF
  
%>

 

segue o link para quem quiser ver o como está funcionando:

 

por favor façam uma busca por "crisma" por essa palavra o resultado

são 16 encontrados, quando clicamos na p´roxima página o sistema mostra

todos produtos cadastrados:

 

 

Clique aqui

 

 

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele esta gerando algum erro ???

 

aparentemente sua string SQL esta correta, provavelmente é algum erro na lógica, existem outros exemplos no fórum

pode te ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo xanburzum,

 

não gera nenhum erro, clicando no link você pode verificar q está paginando certo

mas é na hora de passar para as outras páginas q está o problema, eu imagino

q seja como você falou sobre a lógica, e agora q eu me lembrei de uma coisa, os

produtos são cadastrados em várias categorias se eu fizer um select no formulário

de pesquisa buscando tbm por categorias talvez possamos dar continuidade no sistema,

já vasculei todos posts aqui do forum e que de fato achei essa paginação aqui, mas

não sei como fazer para recuperar os registros por categorias, vou montar o select

de categorias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja bem. Na primeira requisição da página de resultados, você recupera a palavra-chave enviada pelo formulário:

busca = Request.Form("caixa")

E quando efetuar a paginação, este form não existe mais, pois agora a variável está sendo enviado por QueryString, então basta alterar a linha acima para:

busca = Request("caixa")

Explicando: A primeira requisição é feita por Request.Form, mas na paginação é por Request.QueryString, sendo assim utilize como mencionei para recuperar a variável seja por Form ou Query, ou crie uma segunda variável para ser recuperada por QueryString.

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja bem. Na primeira requisição da página de resultados, você recupera a palavra-chave enviada pelo formulário:

busca = Request.Form("caixa")

E quando efetuar a paginação, este form não existe mais, pois agora a variável está sendo enviado por QueryString, então basta alterar a linha acima para:

busca = Request("caixa")

Explicando: A primeira requisição é feita por Request.Form, mas na paginação é por Request.QueryString, sendo assim utilize como mencionei para recuperar a variável seja por Form ou Query, ou crie uma segunda variável para ser recuperada por QueryString.

 

Att.

 

 

 

Amigo Public2004,

 

caramba cara, você me deu uma luz no fim do túnel, me mostrou o caminho e

eu fui, resolvi da seguinte forma:

 

onde estava:

 

busca = Request.Form("caixa")

 

mudou para:

 

palavra = Request.QueryString("busca")

 

vou explicar, no form postado o método de envio é o "POST" no q teria q ser "GET"

assim sendo o name do form é "busca" e o q fiz foi alterar o name do campo text para "busca" tbm,

assim sendo para recuperar o valor usei palavra = Request.QueryString("busca") como sugerido.

 

e logo abaixo o like passou para like '%"&palavra&"%'"

no q me restou nos links fazer as mesmas alterações mas buscando a palavra recuperada

na querystring antes da paginação.

 

enfim, muito obrigado pela dica e agradeço tbm o amigo xanburzum pela força, como

o problema foi resolvido segue abaixo os 3 arquivos responsáveis pela discussão:

 

 

 

arquivo_de_conexao.asp

<% 
dim conn 
 
Sub AbreConn() 
 
Set conn = Server.CreateObject("ADODB.Connection")  
 
conn.Open = "Driver={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=seu_nanco_de_dados; UID=usuario; PWD=senha;"  
 
 
End Sub 
 
 
Sub FechaConn() 
 
conn.Close() 
Set conn = Nothing 
 
End Sub 
 
%>

 

 

pesquisar.asp

<!--Busca de produtos -->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<TABLE width="100%" border=0 align="center" cellPadding=2 cellSpacing=0>
		<form action="resultado.asp" method="get" name="busca">
<TR>
<td colspan=2> <div align="left">
<input type=text name="busca" size=23 style=font-size:11px;font-family:<%=fonte%>;>
<INPUT type="submit" value="Pesquisar" ></div> 
</td>
</tr>
</FORM>
</TABLE>
	
</tr>
</table>
<!--Fim da busca de produtos-->

 

 

 

resultado.asp

<!--#Include File="arquivo_de_conexao.asp"-->



<% 

Call AbreConn()


palavra = Request.QueryString("busca")


'pega a pagina atual
pagina = request.ServerVariables("SCRIPT_NAME")

'numero de registros por pagina...

conn.CursorLocation = 3

pageSize = 10

if(len(Request.QueryString("p")) = 0 )then
  paginaAtual = 1
else
  paginaAtual = CInt(Request.QueryString("p"))
end if


' conta o numero de registros...
sql = "SELECT COUNT(*) AS total FROM produtos where nome like '%"&palavra&"%'" 
set rs = conn.execute(sql)

'total de registros
recordCount = Cint(rs("total"))

'calculamos o numero de paginas...

pageCount = Clng(recordCount / pageSize)

If pageCount < 1 then
pageCount = 1
end if

rs.Close()


Flag1 = INT(paginaAtual / pagesize)

PI = INT(Flag1 * pagesize)

IF PI = 0 THEN
PI = 1
END IF
PF = PI + pagesize - 1

' selecionamos os registros...

sql = "SELECT * FROM produtos where nome like '%"&palavra&"%' LIMIT " & (paginaAtual - 1) * pageSize & " , " & pageSize   
set rs = conn.execute(sql)
  
        
do while not rs.eof
' aqui entra o q você quer exibir
  Response.Write  "  "& rs("nome") & " <a href='produtos.asp?produto=" & rs("idprod") & "'><img src='produtos/imagens/" & rs("impeq") & "' width='75' height='75' border='0'></a><br>"
  rs.MoveNext()
loop

rs.Close()
set rs = nothing
Call FechaConn()
set conn = nothing


Response.Write ("Foram encontrado(s): <b>"&recordCount&"</b> camiseta(s)<br><B><strong> Página " & paginaAtual & " de " & pagecount & " </strong></B><br>")
' cria os links de pagians...
IF CInt(paginaAtual) > 1 THEN
Response.Write "<a href='"&pagina&"?busca="&palavra&"&p=1'>Primeira</a> "
Else
Response.Write "<font color=""#ADADAD"">Primeira</font> "
END IF

if CInt(paginaAtual) > 1 then
Response.Write "<a href='"&pagina&"?busca="&palavra&"&p=" & paginaAtual - 1 &"'>Anterior</a> "
Else
Response.Write "<font color='#666666'>Anterior</font>  "
END IF

for i=1 to pageCount
  Response.Write("<a href='"&pagina&"?busca="&palavra&"&p=" & i & "'>" & i & "</a> ")
next
  

IF (CInt(paginaAtual) < pagecount) THEN
         IF CInt(PF) <> pagecount THEN
   Response.Write "<a href='"&pagina&"?busca="&palavra&"&p=" & paginaAtual+1 & "'>Próxima</a> "
  END IF
Else
  Response.Write "<font color=""#ADADAD"">Próxima</font> "
END IF


IF (CInt(paginaAtual) <> pagecount) THEN
         IF CInt(PF) <> pagecount THEN
   Response.Write "<a href='"&pagina&"?busca="&palavra&"&p=" & pagecount & "'>Última</a> "
  END IF
Else
  Response.Write "<font color=""#ADADAD"">Última</font> "
  END IF
  
%>

 

agora é só a galera adaptar conforme a necessidade!

Compartilhar este post


Link para o post
Compartilhar em outros sites

legal ...

depois podemos disponibilizar no laboratório de script.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como adapto a paginação neste código?

<% @Language = VBScript %><%session.LCID=1046%>
<%strBusca = Request.QueryString("busca")
if strBusca <> "" then
stringConexao = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=" & Server.MapPath("dados/dados.mdb")
Set RsConexao = Server.CreateObject("ADODB.Connection")
RsConexao.Open stringConexao
strSQL = "SELECT * FROM Noticias WHERE Noticia LIKE '%"& TiraAcento &"%'" 
Set RS = RsConexao.Execute(strSQL) %>
<body bgcolor="white" leftmargin="0" marginwidth="0" topmargin="0" marginheight="0">
<font face="Arial"><span style="font-size:10pt;"> 
<%While not RS.EOF
response.write ("<a href=""ver.asp?id=" & RS("ID") &  """>" & RS("Topico") & "</a>") & "<BR><BR>"
RS.MoveNext
Wend
end if
 %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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