Ir para conteúdo

POWERED BY:

Arquivado

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

Didiron

[Resolvido] Enviar outros campos junto com o Upload

Recommended Posts

Olá pessoal, eu tenho um sistema de Upload funcionando sem componentes, ele pega a foto envia para uma pasta chamada "Imagens" e ainda insere o endereço dela no banco de dados, isso está funcionando perfeitamente, o problema, é que agora no meu form, eu tive que colocar mais dois campos Input, um de "Descrição" e outro de "Título", e ai que veio o problema, pois quando eu coloco esses dois campos mais para inserir ele me da Erro no Insert.

Vou postr o código das minhas páginas:

 

Form.asp

<table cellpadding="0" cellspacing="0">
  <form action="upload_form2.asp" method="post" enctype="multipart/form-data" name="form1" id="form1">
    <tr>
      <td><h5>Adicionar foto:</h5></td>
      <td><input type="file" name="foto" size="30" /></td>
    </tr>
    <tr>
      <td colspan="2">Descrição: 
        <label>
        <input type="text" name="desc" id="desc" />
      </label></td>
    </tr>
    <tr>
      <td colspan="2"><div align="left">Título: 
        <label>
        <input type="text" name="titulo" id="titulo" />
        </label>
      </div></td>
    </tr>
    <tr>
      <td colspan="2"><div align="center">
        <input type="submit" name="submit" value="Enviar" />
      </div></td>
    </tr>
  </form>
</table>

 

Upload_funcoes.asp , mas acho que aqui não possui erro nenhum

 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% ' 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 -----------------------------------------
 %>

E por fim a página, que está me dando o problema.

 

Upload_form2.asp

 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!-- #include file = "upload_funcoes.asp" -->
<%
' Chamando Funções, que fazem o Upload funcionar
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin


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

' Caminho completo dos arquivos enviados
caminho_foto = UploadRequest.Item("foto").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("foto").Item("Value")

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

' pasta + nome dos arquivos
cfoto = "imagens" + 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

' Conecta-se ao Banco de Dados
set conexao = server.CreateObject("adodb.connection")
conexao.open "driver={microsoft access driver (*.mdb)}; dbq="& server.MapPath("fotos.mdb")

desc = UploadRequest.Item("desc").Item("TextField")
titulo = UploadRequest.Item("titulo").Item("TextField")


' cadastra os dados no banco de dados
set inserir = Server.CreateObject("ADODB.recordset")
inserir.open "Insert into Fotos (foto,desc,titulo) values ( '"& cfoto &"','"& desc &"','"& titulo &"')",conexao


' Mostra Mensagem de Confirmação na Tela
response.write("Foto Cadastrada")


%>

Voce podem ver que eu estou usando o Request, dessa forma:

titulo = UploadRequest.Item("titulo").Item("TextField")
Mas eu já tentei da forma normal e também não funcionou, os nomes dos campos estão tudo certo.

 

O erro que está dando:

 

Script error detected at line 115.

Source line: inserir.open "Insert into Fotos (foto,desc,titulo) values ( '"& cfoto &"','"& desc &"','"& titulo &"')",conexao

Description: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na instrução INSERT INTO.

 

 

Alguém poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe uma função no lab. de scritp para pegar o nome do arquivo, inclusive um upload com essa função, pode te ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

xanburzum, eu dei uma procurada no Lab. de Script, e não consegui achar nada a respeito, esse script que voce falou ele pega os nomes dos dados de qual forma? POis o meu problema eu se que está no meu Request.

Abraços.

 

xanburzum, obrigado pela ajuda, mas eu já consegui resolver, u usei o Request da seguinte forma:

 

titulo = UploadRequest.Item("titulo").Item("Value")

Obrigdo e abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, parabéns

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.