Ir para conteúdo

POWERED BY:

Arquivado

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

Luan Messias

[Resolvido] Um Form com dois actions é possivel ?

Recommended Posts

Boa tarde galera... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

estou com o seguinte problema já procurei em tudo

que é lugar e não encontrei nenhuma solução:

 

Tenho um form pequeno com 3 campos e uma area para upload

neste form seram executadas duas Actions:

 

1º monta um xml

2º faz o upload da imagem

 

(lembrando que ambos .asp estao funcionando perfeitamente mas so quando são usandos individualmente)

 

eu ja tentei de tudo não posso criar dois forms pois um action

precisa de todas as informaçoes dos dois forms, ja tentei juntar as duas funçoes

upload + criar xml no mesmo asp mas da erro...

 

alguem conhece alguma forma de conceguir executar estas duas ações no mesmo form ?

 

Des de ja muito Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente não entendi. Não é possível executar duas Actions no mesmo Form, mas se você está fazendo um "upload", neste mesmo Form você também pode enviar outras informações (campos input) e com estas trabalhar o seu xml.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo assim...

o meu form tem que executar duas ações a de fazer o upload da foto e depois criar o xml com os campos digitados no form,

a pouco eu concegui fazer as duas coisas usando a tag que redireciona pra outra... então eu fiz o seguin trageto

 

Form(action) -------> upload.asp (redirect) ------- > criarxml.asp

 

neste caminho tudo funciona perfeitamente o upload é feito e o xml é criado mas o xml cria as tags mas não concegue receber as variaveis do form.

 

entao segue minha pergunta:

 

tem alguma forma deu passar todas as variaveis do (form) pro (upload.asp) e ele repassa-las para o (criarxml.asp) ?

não sei se é facio ou possivel mas isto esta sendo um problema enorme pra min :blink:

 

 

Valeu cara Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

"criarxml.asp" está no mesmo dominio e mesmo host ?

 

se estiver no mesmo host, não bastaria simplesmente fazer um include do arquivo ?

 

 

<%

' aqui o codigo "do upload.asp"

 

' aqui adiciona o "criarxml.asp" ...

<!--#include file="criarxml.asp"-->

 

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você simplesmente incluiu o arquivo sem alterar a forma como recebe os parâmetros, obviamente que diversos erros aparecerão.

 

 

essa mensagem de erro é referente à chamada de um uma função VBScript.

 

segundo o relato do seu tópico, acredito que seja falta de parâmetros ou parâmetros inexistentes ao chamar alguma função do FSO ( File System Object )

 

entretanto, o erro pode ter outras causas, por exemplo

 

se setiver usando a função Left()

 

response.write Left( variavel , 10)

 

se variável não existir ou possuir 0 characteres, será gerada essa exception.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem alguma forma deu passar todas as variaveis do (form) pro (upload.asp) e ele repassa-las para o (criarxml.asp) ?

não sei se é facio ou possivel mas isto esta sendo um problema enorme pra min

Porque não integra as duas rotinas na mesma página "upload.asp"???

Recupere os dados do Form e efetue o upload, dentro de uma condição "Ok" entre com o código para criar o xml. Considero mais simples...

 

Agora se realmente precisa dessa "ponte" entre as páginas, pode enviar as informações através de Query ou Session.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa fazer este caminho se for possivel juntar o criarxml.asp com o upload.asp mas eu tentei juntar os dois e deu erro sera

que se eu colcoar os codigos aqui você concegue junta-los sem dar conflito ?

avisando que sou meio ruim de asp comecei a pouco tempo >.<'

mas em fim estou passando ambos os codigos se você conceguir fazer isso para min ficarei muito grato xD

 

segue os codigos:

 

CRIAXML.ASP

 

<%
 Set objDom = server.CreateObject("Microsoft.XMLDOM")
 objDom.preserveWhiteSpace = True


 blnFileExists = objDom.Load(server.MapPath("Trickers.xml"))

If blnFileExists = True Then
  Set objRoot = objDom.documentElement
Else
  Set objRoot = objDom.createElement("Trickers") 
  objDom.appendChild objRoot
End If


  Set objTricker = objDom.createElement("Tricker")
   
  
	Set objtitulo = objDom.createElement("titulo")
   objtitulo.Text = Request.Form("titulo")
   objtricker.appendchild objTitulo

   Set objtema = objDom.createElement("tema")
   objtema.Text = Request.Form("tema")
   objTricker.appendchild objtema
   
   Set objdesc = objDom.createElement("desc")
   objdesc.Text = Request.Form("desc")
   objTricker.appendchild objdesc
   
   Set objup = objDom.createElement("up")
   objup.Text = Request.Form("up")
   objTricker.appendchild objup
   
   
objroot.appendchild objTricker



 If blnFileExists = False then

  Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")

  objDom.insertBefore objPI, objDom.childNodes(0)
 End If


 objDom.save(server.MapPath("Trickers.xml"))
 


%>

 

 

 

UPLOAD.ASP

 

 

 

<%@ Language=VBScript %>
<%

Dim Contador, Tamanho
Dim ConteudoBinario, ConteudoTexto
Dim Delimitador, Posicao1, Posicao2
Dim ArquivoNome, ArquivoConteudo, PastaDestino
Dim objFSO, objArquivo

PastaDestino = Server.MapPath("/brocolis")

'Determina o tamanho do conteúdo
Tamanho = Request.TotalBytes

'Obtém o conteúdo no formato binário
ConteudoBinario = Request.BinaryRead(Tamanho)

'Transforma o conteúdo binário em string
For Contador = 1 To Tamanho
  ConteudoTexto = ConteudoTexto & Chr(AscB(MidB(ConteudoBinario, Contador, 1)))
Next 

'Determina o delimitador de campos
Delimitador = Left(ConteudoTexto, InStr(ConteudoTexto, vbCrLf) - 1)

'Percorre a String procurando os campos
'identifica os arquivo e grava no disco
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

Posicao1 = InStr(ConteudoTexto, Delimitador) + Len(Delimitar)

do while True
  ArquivoNome = ""
  Posicao1 = InStr(Posicao1, ConteudoTexto, "filename=")
  if Posicao1 = 0 then
	exit do
  else
   'Determina o nome do arquivo
   Posicao1 = Posicao1 + 10
   Posicao2 = InStr(Posicao1, ConteudoTexto, """")
   For contador = (Posicao2 - 1) to Posicao1 step -1
	if Mid(ConteudoTexto, Contador, 1) <> "\" then '"
	  ArquivoNome = Mid(ConteudoTexto, Contador, 1) & ArquivoNome
	else
	  exit for
	end if
   next
	
   'Determina o conteúdo do arquivo
   Posicao1 = InStr(Posicao1, ConteudoTexto, vbCrLf & vbCrLf) + 4
   Posicao2 = InStr(Posicao1, ConteudoTexto, Delimitador) - 2
   ArquivoConteudo = Mid(ConteudoTexto, Posicao1, (Posicao2 - Posicao1 + 1))
		
   'Grava o arquivo
   if ArquivoNome <> "" then
	 Set objArquivo = objFSO.CreateTextFile(PastaDestino & "\" & ArquivoNome, true)
	 objArquivo.WriteLine ArquivoConteudo
	 objArquivo.Close
			
	 Response.write "" & PastaDestino & "\" & _
	 ArquivoNome & " gravado com sucesso!<br>"
	 Set objArquivo = nothing
   end if
end if
Loop
Set objFSO = nothing



 
%>

 

 

 

 

 

 

valeu mano xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

As páginas em separado funcionam certo?

Então na página "upload.asp" coloque o código da página "criarxml.asp" no trecho conforme abaixo:

...
   'Grava o arquivo
   if ArquivoNome <> "" then
	 Set objArquivo = objFSO.CreateTextFile(PastaDestino & "\" & ArquivoNome, true)
	 objArquivo.WriteLine ArquivoConteudo
	 objArquivo.Close

'//INSIRA AQUI O CÓD DA PÁG. CRIARXML.ASP ou PODE FAZER O INCLUDE CONFORME SUGESTÃO DO HINOM
			
	 Response.write "" & PastaDestino & "\" & _
	 ArquivoNome & " gravado com sucesso!<br>"
	 Set objArquivo = nothing
   end if
...

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu dei uma estudada nos codigos concegui juntar tudo e fazer as duas funções graças a vocês

o xml foi criado junto com o upload mas na hora de criar tal xml o asp não enxerga as variaveis do form e cria as tags mas elas ficam vazias e descobri que é por causa da tag (enctype="multipart/form-data") que é usada no form quando eu retiro essa tag o upload não funciona mas o xml é criado corretamente... :unsure:

 

e pelo jeito não tem como fazer upload sem usar esta tag correto ?

 

Valeu mesmo galera :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já que está fazendo upload sem uso de componente, sugiro esse script que está no laboratório:

http://forum.imasters.com.br/index.php?showtopic=280973

 

Nesse script, além do arquivo (upload) tambem é possível recuperar valores de campos input, que é o seu caso...

Dá para juntar tudo em uma página só. Altere no exemplo a parte que grava no banco de dados pelo seu script para geração do XML.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara desculpa estar sendo chato mas so confere se eu que estou fasendo besteira

pois pra criar o xml precisa do "request.form" mas por causa dele da este erro:

 

Request object error 'ASP 0207 : 80004005'

 

Cannot use Request.Form

 

/upload_form2.asp, line 62

 

Cannot use Request.Form collection after calling BinaryRead.

 

tem alguma forma que eu possa passar por cima disso ou algum outro tipo de request que eu possa usar no lugar do form ?

 

Lembrando que eu usei o seu exemplo a cima alterei os campos tudo e adicionei o codigo pra cria o xml mas este codigo usa o request.form pra pega as variaveis

 

creio que se o criaxml.asp puchasse essas variaveis do upload_form2.asp daria certo mas tem alguma forma das variaveis fazer este caminho?

 

form ----- > upload_form2.asp -----> Criaxml.asp ?

 

valeu xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

de onde esta vindo este valor? um upload?

 

Conteudo binario ano se recupera assim com request normal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explicando da minha forma de entender rsrs

 

eu uso o form e as variaveis vão para o upload_Form2.asp e ali e feito o upload

mas se eu adiciono o codigo de criar o xml junto com o do upload a função request.form da conflito

entao creio eu que o criaxl.asp deveria puxar estas variaveis do upload_Form2.asp simplificando como ali em cima as variaveis deveriam fazer este caminho

 

do form pro upload.asp e o upload.asp repassa-se as variaveis pro criaxml.asp

 

mas nao sei se é possivel fazer isto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo em uma página só... Testa aí...

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>
<head>
<title>Upload+XML</title>
</head>
<body>
<% If request.servervariables("REQUEST_METHOD") = "GET" Then %>
<form action="<% =Request.ServerVariables("SCRIPT_NAME") %>" enctype="multipart/form-data" method="post">
  <fieldset>
  <legend>Exemplo para upload de arquivo e geração de XML</legend>
  <label for="arquivo">Anexar arquivo:</label><br>
  <input type="file" id="arquivo" name="arquivo" size="45"><br>
  <label for="titulo">Titulo:</label><br>
  <input type="text" id="titulo" name="titulo" size="45"><br>
  <label for="tema">Tema:</label><br>
  <input type="text" id="tema" name="tema" size="45"><br>
  <label for="desc">Desc:</label><br>
  <input type="text" id="desc" name="desc" size="45"><br>
  <label for="up">Up:</label><br>
  <input type="text" id="up" name="up" size="45"><br>
  <input type="submit" name="submit" value="Enviar">
  </fieldset>
</FORM>
<%
Else

' Upload Sem componentes ---------------------------------------
Sub BuildUploadRequest(RequestBin)
on error resume next

PosBeg = 1
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))
boundary = MidB(RequestBin, PosBeg, PosEnd - PosBeg)
BoundaryPos = InStrB(1, RequestBin, boundary)

Do Until (BoundaryPos = InStrB(RequestBin, boundary & getByteString("--")))

Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")

Pos = InStrB(BoundaryPos, RequestBin, getByteString("Content-Disposition"))
Pos = InStrB(Pos, RequestBin, getByteString("name="))
PosBeg = Pos + 6
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(34)))
Name = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
PosFile = InStrB(BoundaryPos, RequestBin, getByteString("filename="))
PosBound = InStrB(PosEnd, RequestBin, boundary)

If PosFile <> 0 And (PosFile < PosBound) Then
  PosBeg = PosFile + 10
  PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(34)))
  FileName = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
  UploadControl.Add "FileName", FileName
  Pos = InStrB(PosEnd, RequestBin, getByteString("Content-Type:"))
  PosBeg = Pos + 14
  PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))
  ContentType = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
  UploadControl.Add "ContentType", ContentType
  PosBeg = PosEnd + 4
  PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2
  Value = MidB(RequestBin, PosBeg, PosEnd - PosBeg)
Else
  Pos = InStrB(Pos, RequestBin, getByteString(Chr(13)))
  PosBeg = Pos + 4
  PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2
  Value = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
End If

UploadControl.Add "Value", Value
UploadRequest.Add Name, UploadControl
BoundaryPos = InStrB(BoundaryPos + LenB(boundary), RequestBin, boundary)
Loop
End Sub

Function getByteString(StringStr)
	For i = 1 To Len(StringStr)
		Char = Mid(StringStr, i, 1)
		getByteString = getByteString & ChrB(AscB(Char))
	Next
End Function

Function getString(StringBin)
getString = ""
	For intCount = 1 To LenB(StringBin)
		getString = getString & Chr(AscB(MidB(StringBin, intCount, 1)))
	Next
End Function
' Fim upload sem Componentes -----------------------------------------

' Chamando Funções, que fazem o Upload funcionar
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin

' Recuperando os Dados do FORM ----------------------
titulo = UploadRequest.Item("titulo").Item("Value")
tema = UploadRequest.Item("tema").Item("Value")
desc = UploadRequest.Item("desc").Item("Value")
up = UploadRequest.Item("up").Item("Value")

' Tipo de arquivo que esta sendo enviado
tipo_foto = UploadRequest.Item("arquivo").Item("ContentType")

' Caminho completo dos arquivos enviados
caminho_foto = UploadRequest.Item("arquivo").Item("FileName")

' Nome dos arquivos enviados
nome_foto = Right(caminho_foto,Len(caminho_foto)-InstrRev(caminho_foto,"\"))

' Conteudo binario dos arquivos enviados
foto = UploadRequest.Item("arquivo").Item("Value")

' pasta onde as imagens serao guardadas
pasta = Server.MapPath("/brocolis")
nome_foto = "/"&nome_foto

' Fazendo o Upload do arquivo selecionado
If foto <> "" then
	Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
	Set MyFile = ScriptObject.CreateTextFile(pasta & nome_foto)
		For i = 1 to LenB(foto)
			MyFile.Write chr(AscB(MidB(foto,i,1)))
		Next
MyFile.Close
End if

'===================COD XML
Set objDom = server.CreateObject("Microsoft.XMLDOM")
objDom.preserveWhiteSpace = True

blnFileExists = objDom.Load(server.MapPath("Trickers.xml"))

If blnFileExists = True Then
  Set objRoot = objDom.documentElement
Else
  Set objRoot = objDom.createElement("Trickers")
  objDom.appendChild objRoot
End If

  Set objTricker = objDom.createElement("Tricker")
  
   Set objtitulo = objDom.createElement("titulo")
   objtitulo.Text = titulo
   objtricker.appendchild objTitulo

   Set objtema = objDom.createElement("tema")
   objtema.Text = tema
   objTricker.appendchild objtema
  
   Set objdesc = objDom.createElement("desc")
   objdesc.Text = desc
   objTricker.appendchild objdesc
  
   Set objup = objDom.createElement("up")
   objup.Text = up
   objTricker.appendchild objup
  
objroot.appendchild objTricker

If blnFileExists = False then
  Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")
  objDom.insertBefore objPI, objDom.childNodes(0)
End If

objDom.save(server.MapPath("Trickers.xml"))
'===================COD XML

' Mostra Mensagem de Confirmação na Tela
Response.write "Upload + XML gerado com Sucesso!"

End If
%>
</body>
</html>

Abs.

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.