Ir para conteúdo

POWERED BY:

Arquivado

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

Scaico

[Resolvido] Form com envio de anexo

Recommended Posts

Oi pessoal, beleza?

 

Como não entendo praticamente nada de ASP, vou precisar da ajuda de vocês.

Eu peguei esse código pronto da Locaweb, fiz as alterações que precisava fazer, as gambiarras necessárias para suprimir minha falta de conhecimento e consegui basicamente tudo o que eu precisava, com uma excessão.

 

O exemplo online está aqui:

http://www.padovaniprado.com.br/ppcm/exemplo.asp

 

O formulário criado dá a opção de anexar um arquivo e isso está funcionando perfeitamente bem. Só que eu estou achando o sistema meio "burro".

Atualmente, eu preciso PRIMEIRO dar upload no arquivo e depois digitar meus dados e mensagem. Se eu digitar tudo primeiro e der upload depois, ele deleta todos os campos e eu preciso redigitar tudo.

 

O que eu queria, basicamente, era simplificar eliminando o botão UPLOAD e deixar no botão ENVIAR as duas funções:

1 - Subir o arquivo, caso exista um

2 - Enviar o email.

 

Tentei algumas gambiarras mas não consegui resolver. Se alguem puder me dar uma luz, serei eternamente grato!

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou usando o CDOSYS.

 

PS: agora que me toquei que não dá pra ver o código pelo site.

Aqui vai o código:

 

<%
Select Case Request.QueryString("acao") 'Verifica parametro acao para executar determinado script
	Case "upload" 'caso a acao seja upload, executa script do SaFileUp
		Set obj_Upload = Server.CreateObject("SoftArtisans.FileUp")
		obj_Upload.Path = Server.MapPath("./upload") 'local onde será gravado o arquivo
		obj_Upload.Form("File").Save
		Session("arquivo") = obj_Upload.Form("File").ServerName 'recupera o nome do arquivo no servidor
		Set obj_Upload = Nothing
		v_foco = " onLoad=""document.frm_email.txt_nome_rem.focus();""" 'coloca o cursor no campo do form de e-mail
	Case "email" 'caso a acao seja email, executa script do CDOSYS
		Set objCDOSYSMail = Server.CreateObject("CDO.Message")
		Set objCDOSYSCon = Server.CreateObject ("CDO.Configuration") 'objeto de configuração do CDO
		objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost"
		objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
		objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
		objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
		objCDOSYSCon.Fields.update
		Set objCDOSYSMail.Configuration = objCDOSYSCon
		objCDOSYSMail.From = Trim(Request.Form("txt_nome_rem")) & "<" & Trim(Request.Form("txt_email_rem")) & ">"
		objCDOSYSMail.To = Trim(Request.Form("txt_nome_para")) & "<" & Trim(Request.Form("txt_email_para")) & ">"
		objCDOSYSMail.AddAttachment(Session("Arquivo")) 'anexa o arquivo
		objCDOSYSMail.Subject = Request.Form("txt_assunto")
		objCDOSYSMail.TextBody = Request.Form("txt_corpo")
		objCDOSYSMail.Send 'envia o e-mail com o anexo
		Set objCDOSYSMail = Nothing
		Set objCDOSYSCon = Nothing
		Response.Write "<script>alert('E-mail enviado com Sucesso!')</script>"
		Session("Arquivo") = ""
End Select
%>

e os FORMS:

<form action="?acao=email" method="post" name="frm_email" id="frm_email">
Para:
<select name="txt_nome_para" id="txt_nome_para" onChange="MM_jumpMenu('parent',this,0)">
  <option>Recursos Humanos</option>
  <option>Administrativo</option>
  <option>Financeiro</option>
</select>
<br />
Nome:<input name="txt_nome_rem" type="text" id="txt_nome_rem" size="30">
<br />
Email:<input name="txt_email_rem" type="text" id="txt_email_rem" size="30">
<br />
Mensagem: <textarea name="txt_corpo" cols="75" rows="5" id="txt_corpo"></textarea>
<br /><br />
<input name="Enviar" type="submit" id="Enviar" value="Enviar">

<input name="txt_email_para" type="hidden" id="txt_email_para" value="web@padovaniprado.com.br">
<input name="txt_assunto" type="hidden" id="txt_assunto" value="Contato via Site">
<input name="txt_arquivo" type="hidden" disabled id="txt_arquivo" value="<%=Session("arquivo")%>">
</form>

<form action="?acao=upload" method="post" enctype="multipart/form-data" name="frm_upload" id="frm_upload">

<input name="file" type="file" size="40" value="<%=Session("arquivo")%>">
<input name="Upload" type="submit" id="Upload" value="Upload">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

PS: Seja lá quem for que me enviou as Ninféias, quero que saiba que recebi.

Hahahaha

 

São bem bonitas, por sinal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tentou colocar o botao como imagefield, você tb pode após fazer o upload setar apenas o caminho

do anexo na propriedade AddAttachment do envio de email.

'objCDOSYSMail.AddAttachment("e:\home\pagina\web\teste\anexo.jpg")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xandburzum, acho que entendi mais ou menos o que você quis dizer...

Vale lembrar que eu não entendo nada de ASP. Peguei o codigo pronto do tutorial da Locaweb e fiz algumas alterações só.

 

O que eu realmente queria era ELIMINAR o botão UPLOAD e deixar somente o botão ENVIAR.

O botão ENVIAR, por sua vez, serviria para dar upload no arquivo, anexar e enviar. Tudo de uma vez só.

 

Sei que tem como, pois já vi isso antes.

Só não sei fazer. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que você pode fazer é ao fazer UPLOAD, colocar um evento onclik no botao de upload e atraves dele jah setar o caminho do arquivo que fez upload e atribuir o anexo na propriedade AddAttachment do envio de email.como mencionei acima.

'objCDOSYSMail.AddAttachment("e:\home\pagina\web\teste\anexo.jpg",

você pode criar uma variavel, onde atribuira o path do upload + i nome do arquivo.

vararquivo= obj_Upload.Path & Session("arquivo")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Novamente, eu entendi a lógica mas não sei fazer isso na prática.

Vou fazer uns testes pra ver se consigo me virar.

 

Valeu pelas dicas. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode colocar seu form assim:

 

<html><body>
<form action="upload2.asp" enctype="multipart/form-data" method="post">
Arquivo:
<input type="file" name="test">
<br>
<input type="radio" name="filename" value="original" checked> Usar o nome original
<br>
<input type="radio" name="filename" value="userSpecified"> Usar o nome:
<input type="text" name="userSpecifiedName" value="">
<br>
Nome:<input name="nome" type="text" size="30">
<br />
Email:<input name="destinatario" type="text"  size="30">
Mensagem: <textarea name="assunto" cols="75" rows="5" id="txt_corpo"></textarea>
<br /><br />
<input type="submit" value="Enviar">
</form>
</body>
</html>

lembrando que este é um exemplo que fiz omo teste , onde ele fara o upload e ja envia a mensagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao entendi, Xanburzum...

 

Esse formulário tem como action o upload2.asp... mas que arquivo é esse?

 

A minha dúvida é essa:

 

Eu tenho o código

<%
Select Case Request.QueryString("acao") 'Verifica parametro acao para executar determinado script
	Case "upload" 'caso a acao seja upload, executa script do SaFileUp
		Set obj_Upload = Server.CreateObject("SoftArtisans.FileUp")
		obj_Upload.Path = Server.MapPath("./upload") 'local onde será gravado o arquivo
		obj_Upload.Form("File").Save
		Session("arquivo") = obj_Upload.Form("File").ServerName 'recupera o nome do arquivo no servidor
		Set obj_Upload = Nothing
		v_foco = " onLoad=""document.frm_email.txt_nome_rem.focus();""" 'coloca o cursor no campo do form de e-mail
	Case "email" 'caso a acao seja email, executa script do CDOSYS
		Set objCDOSYSMail = Server.CreateObject("CDO.Message")
		Set objCDOSYSCon = Server.CreateObject ("CDO.Configuration") 'objeto de configuração do CDO
		objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost"
		objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
		objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
		objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
		objCDOSYSCon.Fields.update
		Set objCDOSYSMail.Configuration = objCDOSYSCon
		objCDOSYSMail.From = Trim(Request.Form("txt_nome_rem")) & "<" & Trim(Request.Form("txt_email_rem")) & ">"
		objCDOSYSMail.To = "web@padovaniprado.com.br"
		objCDOSYSMail.AddAttachment(Session("Arquivo")) 'anexa o arquivo
		objCDOSYSMail.Subject = "Contato via site"
		objCDOSYSMail.TextBody = Request.Form("txt_corpo")
		objCDOSYSMail.Send 'envia o e-mail com o anexo
		Set objCDOSYSMail = Nothing
		Set objCDOSYSCon = Nothing
		Response.Write "<script>alert('E-mail enviado com Sucesso!')</script>"
		Session("Arquivo") = ""
End Select
%>

Não tem como ao inves de ser um "Select Case" para os dois botoes, esse código se tornar um só, baseado em uma só action?

 

Eu fiz uns testes e consegui uma gambiarra, usando Javascript, mas não funciona no internet explorer.

Porque? Não sei.

 

O que eu fiz foi o seguinte:

<script language="javascript" type="text/javascript">
function actionDois(){
document.frm_email.action = "?acao=email";
document.frm_email.submit();
}
function actionUm(){
document.frm_upload.action = "?acao=upload";
document.frm_email.target = "iframe";
document.frm_upload.submit();
actionDois();
}

dai eu adicionei um iFrame de 0x0 pra rodar o upload lá.

e coloquei no botão enviar o parametro onClick="this.frm_email.onsubmit = actionUm();"

 

Funciona belezinha no Firefox. Mas no Internet explorer não. Eu tou achando que ele não reconhece o comando document.frm_email.target = "iframe";. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para avisar que o problema foi resolvido usando um outro script, em PHP.

 

Grato pela atenção, pessoal. :D

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.