Ir para conteúdo

POWERED BY:

Arquivado

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

Inside

[Resolvido] Cookiec com vários valores

Recommended Posts

Caros amigos,

 

preciso de uma ajuda, criei um cookie com vários registros:

 

response.cookies("produtos_armazena")("1") = intProdID
response.cookies("produtos_armazena")("2") = intProdID
response.cookies("produtos_armazena")("3") = intProdID
response.cookies("produtos_armazena").expires = date + 360

 

Esse cookie grava o ID do produto.

 

Importante: Cada instância (não sei se esse o nome certo) do cookie tem um valor, os IDs são diferentes em cada ("").

 

Mas como faço para comparar o cookie com um istrução Select? tentei desta forma mas não deu certo:

 

 

dim rs_arm, sql_arm

SQL_arm = "SELECT idprod, nome, impeq, imgra, preco FROM produtos where idprod = " & request.cookies("produtos_armazena")("1") & " and idprod = " & request.cookies("produtos_armazena")("2") & ""

set rs_arm = abredb.execute(sql_arm)

if rs_arm.eof and rs_arm.bof then
	response.write "Nenhum produto"
else
do while not rs_arm.eof

response.write "<td width=""85"" align=""center""><a href=""produtos.asp?produto=" & rs_arm("idprod") & """ class=""bmgv""><img src=produtos/" & rs_arm("impeq") & " width=""70"" border=""0""></a><br><a href=""produtos.asp?produto=" & rs_arm("idprod") & """ class=""arm_1"">" & rs_arm("nome") & "</a></td><td width=""5""></td>"

rs_arm.movenext
loop
end if

set rs_arm = nothing

 

O que eu quero é pegar os valores que estão nas intâncias do cookie comparar com o banco e jogar na tela.

 

 

Obrigado pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz assim

 

utilize o between

 

exemplo

 

SQL_arm = "SELECT idprod, nome, impeq, imgra, preco FROM produtos where idprod BETWEEN " & request.cookies("produtos_armazena")("1") & " AND " & request.cookies("produtos_armazena")("2") & ""

SELECT * FROM clientes WHERE id BETWEEN 10 AND 20;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Patrique, obrigado pela ajuda.,

 

 

bom, outra coisa eu preciso que mostre apenas 6 resultados dai coloquei SELECT TOP 6 no seu no SELECT que você passou que tem o BETWEEN.

 

Mas está entranho, BETWEEN seria "entre", certo?

 

Olha só no cookie ("1") o valor é 25 e no ("2") é 44 e o código está mostrando do ID 25 até o 44 e eu preciso que mostre apenas esses 2 IDs, porém ainda preciso chegar até 6 pois será um cookie com 6 valores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a principio pensei que você queria chegar d valor x ao valor y... cruzando todos os resultados que estivessem dentro destes números, por isso sugeri o BETWEEN.

 

Mais tu poderia reformular a sua dúvida li e reli e ainda não entendi.

 

quando você disse

 

Mas está entranho, BETWEEN seria "entre", certo?

eu não entendi :huh:

 

depois não entendi isso também

 

eu preciso que mostre apenas esses 2 IDs, porém ainda preciso chegar até 6 pois será um cookie com 6 valores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Patrique me perdoe pela dúvida mas vou explicar

 

 

eu preciso criar uma função que mostre quais são os últimos 6 produtos vistos pelo usuário do site, mas o site não tem login, o usuário clica no produto e o site grava num cookie o ID do produto no cookie ("1") e dai por diante se ele ver 6 produtos o site tem que mostrar os ultimos 6 produtos que o usuário viu.

 

Blezeza, com os valores gravados nos cookies eu preciso agora comparar os IDs gravados nos cookies com um Select e jogar na tela o que o usuário viu, nem sempre ele vai ver 6 produtos, pode ser 1 ou 2. O importante é que preciso jogar na tela os valores dos cookies.

 

A principio pensei em criar 6 SELECTs mas acho que deve haver um forma que nao tenha tanto código.

 

Acho que agora expliquei melhor.

 

Mas vou até mostrar. O que eu quero é isso aqui os útimos intes visto que está lá em baixo no site:

Clique aqui!

 

EDITADO

 

Será que tenho usa For Each mas não sei direito como usar. alguém pode ajudar?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora eu entendi, porém desta maneira não vai funfar cara.

 

Você tem uma função que substitui os cookies?

 

Vamos supor que quando preencher o cookie 6 dae vai ter os seguintes valores

 

cookie 1: 01

cookie 2: 02

cookie 3: 03

cookie 4: 04

cookie 5: 05

cookie 6: 06

 

mais e quando o usuário olhar o 7 livro na página??? ele consequentemente teria que encaixar....

 

Aquele sistema funciona da seguinte maneira.

 

O usuário ver o primeiro livro... é criado um cookie no valor 01....

 

o usuário ver o segundo livro.... é criado um cookie no valor 02....

 

isto acontece até o sexto.... da a quando tem que criar o sétimo tu tera que fazer uma rotina no asp... que apague o primeiro cookie e insere o setimo dae ficaria assim

 

cookie 1: 02

cookie 2: 03

cookie 3: 04

cookie 4: 05

cookie 5: 06

cookie 6: 07

 

dae o usuário ve o oitavo... o sistema apagaria o cookie 02 e criaria o 08 ficaria assim

 

cookie 1: 03

cookie 2: 04

cookie 3: 05

cookie 4: 06

cookie 5: 07

cookie 6: 08

 

sacou... tu vai ter uma função que faça este processo, desta forma ele coloca os registros em ordem de visita aos livros, o processo é bem complicado mais tem que ser feito mais ou menos assim, não há cabimento deixar o usuário criando vários cookie sendo que você so precisara dos 6.

 

Tem que ser bem estudado, eu faria este processo com javascript, pois seria muito mais pratico.

 

Mais querendo ou não tu teria que utilizar ASP com JAVASCRITP, eu faria o javascrit criar um único cookie com os valores dos ids do livro dentro dele, separado por | por exemplo... ficaria mais ou menos assim

 

1|2|3|4|5|6

 

Depois por Split eu separaria os ids e montava o esquema dos últimos 6 livros, dando um if e fazendo um select no BD

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Patrique obrigado,

 

vamos por partes. Quanto a rotina para apagar os cookies e ir renovando eu consegui fazer, ficou meio complicado de entender mas eu fiz de uma forma que funcionou. Já testei várias vezes e quando chega no cookie 7 funciona beleza, ele apaga o cookie 1 e grava o novo valor e assim por diante.

 

Outra parte que você falou sobre Split disso não entendo nada, mas procurei a dica do Ted'k sobre OR e deu certo mas ainda restou um problema. O SELECT que fiz mostra os cookies criados mas está ordenando pelo ID isto é, se eu vi o produto ID 50 ontem e vi o produto 76 hoje o SELECT está mostrando o ID 50 primeiro, mas deveria aparecer o IDs nesta sequência: 76, 50. Ordenar por ASC ou DESC não vai adiantar porque se você ver o poduto 60 o código vai encaixar na sequência. A sequência que preciso é sequência de criação do cookie e não numérica dos IDs. Alguma dica para resolver isso, ai vai o código:

 

SQL_arm = "SELECT idprod, nome, impeq, preco "
SQL_arm = SQL_arm & "FROM produtos where status <> 'ok' and "
SQL_arm = SQL_arm & "(idprod = " & request.cookies("produtos_armazena")("1") & ")"
if not cookie_2 = "" then
SQL_arm = SQL_arm & " OR (idprod = " & request.cookies("produtos_armazena")("2") & ")"
end if
if not cookie_3 = "" then
SQL_arm = SQL_arm & " OR (idprod = " & request.cookies("produtos_armazena")("3") & ")"
end if
if not cookie_4 = "" then
SQL_arm = SQL_arm & " OR (idprod = " & request.cookies("produtos_armazena")("4") & ")"
end if
if not cookie_5 = "" then
SQL_arm = SQL_arm & " OR (idprod = " & request.cookies("produtos_armazena")("5") & ")"
end if
if not cookie_6 = "" then
SQL_arm = SQL_arm & " OR (idprod = " & request.cookies("produtos_armazena")("6") & ")"
end if

Ou então se você puder fazer um novo SELECT com SPLIT que você disse fico muito agradecido.

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, na minha lógica desta forma não funfa, além do mais teria que ser criado um cookie por id e na minha lógica o mais correto é criar 1 cookie e jogar os ids, depois no asp separa eles por split

 

Otem eu comecei a fazer um exemplo para você ver, na verdade não é o certo eu jogar na mãozinha rsrsrsrsrsrs mais vou fazer um exemplo aqui jogando os ids dos livros vistos em um único cookie e este cookie sendo atualizado sempre quando houver novas leituras.

 

Também vai ser uma boa aos outros usuários pois este sistema não se encontra na net.

 

Aguarde que logo logo eu finalizo e você tera uma noção do que eu disse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, terminei aqui...

 

A primeira coisa é criar um javascript que fique encarregado e tenha as funções para criar os cookie send que o mesmo tera que ter funções de ler, criar, editar e carregar os cookies.

 

Coloquei um demo online para você ver como vai ficar

 

http://www.metodistavilanova.com.br/livros/index.asp

 

Para isso criei um js que ficara com estas funções.

 

crie um arquivo chamado lendo_livros.js

 

lendo_livros.js

function salvando_livro() {
	var lendo_livro = livro_id;
	var lista_livro = carrega_recentes();
	var livro_salvo = 0;

	if( lista_livro != null ) {
		var array_livro = lista_livro.split( "|" );

		for( i = 0; i < array_livro.length; i++ ) {

			if ( array_livro[ i ] != livro_id && livro_salvo < 6 ) {
				lendo_livro = lendo_livro + "|" + array_livro[ i ];
				livro_salvo ++;
			}
		}
	}

	cria_cookie( "lidos", lendo_livro, 28 );
}

function carrega_recentes() {

	lista_livro = ler_cookie( "lidos" );

	return lista_livro;

}

function cria_cookie(nome, valor, dias) {

	if(dias) {
		var data = new Date();
		data.setTime(data.getTime() + (dias * 24 * 60 * 60 * 1000));
		var expira = "; expires=" + data.toGMTString();
	} else {
		var expira = "";
	}

	document.cookie = nome + "=" + valor + expira + "; path=/";
}

function ler_cookie(nome) {

	var nomeEQ = nome + "=";
	var ca = document.cookie.split(';');

	for(var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0) == ' ') c = c.substring(1, c.length);
		if (c.indexOf(nomeEQ) == 0 ) return c.substring(nomeEQ.length, c.length);
	}

	return "";

}

Na linha 11 eu especifiquei 6, ele será o número de ids criados neste cookie, o número de ids não ultrapassara este valor, querendo aumentar modifique esta linha.

 

Agora crie um arquivo chamado conexao.asp nele ficara uma rotina aonde tera a function que conectara ao BD.

 

conexao.asp

<%
Dim Conn

Public Function ConnDB(bd)
	Set Conn = Server.CreateObject("ADODB.Connection")
		Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(bd) & ";"
End Function
%>

Fim uma página simples para teste, de o nome dela de index.asp nela o sistema vai listar a relação de livros pegando através de um select o nome do livro e o id deste registro.

 

crie um arquivo chamado index.asp

 

index.asp

<!-- #include file="conexao.asp" -->
<%
If Request.QueryString("acao") = "limpar" then
   Response.Cookies("lidos").Expires = now
   Response.Redirect("./index.asp?acao=limpado")
End If

ConnDB("livros.mdb")

Set RS = Conn.Execute("SELECT id,nome FROM livros_tbl")

Response.Write("<table width=""100%"" border=""0"" cellpadding=""0"" cellspacing=""0"">")
Response.write("<tr>")
Response.Write("<td>")

Response.Write("<strong>LIVROS DISPONÍVEIS PARA A LEITURA</strong>")
Response.Write("<br /><br />")

for each item in RS.fields
next
DO UNTIL RS.eof

Response.Write("<a href=""lendo.asp?id=" & RS("id")& """>" & RS("nome") & "</a><br />")

RS.movenext
LOOP

Response.Write("</td>")
Response.Write("<td vAlign=""top"">")
%>
<!-- #include file="livros_lidos.asp" -->
<%
Response.Write("</td>")
Response.Write("</tr>")
Response.Write("</table>")
%>

Agora crie um arquivo chamado lendo.asp nesta página você tera que colocar um js, ele será responsável por criar o id deste livro que esta sendo lido no cookie...

 

lendo.asp

<%
If Request.QueryString("id") = "" then
	Response.Redirect("./index.asp?acao=erro")
End If
%>

<script src="lendo_livro.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
	var livro_id = <%=Request.QueryString("id")%>;
	salvando_livro();
</script>

<%
Response.Write("blá blá blá do livro")
Response.Write("<br /><br />")
Response.Write("<a href=""./index.asp"">voltar</a>")
%>

Repare o javascript, através do index eu sou direcionado para esta página, é nela aonde ficara a informações do id, note que eu fui parar nela atraves de um querystring, este querystring contem o id do anuncio e é posto no javascript para criar o id do último registro lido.

 

Por fim criamos uma page que sera responsável por ler o cookie, separar os ids e mostrar ao usuário, para isso crie uma página chamada livros_lidos.asp

 

Fim uma function que faz a contagem e monta o select, uso o splite para separar os valores dos ids... uso if para contagem e montagem dos selects e por fim monto o sql e do um response.write

 

livros_lidos.asp

<strong>ÚLTIMOS 6 LIVROS LIDOS POR VOCÊ NO SITE</strong>
<br /><br />
<%
lidos = Request.Cookies("lidos")
contagem = split(lidos,"|")
numero = uBound(contagem)

ConnDB("livros.mdb")

Dim total

Function Montagem(num)
  For total = 1 to num

	somaid = total - 1
	somalido = total
	lidonum = lido & somalido
	id1 = contagem(somaid)

	Set lidonum = Conn.Execute("SELECT * FROM livros_tbl WHERE id = "& id1 &"")

	Response.Write "<li><a href=""/livro.asp?id="& lidonum("id") &""">"& lidonum("nome") &"</a></li>"

  Next

	Response.Write("<br /><br />")
	Response.Write("<a href=""./index.asp?acao=limpar"">apagar anúncios salvos</a>")

End Function

if numero = "1" then
	Montagem(1)
	elseif numero = "2" then
		Montagem(2)
	elseif numero = "3" then
		Montagem(3)
	elseif numero = "4" then
		Montagem(4)
	elseif numero = "5" then
		Montagem(5)
	elseif numero = "6" then
		Montagem(6)
else
	response.write "nenhum livro lido..."
end if

%>

Por fim crie um mdb chamado livros.mdb crie uma tabela chamada livros_tbl dentro desta tabela crie 2 tabelas, uma chamada de id e a outra chamada nome

 

Coloque tudo na mesma pasta e teste o code

 

Coloquei uma versão online para você ver como ficou

 

http://www.metodistavilanova.com.br/livros/

 

Também coloquei uma função para o usuário poder excluir os registros.

 

Bom ta ae, era isso que eu estava falando.

 

Depois eu te passo o número da minha conta corrente hein kkkkkkkkkkkkkkkkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Patrique, nossa que ajuda cara. Funcionou muito bem.

 

Você está de parabéns pela sua disposição em ajudar. Continue assim ajudando e Deus irá abençoá-lo.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Patrique,

 

só mais um coisa, eu atuzalizei a página depois de algum tempo e os produtos sumiram. O que houve? É data de expiração do cookie? Como posso por mais tempo?

 

Desconsider a parte de cima.

 

Descobri eu coloque isso no Select: AND status <> 'ok'

 

e sumiu tudo! Estranho.

 

Set lidonum = abredb.Execute("SELECT idprod, nome, impeq, preco FROM produtos WHERE idprod = " & id1 & "")

Set lidonum = abredb.Execute("SELECT idprod, nome, impeq, preco FROM produtos WHERE idprod = " & id1 & " AND status <> 'ok'")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Patrique,

 

bom a necessidade não sei sorque não fui eu que fiz o script, só estava implantando a função de armazenar produtos vistos mas pelo que vi todos os Selects de produtos tem isso, deve algo do tipo produto suspenso sim ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

Set lidonum = abredb.Execute("SELECT idprod, nome, impeq, preco FROM produtos WHERE idprod = " & id1 & " OR status = 'ok'")

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.