Jump to content


Photo

Update Com Vários Campos E Vários Registros (Asp)


  • Faça o login para participar
6 replies to this topic

#1 helinho

helinho

    Novato no fórum

  • Usuários
  • 6 posts

Posted 22/07/2011, 04:17

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!



=]

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 22/07/2011, 12:00

O primeiro problema é que nem sempre os ids estarão em uma ordem sequencial, pra você poder usar um for. Segundo, o número de campos não corresponde ao números de registros, então você não pode usar Request.Forms.Count ali. E terceiro que aquele Int ali é que deve estar convertendo tudo pra zero. Se os campos são texto, não entendi pra usar essa função. O primeiro SQL ali não tem utilidade nenhuma. Você fez um SELECT e não usou pra nada. Faça assim:

<!--#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

Wend

conexao.close
Set RSfotos = Nothing

Response.Redirect("update_ok.asp")
%>


#3 helinho

helinho

    Novato no fórum

  • Usuários
  • 6 posts

Posted 22/07/2011, 21:13

Oi LeoB,

Tentei montar de acordo com as suas instruções e não deu certo. O código fica rodando até exceder o tempo de execução do MySQL. Bom, mas muito obrigado pelos seus esclarecimentos que são bem plausíveis e lógicos. Sendo assim, eu remontei a minha estrutura de form e execução. Vou te explicar detalhadamente:

1) na página "fotos_listar.asp" (eu resumi o código, 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:
Posted Image


2) na página "fotos_atualizar.asp" eu adaptei o seu código sugerido 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")
%>


Você acha que agora fica melhor para encontrarmos uma solução LeoB? Quando tiver um tempinho me dê uma auxiliada, pois acredito que não deve estar muito longe de fazer o código funcionar!


Mais uma vez agradeço a atenção!

Edição feita por: helinho, 22/07/2011, 21:24.


#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 22/07/2011, 21:40

Falta de prática minha... Faltou o RSfotos.MoveNext antes do Wend.

<!--#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")
%>

Edição feita por: LeoB, 22/07/2011, 21:40.


#5 helinho

helinho

    Novato no fórum

  • Usuários
  • 6 posts

Posted 23/07/2011, 00:28

LeoB,

Fiz as alterações e o UPDATE funcionou, porém todos os valores são atualizados para "vazio". Ou seja o código funciona atualizando tudo, mas com valores vazios. Agora fiquei na dúvida de como tratar o meu FORM e de como entender como que o seu código vai pegar o ID respectivo a ser atualizado.

1) deixei o form assim:
<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) deixei o código asp assim:
<%
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")
%>

Obs: eu não consegui processar onde que no seu código os ID a serem atualizados serão identificados para o UPDATE. No caso de "titulo = Request("titulo" & id) e sessao = Request("sessao" & id)" quer dizer que estará me retornando algo do tipo: "titulo = Piscina1" e "sessao = Lazer1" é isso? E se for, vai para o banco de dados assim?

O Meu FORM está certo no que diz respeito às propriedades "value" e "name"?

Edição feita por: helinho, 23/07/2011, 00:31.


#6 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 23/07/2011, 00:56

Agora faltou o underline do nome dos campos...

titulo = Request("titulo_" & id)
   sessao = Request("sessao_" & id)


#7 helinho

helinho

    Novato no fórum

  • Usuários
  • 6 posts

Posted 23/07/2011, 01:32

LeoB,

Uhuuulll!! Você BRILHOU cara!!! Agora deu certo!!! Ufa... que alívio, muitíssimo obrigado pela paciência e ajuda!!! Show de Bola... Eu tirei o underline do form... achei melhor! Vlw pela ajuda!!!


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!

Edição feita por: helinho, 23/07/2011, 01:33.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq