Ir para conteúdo

POWERED BY:

Arquivado

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

Cesão

Dificuldade com Session e Form

Recommended Posts

Olá amigos,

 

Gostaria que vcs me ajudassem no seguinte:

Eu tenho um formulário onde listo todos os meus produtos. Do lado de cada produto existe um input pro usuário colocar a quantidade desejada.

Gostaria de saber qual o melhor método para capturar todos os IDs itens do formulário que possuem quantidade diferente de 0, a quantidade digitada pelo usuário para cada um desses produtos, armazenar essas duas informações em sessions (ou cookies) e logo depois mostrar esses cookies numa lista.

 

parte do meu form que mostra os produtos:

<%do while not TB.EOF%>
<li>
<p><%=TB("TXT_NOME")%></p>
<input type="hidden" name="id" id="id_<%=TB("ID_PRODUTO")%>" value="<%=TB("ID_PRODUTO")%>" />
<label><input type="text" name="qtde" id="qtde_<%=TB("ID_PRODUTO")%>" maxlength="3" value="0" /></label>
<p><%=FormatCurrency(TB("NUM_PRECO"),2)%></p>
</li>
<%TB.movenext : loop%>

Já busquei dentro e fora do fórum sobre carrinho de compras e etc, mas todos eles só dão exemplos de quando você possui apenas um produto sendo mostrado, digita a quantidade e envia. Dessa maneira eu saberia fazer, mas quando são vários produtos no mesmo formulário, complica e não consigo entender como fazer. Alguém me ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando enviar os dados do formulário, todos os campos, até os vazios serão enviados. Então você deve fazer a comparação no código que recebe os dados e verificar se está vazio, ser é 0, etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... mas isso eu conseguiria fazer (a comparação). O problema é que não consigo encontrar a lógica para:

Puxar todos os inputs, saber que a quantidade X é respectiva ao ID X (pq do jeito que está, ele simplesmente baixa todos os IDs e todas as quantidades e não sei como combiná-los), colocar todos esses valores diferentes de 0 em cookies ou sessions, e apresentá-los em uma lista logo abaixo. Tudo isso sem precisar de nenhum banco de dados (a não ser para criar o formulário de produtos, claro).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

Por que você não faz isso:

<label><input type="text" name="qtde_<%=TB("ID_PRODUTO")%>" id="qtde_<%=TB("ID_PRODUTO")%>" maxlength="3" value="0" /></label>

 

Assim você pega campo por campo, veja que o campo quantidade pegou o ID do produto. Assim há dá para você identificar qual produto é.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu cheguei a fazer assim tbm. Daí eu fiz o request fazendo um select de todos os produtos e dai fazendo um loop de request.form com o id dos produtos e consegui fazer o request de todos eles. e dei um If pra só pegar os produtos de quantidade diferentes de 0. ficou assim:

 

do while not TB.EOF
codigo = TB("ID_PRODUTO")
pedido = Cstr(Request.Form("prod"&codigo))
If Cstr(pedido) <> "0" Then
	Response.Cookies("EsfihaPedido")("PCod_"&TB("ID_PRODUTO")&"") = codigo
	Response.Cookies("EsfihaPedido")("Qtde_"&TB("ID_PRODUTO")&"") = pedido
End If
TB.movenext : loop

Daí me compliquei na hora de armazenar isso em Sessions ou Cookies.

 

Tentei criar Cookies com o nome dos IDs dos produtos que vieram no Request, mas daí não tem como mostrá-los, pois como é dinâmico, não tem como saber qual vai ser o nome dos Cookies. Qual a lógica que você sugere?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É possível você pegar os cookies sem saber o nome dos mesmos... veja esse exemplo abaixo:

<%
dim x,y
for each x in Request.Cookies
  response.write("<p>")
  if Request.Cookies(x).HasKeys then
	for each y in Request.Cookies(x)
	  response.write(x & ":" & y & "=" & Request.Cookies(x)(y))
	  response.write("<br />")
	next
  else
	Response.Write(x & "=" & Request.Cookies(x) & "<br />")
  end if
  response.write "</p>"
next
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas daí assim ele vai mostrar todos os cookies existentes no meu site, certo?

E mesmo que eu fixasse um nome para X para mostrar apenas os cookies de uma sessão do meu site, eu nao teria como listá-lo em uma tabela do tipo:

 

PRODUTO | QUANTIDADE

Carro | 1

Moto | 5

Barco | 10

 

Certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele vai listar todos. Aí você separa o grupo (como você mesmo sugeriu).

 

Você consegue separá-los e exibir da forma que desejar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, mas a separação do grupo nao funcionaria nesse caso.. CARrO, MOTO ou BARCO não são grupos.. sao os produtos.. eu teria que pegar esse nome através do ID.

 

A lógica ta ficando cada vez mais complexa. rs

Pegar os dados (id e quantidade) de cada item do formulário eu consigo. Até aí, ótimo.

 

O problema está sendo mesmo criar esses Cookies. Eu estou puxando os dados do Formulário e inserindo em Cookies assim:

 

do while not TB.EOF
codigo = TB("ID_PRODUTO")
pedido = Cstr(Request.Form("prod"&codigo))
If Cstr(pedido) <> "0" Then
	Response.Cookies("EsfihaPedido_PCod")("ID_"&codigo) = codigo
	Response.Cookies("EsfihaPedido_Qtde")("ID_"&codigo) = pedido
End If
TB.movenext : loop

E agora estou listando a quantidade de cada produto assim:

<%
		for each y in Request.Cookies("EsfihaPedido_Qtde")
		  response.write("EsfihaPedido_Qtde" & ":" & y & "=" & Request.Cookies("EsfihaPedido_Qtde")(y))
		  response.write("<br />")
		next
		%>

Agora o problema vai ser lidar com essas cookies.. como deletar uma caso o cara queira deletar.. como alterar a quantidade de uma caso ele queira alterar.. e como relacionar as cookies com o banco, para mostrar mais dados do produto. caso você tenha alguma idéia, podemos ir montando juntos.

Aliás. será que estamos viajando muito e existe alguma lógica de carrinho de compras mais fácil do que essa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora está quase tudo pronto. hehe

Usei a lógica que você me mandou e funcionou. as únicas coisas que preciso implementar agora é a parte de deletar um cookie (que está dando pau) e a parte de alterar quantidade (que já tenho uma idéia de como fazer).

 

A parte de deletar que está dando pau é o seguinte. eu listei os cookies e relacionei com os registros do banco e mostrei assim:

 

<%
				for each y in Request.Cookies("EsfihaPedido_Qtde")
				cokname = Split(y, "_")
				idProd = cokname(1)
				Qtde = Request.Cookies("EsfihaPedido_Qtde")(y)
				
				SQL = "SELECT a.ID_PRODUTO, a.TXT_NOME, a.NUM_PRECO, b.TXT_CATEGORIA "_
					& " FROM TBL_PRODUTOS a "_
					& " INNER JOIN TBL_PRODUTOS_CATEGORIAS b ON a.ID_CATEGORIA=b.ID_CATEGORIA "_
					& " WHERE a.ID_PRODUTO="&idProd
				TBITENS.Open SQL, Conn
				
				preco_prod_total = Ccur(Qtde) * Ccur(TBITENS("NUM_PRECO"))
				%>
				<tr>
				  <td><%=TBITENS("ID_PRODUTO")%></td>
				  <td><%=TBITENS("TXT_CATEGORIA")%> | <%=TBITENS("TXT_NOME")%></td>
				  <td><%=Qtde%></td>
				  <td><%=FormatCurrency(TBITENS("NUM_PRECO"),2)%></td>
				  <td><%=FormatCurrency(preco_prod_total,2)%></td>
				  <td><p class="bt_delete"><a href="pedido_confirma.asp?DELID=<%=TBITENS("ID_PRODUTO")%>" title="retirar produtos do pedido">retirar produtos do pedido</a></p></td>
				</tr>
				<%TBITENS.Close : Next%>

Daí criei aquela parte do link "pedido_confirma.asp?DELID=<%=TBITENS("ID_PRODUTO")%>" que chama a seguinte linha lá no começo da página:

 

DELID = Request("DELID")
If DELID <> "" Then
	Response.Cookies("EsfihaPedido_PCod")("ID_"&DELID) = ""
	Response.Cookies("EsfihaPedido_Qtde")("ID_"&DELID) = ""
End If

O problema é que quando clico no botão p deletar, ele faz todo o código e realmente apaga a quantidade do item.. mas ao invés de não aparecer mais o cookie, ele aparece na lista lá embaixo, mas com a quantidade vazia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom gente. percebi que quando você esvazia um Cookie (Response.Cookies("EsfihaPedido_Qtde") = "") ele apaga o mesmo, mas quando você esvazia um cookie com chave (Response.Cookies("EsfihaPedido_Qtde")("ID_2") = "") ele apenas o esvazia, mas ele se mantem na lista do cookie.

 

Por isso, só fiz um If para que os cookies vazios não fossem mostrados e o código ficou assim:

 

<%
				for each y in Request.Cookies("EsfihaPedido_Qtde")
				cokname = Split(y, "_")
				idProd = cokname(1)
				Qtde = Request.Cookies("EsfihaPedido_Qtde")(y)
					If Qtde <> "" Then
						SQL = "SELECT a.ID_PRODUTO, a.TXT_NOME, a.NUM_PRECO, b.TXT_CATEGORIA "_
							& " FROM TBL_PRODUTOS a "_
							& " INNER JOIN TBL_PRODUTOS_CATEGORIAS b ON a.ID_CATEGORIA=b.ID_CATEGORIA "_
							& " WHERE a.ID_PRODUTO="&idProd
						TBITENS.Open SQL, Conn
						
						preco_prod_total = Ccur(Qtde) * Ccur(TBITENS("NUM_PRECO"))
						preco_total = preco_total + preco_prod_total
						%>
						<tr>
						  <td><%=TBITENS("ID_PRODUTO")%></td>
						  <td><%=TBITENS("TXT_CATEGORIA")%> | <%=TBITENS("TXT_NOME")%></td>
						  <td><%=Qtde%></td>
						  <td><%=FormatCurrency(TBITENS("NUM_PRECO"),2)%></td>
						  <td><%=FormatCurrency(preco_prod_total,2)%></td>
						  <td><p class="bt_delete"><a href="pedido_confirma.asp?DELID=<%=TBITENS("ID_PRODUTO")%>" title="retirar produtos do pedido">retirar produtos do pedido</a></p></td>
						</tr>
						<%
						TBITENS.Close
					End If
				Next
				%>

Agora ele mostra a listagem do pedido escondendo os cookies vazios.

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.