Ir para conteúdo
Fórum Script Brasil
  • 0

Upload de imagem criando pasta com o id do usuario


erickmm

Pergunta

Boas,

Estou montando um sistema de cadastro de usuario com foto,

o usuario preenche o formulario escolhe a imagem e envia

quando envia automaticamente a imagem sobe para o servidor e grava o endereço da imagem enviada no banco de dados

ate ae esta tudo ok, o sistema esta funcionando

Mais agora quero fazer upload da imagem dentro da pasta com o nome do id do usuario

eu consegui jpa criar a pasta com um nome padrão, gostaria de agora criar a pasta com o id do usuario e salvar a imagem lá dentro, tem como?

vou postar aqui a pagina que criei, se alguém puder me ajudar

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

' Recuperando os Dados Digitados ----------------------
nome = UploadRequest.Item("nome").Item("Value")
email = UploadRequest.Item("email").Item("Value")

' 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&""&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

Set pasta = Server.CreateObject("Scripting.FileSystemObject")

If Not pasta.FolderExists("e:\home\baixadasexy\web\upload\imagens\Teste") Then
pasta.CreateFolder("e:\home\baixadasexy\web\upload\imagens\Teste")
Response.Write "Pasta criada com sucesso!"
Else
Response.Write "Esta pasta já existe!"
End if

Set pasta = nothing


' Conecta-se ao Banco de Dados
url_conexao = Server.MapPath("..\..\..\baixadasexy\dados\banco.mdb")
set conexao = Server.CreateObject("ADODB.Connection")
conexao.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&url_conexao

' cadastra os dados no banco de dados
sql = "Insert into lojas (nome,email,foto) values ('"& nome &"', '"& email &"', '"& cfoto &"')"
Conexao.Execute(sql)

' Mostra Mensagem de Confirmação na Tela
Response.write "Dados Cadastrados com Sucesso!"

' Redireciona após 5 segundos
response.write "<br><br>você será redirecionado em 5 segundos..<br>"
response.write "<meta http-equiv='refresh' content='5; url=index.asp'/>"
%>[/codebox]

fico no aguardo

ate +

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Sim erickmm... beleza! a ideia então é a seguinte:

A lógica é a seguinte:

1) o user preenche o form;

2)nessa pagina do form você faz uma consulta ao bd onde o user será cadastrado, colocando num input hidden o último id+1, pois será o id que o novo user terá!

3) no insert into, ou seja, na pagina seguinte ao form quando o user se cadastrar você abre a pasta automaticamente por fso! isso não é complicado... é mais ou menos como está abaixo.

<%

'resgatar valores do campo hidden que terá o valor da proxima id:
DirName = request.form ("nome_input_hidden_id")
'Cria uma pasta.
'O DirName pode ser um caminho absoluto ou relativo.
Public Function CreateFolder(ByVal DirName)
    
    On Error Resume Next
  If Mid(DirName, 2, 1) <> ":" Then
    DirName = Server.MapPath(DirName)
  End If
  If Err Then Err.Clear
  On Error GoTo 0
    
    Dim FSO
    Set FSO = Server.CreateObject("Scripting.FileSystemObject")
    
    On Error Resume Next
    If FSO.FolderExists(DirName) Then
        FSO.DeleteFolder DirName
    End If
    
    If Err Then
        On Error GoTo 0
        CreateFolder = False
        Set FSO = Nothing
        Exit Function
    End If
    
    FSO.CreateFolder DirName
    If Err Then
        On Error GoTo 0
        CreateFolder = False
        Set FSO = Nothing
        Exit Function
    End If
    
    On Error GoTo 0
    Set FSO = Nothing
    CreateFolder = True
    
End Function
%>
4) daí sua pasta já está criada e seu user já está cadastrado, muito bem, na hora de o user upar arquivos você terá que fazer uma nova query buscando do bd o id do user (aqui terá que ter algum valor pra comparar como o login por exemplo, e para isso sugiro session);
<!-- #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

' Recuperando os Dados Digitados ----------------------
nome = UploadRequest.Item("nome").Item("Value")
email = UploadRequest.Item("email").Item("Value")

' 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&""&nome_foto

' pasta + nome dos arquivos
' inicio query
username = Lcase(Trim(Session("login")))
Set objConn =  Server.CreateObject("ADODB.Connection")
objConn.Open "DBQ=" & Server.MapPath("bd.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}","username","password"
SQL = "select campoid from suatabela WHERE "&username&""
Set ObjRs = objConn.Execute(SQL)


cfoto = "ObjRs("id")" + 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

Set pasta = Server.CreateObject("Scripting.FileSystemObject")

If Not pasta.FolderExists("e:\home\baixadasexy\web\upload\imagens\Teste") Then
pasta.CreateFolder("e:\home\baixadasexy\web\upload\imagens\Teste")
Response.Write "Pasta criada com sucesso!"
Else
Response.Write "Esta pasta já existe!"
End if

Set pasta = nothing


' Conecta-se ao Banco de Dados
url_conexao = Server.MapPath("..\..\..\baixadasexy\dados\banco.mdb")
set conexao = Server.CreateObject("ADODB.Connection")
conexao.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&url_conexao

' cadastra os dados no banco de dados
sql = "Insert into lojas (nome,email,foto) values ('"& nome &"', '"& email &"', '"& cfoto &"')"
Conexao.Execute(sql)

' Mostra Mensagem de Confirmação na Tela
Response.write "Dados Cadastrados com Sucesso!"

' Redireciona após 5 segundos
response.write "<br><br>você será redirecionado em 5 segundos..<br>"
response.write "<meta http-equiv='refresh' content='5; url=index.asp'/>"
%>

Bom, enfim, são apenas sugestões... dividi por pontos, então caso exista alguma dúvida com relação a algum ponto específico, ou tipo, qualquer duvida mesmo, poste aí que damos um jeito!

EDITANDO: AHHH, SÓ LEMBRANDO... ISSO É SÓ UMA IDEIA... FIZ NA CORRERIA... NÃO TESTEI... MAS ACHO QUE QUE DA PRA APROVEITAR ALGUMA COISA... SE NÃO DER SEGUIMOS ATÉ ACERTER!

[]'s Rafael Spilki

Editado por Rafael Spilki
Link para o comentário
Compartilhar em outros sites

  • 0

Amigo Rafael

Fiz uns testes aqui e nada de funcionar

mais se você precerber o codigo que postei ae em cima ele cria uma pasta padrão chamada teste dentro da pasta imagens mais a imagem fica fora dessa pasta, eu queria em vez de criar essa pasta padrão teste eu queria criar a pasta com o numero do id do usuario que esta sendo cadastrado e salvar a imagem dentro dessa pasta

dá uma olhada nessa parte vou postar denovo só ela

<% 

' pasta onde as imagens serao guardadas
pasta = Server.MapPath("imagens/")
nome_foto = "/"&nome&""&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

Set pasta = Server.CreateObject("Scripting.FileSystemObject")

If Not pasta.FolderExists("e:\home\baixadasexy\web\upload\imagens\Teste") Then
  pasta.CreateFolder("e:\home\baixadasexy\web\upload\imagens\Teste")
  Response.Write "Pasta criada com sucesso!"
  Else
  Response.Write "Esta pasta já existe!"
End if

Set pasta = nothing

%>>

ve se agora deu pra entender

gostaria de em vez de criar essa pasta Teste

que criasse a pasta com o numero do id do usuario que esta sendo cadastrado

aguardo amigo

ate +

Erick

Editado por erickmm
Link para o comentário
Compartilhar em outros sites

  • 0

Uhm, ok!

Me confirma por gentileza: suas imagens estão sendo salvas na pasta "imagens", correto? e não na teste? é isso?

Bom se for, isso está acontecendo exatamente por causa desse trecho do codigo:

pasta = Server.MapPath("imagens/")
nome_foto = "/"&nome&""&nome_foto

' pasta + nome dos arquivos
cfoto = "imagens" + nome_foto
o que acontece é que se você quiser fazer desta forma basta você criar uma query que consulta o bd para descobrir o id do usuário... mas pra achar o id correto será necessário um indice tipo login por session, sacou? fiz aqui umas alteraçõezinha na correria, não testei, mas acho que é bem por aí... da uma olhadinha...
<%
'achando o id atraves de session, confirmar aqui as variaveis da session ou alterar conforme o caso
username = Lcase(Trim(Session("login")))
Set objConn =  Server.CreateObject("ADODB.Connection")
objConn.Open "DBQ=" & Server.MapPath("bd.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}","username","password"
SQL = "select campoid from suatabela WHERE "&username&""
Set ObjRs = objConn.Execute(SQL)
id = ObjRs("id")
%>


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

' Recuperando os Dados Digitados ----------------------
nome = UploadRequest.Item("nome").Item("Value")
email = UploadRequest.Item("email").Item("Value")

' 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/"&id&"/")
nome_foto = "/"&nome&""&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

Set pasta = Server.CreateObject("Scripting.FileSystemObject")

If Not pasta.FolderExists("e:\home\baixadasexy\web\upload\imagens\"&id&"\") Then
pasta.CreateFolder("e:\home\baixadasexy\web\upload\imagens\"&id&"\")
Response.Write "Pasta criada com sucesso!"
Else
Response.Write "Esta pasta já existe!"
End if

Set pasta = nothing


' Conecta-se ao Banco de Dados
url_conexao = Server.MapPath("..\..\..\baixadasexy\dados\banco.mdb")
set conexao = Server.CreateObject("ADODB.Connection")
conexao.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&url_conexao

' cadastra os dados no banco de dados
sql = "Insert into lojas (nome,email,foto) values ('"& nome &"', '"& email &"', '"& cfoto &"')"
Conexao.Execute(sql)

' Mostra Mensagem de Confirmação na Tela
Response.write "Dados Cadastrados com Sucesso!"

' Redireciona após 5 segundos
response.write "<br><br>você será redirecionado em 5 segundos..<br>"
response.write "<meta http-equiv='refresh' content='5; url=index.asp'/>"
%>

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

você precisa ter alguma forma de comparar no banco... você precisa de um id... mas como vamos saber no banco qual o id correto? não serão varios ids? pois então pra pegarmos o id correto precisamos ter algo para comparar... imagina a seguinte estrutura de tabela do bd:

ID | NOMECLIENTE | LOGIN | SENHA

ou seja, sabendo nomecliente, login ou senha sabemos tb o ID, sacou?

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que entendi

mais eu tenho q cadastrar o usuario e só depois posso add a foto?

para add a foto o usuario tem que fazer login?

ou posso fazer o cadastro em 2 partes, tipo assim:

o usuario se cadastra, nome e email, assim que apertar o botão cadastrar o formulario é cadastrado e vai para uma pagina, nessa pagina posso colocar o campo foto para add a foto? assim consigo achar o id e criar a pasta com o numero do id?

fico no aguardo

ate +

Editado por erickmm
Link para o comentário
Compartilhar em outros sites

  • 0

Então... isso aí vai depender muito da lógica do seu sistema...

Pode fazer das duas formas como você colocou acima...

Se o seu único interesse for cadastrar um usuário com foto você pode fazer mais simples ainda, coloca o campo id como autoincrement e pronto... nesse caso nem cadastra o id... o bd colocará um numero automaticamente... se não for o caso pode fazer das duas formas como sugeriu acima. O importante é que você consiga sempre passar a variavel id ou outra variavel de alguma forma... nos dois casos acima você precisará usar session entende? no fundo dará no mesmo!

Se o usuario estiver logado, salve o id dele em session, se não estiver logado você terá de dar um jeito de selecionar a id especifica de uma consulta, passando o dado como se fosse um form...

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...