Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite,
Estou apelando para este post porque já fiquei mais de 9 horas lendo, pesquisando e tentando montar um UPDATE MySQL em ASP para múltiplos registros com três campos cada. O mais perto que cheguei (pelo dúvidas frequentes do fórum) foi através do código abaixo.
Bom, eu tenho uma tabela "*fotos*" com os campos: **id**, **titulo** e **sessao**. Tenho duas páginas ASP: uma com o formulário que contém a tabela com todos os registros listados e outra que faz o update no MySQL a partir dos dados deste formulário.
1) fotos_listar.asp
<form name="formulario" method="post" action="fotos_editar.asp">
<% While Not RS.EOF ...%>
(...)
<input name="titulo_<%=(RSgaleria.Fields.Item("id").Value)%>" type="text" value="<%=(RSgaleria.Fields.Item("titulo").Value)%>" />
<input name="sessao_<%=(RSgaleria.Fields.Item("id").Value)%>" type="text" value="<%=(RSgaleria.Fields.Item("sessao").Value)%>" />
<input name="botao" type="submit" value="Atualizar todos os dados!" />
(...)
<% Whend ...%>
</form>
Obs: Na página acima ela me retorna perfeitamente uma tabela aparecendo todos os registros listados com seus respectivos campos (até aí tudo bem!). O problema está na próxima página! (acredito eu)
2) fotos_editar.asp
<!--#include file="inc_conexao.asp" -->
<%
Dim i
For i = 1 to Request.Form.Count
SQL1 = "SELECT * FROM fotos WHERE id= " &i
Set RSfotos = conexao.Execute(SQL1)
titulo = Int(Request("titulo"&i))
sessao = Int(Request("sessao"&i))
id = i
SQL2 = "UPDATE fotos SET titulo = '"&titulo&"', sessao = '"&sessao&"' " &_
" WHERE id = " & id
conexao.Execute SQL2
Next
conexao.close
Set RSfotos = Nothing
Response.Redirect("update_ok.asp")
%>
Obs: O UPDATE é realizado, porém com todos os valores em zero. Ou seja, é feito o update mas todos os registros e todos os campos ficam com o valor "0" inserido. Bom, isso foi o mais perto que "acho" ter chegado!
No mais agradeço a atenção!
=]
tenta assim:
For i = 1 To Request.Form("id").Count
UPDATE fotos SET titulo = '"&request.form("titulo")(i)&"', sessao = '"&request.form("sessao")(i)&"' WHERE id = " & request.form("id")(i)
Olá Vinícius e Xanburzum,
Tentei fazer utilizando as duas sugestões de vocês porém não funcionou. Sendo assim, eu remontei a minha estrutura de form e execução. Vou explicar detalhadamente como fiz agora:
1) na página "fotos_listar.asp" (eu resumi o código aqui, ok? porque está funcionando bem, mas fiz algumas modificações.)
<form id="formulario" name="formulario" method="post" action="fotos_atualizar.asp">
<% While Not RSfotos.EOF) %>
<img src="galeria/<%RSfotos.Fields.Item("foto").Value)%>" width="90" height="90" />
<input name="checkbox" type="checkbox" value="<%=(RSfotos.Fields.Item("id").Value)%>" />
<input name="titulo" type="text" value="<%=(RSfotos.Fields.Item("titulo").Value)%>" />
<select name="sessao" value="<%=(RSsessao.Fields.Item("sessao_fotos").Value)%>"</select>
<%
RSfotos.MoveNext()
Wend
%>
<input name="botao" type="submit" value="Atualizar todos os dados marcados!" />
</form>
Aqui eu criei um "checkbox" para filtrar os registros que deverão ser alterados no UPDATE da próxima página.
Sendo assim, neste form eu tenho:
• 1 imagem que não sofrerá nenhuma alteração
• 1 checkbox contendo em seu value o ID do registro listado
• 1 textfield contendo em seu value o valor do título da foto
• 1 select contendo em seu value o valor da sessão da foto
Então a visualização desta página fica assim:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.hdwd.com.br/gif/galeria.jpg&key=5cf8181eebf9485ef72543f06c0da567e6edc09ecd657a994c4572256f959f26" alt="galeria.jpg" />
2) na página "fotos_atualizar.asp" eu adaptei algumas funções como se segue abaixo, porém não está funcionando:
<!--#include file="inc_conexao.asp" -->
<%
Dim checkbox
checkbox = Request("checkbox")
If checkbox <> "" Then
Set RSfotos = conexao.Execute("SELECT id FROM fotos WHERE id = " &checkbox)
While Not RSfotos.EOF
id = RSfotos("id")
titulo = Request("titulo")
sessao = Request("sessao")
conexao.Execute "UPDATE fotos SET titulo = '"&titulo&"', sessao = '"&sessao&"' " &_
" WHERE id = " &id
Wend
conexao.close
Set RSfotos = Nothing
End If
Response.Redirect("update_ok.asp")
%>
O quê será que preciso fazer para esse UPDATE funcionar certinho chamando os IDs respectivos? Mais uma vez agradeço a atenção!
ENCONTREI A SOLUÇÃO COM O "LeoB" PARA A QUESTÃO ABERTA NESTE POST (testada e funcionando perfeitamente):
Bom, então abaixo segue o código de como ficou a solução para UPDATE de vários registros e com vários campos (by LeoB):
1) página fotos_listar.asp
<form id="formulario" name="formulario" method="post" action="fotos_atualizar.asp">
<% While Not RSfotos.EOF) %>
<img src="galeria/<%RSfotos.Fields.Item("foto").Value)%>" width="90" height="90" />
<input name="titulo<%=(RSfotos.Fields.Item("id").Value)%>" type="text" value="<%=(RSfotos.Fields.Item("titulo").Value)%>" />
<select name="sessao<%=(RSfotos.Fields.Item("id").Value)%>" value="<%=(RSsessao.Fields.Item("sessao_fotos").Value)%>"</select>
<%
RSfotos.MoveNext()
Wend
%>
<input name="botao" type="submit" value="Atualizar todos os dados!" />
</form>
2) página fotos_atualizar.asp
<!--#include file="inc_conexao.asp" -->
<%
Set RSfotos = conexao.Execute("SELECT id FROM fotos")
While Not RSfotos.EOF
id = RSfotos("id")
titulo = Request("titulo" & id)
sessao = Request("sessao" & id)
conexao.Execute "UPDATE fotos SET titulo = '"&titulo&"', sessao = '"&sessao&"' " &_
" WHERE id = " &id
RSfotos.MoveNext
Wend
conexao.close
Set RSfotos = Nothing
Response.Redirect("update_ok.asp")
%>
Até a próxima!
Testa retirando o int do request form e caso ainda não dê certo, dá um response.write na sql2:
titulo = Request.Form("titulo"&i))
sessao = Request.Form("sessao"&i))
E se não funcionar:
SQL2 = "UPDATE fotos SET titulo = '"&titulo&"', sessao = '"&sessao&"' WHERE id = " & id
response.write sql2
'conexao.Execute SQL2