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

Alteração de imagem


+.jr_Designer.+

Pergunta

Bom dia!

Pessoal como eu posso fazer pra alterar uma foto cadastrada no banco de dados?

Ex: você faz um cadastro com as informações básicas e com a sua foto. Ai depois de um tempo você precisa alterar o cadastro e quer também trocar sua foto.

Como posso fazer isso?

Se for procurando a imagem no diretório onde ela está armazenada com base no registro do DB e depois upar a nova, como se faz isso? E se não for como se faz isso?

Abraço e Feliz Natal

Link para o comentário
Compartilhar em outros sites

20 respostass a esta questão

Posts Recomendados

  • 0

Pessoal como eu posso fazer pra alterar uma foto cadastrada no banco de dados?
Ex: você faz um cadastro com as informações básicas e com a sua foto. Ai depois de um tempo você precisa alterar o cadastro e quer também trocar sua foto.

Eu faço assim:

1) crio uma consulta para mostrar a fota a ser alterada´, ou seja, substituida... com o id dela em um hidden...

2) crio uma pagina chamada action.asp, nesta pagina executo primeiro um delete e depois upo a nova foto, mantendo o mesmo caminho no bd!

3) prontinho...

A lógica é essa... se você já conseguiu subir basta procurar aqui no forum como deletar por FSO, no link que o jow indicou tem um exemplo e upar a nova foto! Toca ferro...

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

E ai Rafael, beleza? (valeu pela ajuda ai cara)

Olha eu já tive essa idéia, mas ainda não consigo resolver o problema por completo, é uma série de problemas. Quando dou um jeito em um aparece outro! Tá louco! :angry:

Usei FSO pra deletar o arquivo e consegui. Porém não consigo fazer upload do arquivo que é PDF.

Ocorre que antes de upar o arquivo eu tenho que verificar se já existe um com o mesmo nome no diretório destino, e pra fazer isso, é necessário recuperar o nome do arquivo que será enviado, que no caso, este nome vem de um campo "file" do formulário.

Observe o script:

Set Upload = Server.CreateObject("Persits.Upload")

Upload.OverwriteFiles = False

On Error Resume Next

Upload.SetMaxSize 10088979 ' Limit files to 1MB'

pasta = Server.MapPath("leis/")

Count = Upload.Save(pasta)

O problema é que eu não consigo recuperar os dados do form antes da linha Count = Upload.Save(pasta). E se esta linha for interpretada ai minha lógica cai por terra, porque ai ele acapa upando o arquivo antes de ser verificado.

Será que tem jeito?

Vou até tomar um banho que minha cabeça tá doendo :wacko:

Link para o comentário
Compartilhar em outros sites

  • 0

Cara seguinte qd você grava uma foto você tem o caminho dela no banco de dados e a imagem em uma pasta certo ?

Então faça assim sempre q você fazer um novo upload você verifica no banco de dados se já existe um arquivo com o mesmo nome ...

if rs("campo") = request("CampoFile") then

response.write "Imagem já existe"

else

script de upload

end if

a idéia é essa, só lembrando que o valor do rs("campo") tem q ser o mesmo do CampoFile

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Jow!

Olha não consegui. O problema é o mesmo, eu não consigo recuperar os dados do form sem antes interpretar a linha Count = Upload.Save(pasta) e eu não posso deixar esta linha ser interpretada primeiro, porque se não ele vai upar o arquivo pdf antes de verificar se o mesmo já está cadastrada.

Vou mandar meus códigos:

form_altera_lei.asp

<html>
<head>
<title>Cadastro em ASP com foto</title>
<script language="javascript">
function valida_campo()
{
<!--
var nome = document.form.nome.value
if (nome==""){
    alert("Informe o seu nome!");
    document.form.nome.focus()
    return false
    }
var telefone = document.form.telefone.value
if (telefone==""){
    alert("Informe o seu telefone!");
    document.form.telefone.focus()
    return false
    }
var email=document.form.email.value;
if (email==""){
    alert("Informe o seu email!")
    document.form.email.focus()
return false
    }
}
function confere(){
if (document.form.email.value.indexOf('@', 0) == -1 || document.form.email.value.indexOf('.', 0) == -1){ alert("E-mail invalido!");
    document.form.email.focus()
    }
}
//-->
</script>
<% Response.CodePage = "1252" %>
<link href="../botao.css" rel="stylesheet" type="text/css">
<!--<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body,td,th {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    color: #212121;
}
body {
    margin-left: 0px;
    margin-top: 0px;
    margin-right: 0px;
    margin-bottom: 0px;
}
-->
</style>
<link href="../edit.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
a {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    color: #212121;
}
a:link {
    text-decoration: none;
}
a:visited {
    text-decoration: none;
    color: #212121;
}
a:hover {
    text-decoration: none;
    color: #006600;
}
a:active {
    text-decoration: none;
    color: #212121;
}
-->
</style>
<LINK REL=stylesheet HREF="../liks_etc.css" TYPE="text/css">
<style type="text/css">
<!--
.style3 {
    font-size: 14px;
    font-weight: bold;
}
-->
</style>
<head>
<!--#include file="../config.asp"-->
<%
id = Request.QueryString("id")
Response.Expires = 0

Set lei = Server.CreateObject("Adodb.Recordset")
lei.CursorLocation = 3
lei.CursorType = 2
lei.open "Select id,ano,num,descricao,lei from lei_norma where id =  '"&id&"' order by ano, num, descricao",conexao
%>

<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>
      <table width="100%" border="0" align="center" cellpadding="2" cellspacing="2">
        <tr align="center"> 
          <td width="19%" height="20" bgcolor="#f5f5f5"><a href="cad_lei.asp" target="main" class="menu">Cadastrar</a></td>
          <td bgcolor="#f5f5f5" width="29%"><a href="form_excluir_lei.asp" class="menu">Excluir</a></td>
          <td width="18%" bgcolor="#f5f5f5"><a href="procura_lei.asp" class="menu">Pesquisar</a></td>
          
        </tr>
      </table>
      <div align="center"></div>
      <form action="altera_lei.asp" method="post" enctype="multipart/form-data" name="form" target="main">
        <div align="center"> 
          <center>
            <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td></td>
              </tr>
            </table>
            <table>
            <tr>
                <td height="58" colspan="5" align="center"><span class="style3">Alterar lei</span></td>
              </tr>
              <tr>
                <td width="141" align="right">Ano:</td>
                <td width="83"><input name="ano" type="text" class="edit" id="ano" value="<%=lei("ano")%>" size="12" maxlength="10" /></td>
                <td width="83" align="right">N&uacute;mero:</td>
                <td width="127"><input name="numero" type="text" class="edit" id="numero" value="<%=lei("num")%>" size="12" maxlength="10" /></td>
                <td>&nbsp;</td>
              </tr>
              <tr>
                <td width="141" align="right">Descri&ccedil;&atilde;o:</td>
                <td colspan="4"><input name="descricao" type="text" class="edit" id="descricao" value="<%=lei("descricao")%>" size="51" /></td>
              </tr>
              <tr>
                <td width="141" align="right">Lei atual (arquivo .pdf):</td>
                <td colspan="4"><input name="atual" type="text" class="edit" id="atual" value="<%=lei("lei")%>" size="51" />
                <input name="id" type="hidden" id="id" value="<%=lei("id")%>">
                o que será substituido</td>
              </tr>
              <tr>
                <td align="right">Lei:</td>
                <td colspan="4"><input name="thefile" type="file" class="edit" id="thefile" size="55" /></td>
              </tr>
              <tr>
                <td height="53" align="right">&nbsp;</td>
                <td colspan="3" align="right" valign="bottom"><input name="submit" type="submit" class="botao" value="Enviar" /></td>
                <td width="127" align="right">&nbsp;</td>
              </tr>
              <tr>
                <td colspan="5">&nbsp;</td>
              </tr>
            </table>
          </center>
        </div>
      </form>
    </td>
  </tr>
</table>
</body>
</html>
altera_lei.asp
<!-- #include file = "../config.asp" -->
<%Response.CodePage = 1252%>
<HTML>
<head>
<style type="text/css">

body {
    font-family: Verdana, Arial, serif;
    font-size: 11px;
    background: white;
    padding: 0em;
    margin: 0;
    background-image: url();
    background-color: #FFFFFF;
}

a {
    text-decoration: none;
}

a:link {
    color: #333333;
    text-decoration: none;
}

a:visited {
    color: #333333;
    text-decoration: none;
}

a:active {
    color: #333333;
    text-decoration: none;
}

a:hover {
    text-decoration: none;
    color: #006666;
}
body,td,th {
    color: #323232;
}
.style1 {font-size: 10px}
.style3 {font-size: 10px; font-weight: bold; }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<BODY>
<%    
    Set FSO = Server.CreateObject("Scripting.FileSystemObject")
    Set Upload = Server.CreateObject("Persits.Upload")
    
    arquivo_novo = FileOriginalPath 
    ' Conecta-se ao Banco de Dados
    Set lei = Server.CreateObject("Adodb.Recordset")
    lei.CursorLocation = 3
    lei.CursorType = 2
    lei.open "SELECT id,lei FROM  lei_norma WHERE lei = '"&arquivo_novo&"'",conexao
    
        if lei("lei") = arquivo_novo Then 'verifica se já existe uma lei cadastrada com o mesmo nome do NOVO arquivo que será enviado
            Response.Write("Já existe um arquivo com este nome. Por favor renomeie o arquivo que deseja enviar!")
            Response.End()
            
        else        
            FSO.DeleteFile pasta&"/"&arquivo_atual 'Deleta o arquivo PDF que está na pasta leis que não será mais utilizado
            
            Upload.OverwriteFiles = False
            On Error Resume Next
        
            Upload.SetMaxSize 10088979
            pasta = Server.MapPath("leis/") 'Salva o novo arquivo pdf que será enviado
            Count = Upload.Save(pasta)
             
                If Count > 0 Then
                    Set File = Upload.Files(1)
                    
                    ' Conecta-se ao Banco de Dados'
                    Set Atualiza = Server.CreateObject("Adodb.Recordset")
                    Atualiza.CursorLocation = 3
                    Atualiza.CursorType = 2
                    
                    id = Upload.Form("id")
                    ano = Upload.Form("ano")
                    numero = Upload.Form("numero")
                    descricao = Upload.Form("descricao")
                    arquivo_atual = Upload.Form("atual")
                    arquivo_novo = File.OriginalPath

                    Atualiza.Open "UPDATE lei_norma SET ano = '"&ano&"', anum = '"&num&"', descricao = '"&descricao&"', lei = '"&arquivo_novo&"' Where id = '"&id&"'",conexao
                    
                end if
                
                  If Err <> 0 Then %>
                      <div align="center">
                      Ocorreu um erro durante o envio do arquivo:"<%=Err.Description %>"
                 <%Else %>
                    Lei cadastrada com sucesso.
                    </div>                
                    <TABLE width="599" BORDER="0" align="center" CELLPADDING="3" CELLSPACING="2">
                    <tr>
                        <TD width="69" height="26" align="right"><span class="style3">Arquivo:</span></TD>
                        <TD colspan="2" ALIGN=left><span class="style1"><%=File.OriginalPath%></span></TD>
                    </tr>
                    <TR>
                        <TD align="right"><span class="style3">Descri&ccedil;&atilde;o:</span></TD>
                        <TD width="512" align="left"><span class="style1"><%=descricao%></span></TD>
                    </TR>
                    <TR>
                        <TD align="right"><span class="style3">Ano:</span></TD>
                        <TD align="left"><span class="style1"><%=ano%></span></TD>
                    </TR>
                    <TR>
                        <TD align="right"><span class="style3">N&uacute;mero:</span></TD>
                        <TD align="left"><span class="style1"><%=numero%>  </span></TD>
                    </TR>
                    </TABLE> 
                    <div align="center">
                        <br><a href="cad_lei.asp" target="main">Voltar</a>
                    </div>
                    <%End if%>
        <%End if%>
</BODY>
</HTML>

Veja se o que eu estou fazendo está correto por favor!

Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte você deve recuperar o campo que faz o upload e depois comparar ...

Vamos fazer um teste, para ver se os valores a serem comparados podem ser iguais

os dois devem retornar em comum o mesmo diretório ...

No lugar do seu arquivo altera_lei.asp coloca esse script e posta o resultado ai ....

<!-- #include file = "../config.asp" -->
<%
id = Upload.Form("id")
vthefile= Upload.Form("thefile")

' Conecta-se ao Banco de Dados
    Set lei = Server.CreateObject("Adodb.Recordset")
    lei.CursorLocation = 3
    lei.CursorType = 2
    lei.open "SELECT * FROM  lei_norma WHERE SeuCampoCodigo = '"&id&"'",conexao

response.write vthefile & "-" & rs("CampoBd") %>

Link para o comentário
Compartilhar em outros sites

  • 0

Da o seguinte erro:

Informações técnicas (para a equipe de suporte)

* Tipo de erro:

(0x80020009)

Exceção.

/prefeitura/admin/leis_normas/altera_lei.asp, line 61

Percebi que ele da esse erro porque a consulta no db não retorna nada, porque a variavel vthefile tamém não recebe nada. Bom, pelomenos aqui!

Link para o comentário
Compartilhar em outros sites

  • 0

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

Set Upload = Server.CreateObject("Persits.Upload")

arquivo_novo = FileOriginalPath 'recupera o nome do arquivo que será enviado

' Conecta-se ao Banco de Dados

Set lei = Server.CreateObject("Adodb.Recordset")

lei.CursorLocation = 3

lei.CursorType = 2

lei.open "SELECT id,lei FROM lei_norma WHERE lei = '"&arquivo_novo&"'",conexao

if lei("lei") = arquivo_novo Then 'verifica se já existe uma lei cadastrada com o mesmo nome do NOVO arquivo que será enviado

Response.Write("Já existe um arquivo com este nome. Por favor renomeie o arquivo que deseja enviar!")

Response.End()

else

FSO.DeleteFile pasta&"/"&arquivo_atual 'Deleta o arquivo PDF que está na pasta leis que não será mais utilizado

Aqui inicia o script de upload do arquivo.

Upload.OverwriteFiles = False

On Error Resume Next

Upload.SetMaxSize 10088979

pasta = Server.MapPath("leis/") 'Salva o novo arquivo pdf que será enviado

Count = Upload.Save(pasta)

If Count > 0 Then

Set File = Upload.Files(1)

' Conecta-se ao Banco de Dados'

Set Atualiza = Server.CreateObject("Adodb.Recordset")

Atualiza.CursorLocation = 3

Atualiza.CursorType = 2

id = Upload.Form("id")

ano = Upload.Form("ano")

numero = Upload.Form("numero")

descricao = Upload.Form("descricao")

arquivo_atual = Upload.Form("atual")

arquivo_novo = File.OriginalPath

Atualiza.Open "UPDATE lei_norma SET ano = '"&ano&"', anum = '"&num&"', descricao = '"&descricao&"', lei = '"&arquivo_novo&"' Where id = '"&id&"'",conexao

end if

end if

Editado por +.jr_Designer.+
Link para o comentário
Compartilhar em outros sites

  • 0

Só alterei a forma de receber está igual qd você recebe para inserir ... testa ai

<!-- #include file = "../config.asp" -->
<%
id = Upload.Form("id")
vthefile= File.OriginalPath

' Conecta-se ao Banco de Dados
    Set lei = Server.CreateObject("Adodb.Recordset")
    lei.CursorLocation = 3
    lei.CursorType = 2
    lei.open "SELECT * FROM  lei_norma WHERE SeuCampoCodigo = '"&id&"'",conexao

response.write vthefile & "-" & rs("CampoBd") %>

Link para o comentário
Compartilhar em outros sites

  • 0

Eu já fiz dessa forma.

vthefile= File.OriginalPath

e também não da certo.

O problema todo está em tentar recuperar os valors do form antes da linha Count = Upload.Save(pasta).

Então pensei em fazer de outra forma:

E se fizer uma função na mesma página do form (form_altera_lei.asp) pra verificar se o arquivo existe ou não?

Essa função será chamada ao clicar no botão ENVIAR, e receberá o valor do campo thefile. Apos receber o valor do campo, fará uma consulta no DB pra ver se já existe um arquivo cadastrado com o mesmo nome do que será enviado, ai se o arquivo existir podemos colocar um Response.Write e se não existir podemos colocar um form.send... sei lá, algo tesse tipo.

Você acha que vale a pena ou o correto é tentar da forma que já está?

Link para o comentário
Compartilhar em outros sites

  • 0

ele ta retornando vários tipos de erro, por exemplo: "Tipos incompatíveis" número do erro 13, mas como te falei ta "funcionando", porque ele não retorna File.OriginalPath e nem File.Filename no final do script

código

<BODY>
<%    
    Set Upload = Server.CreateObject("Persits.Upload")
    Upload.OverwriteFiles = False
    On Error Resume Next
        
    Upload.SetMaxSize 10088979
    pasta = Server.MapPath("leis/") 
    Count = Upload.Save 'Salva o novo arquivo pdf que será enviado
            
        Set File = Upload.Files
        id = Upload.Form("id")
        descricao = Upload.Form("descricao")
        ano = Upload.Form("ano")
        numero = Upload.Form("numero")
        arquivo_atual = Upload.Form("atual")
        envia_arquivo = Upload.Form("envia_arquivo") 'Recebe o nome arquivo que será enviado
            
        if envia_arquivo = "" then'Se a variável arquivo_novo estiver vazia, significa que o usuário irá atualizar apenas as informações da lei (ano, descrição, numero) e não o arquivo.        
            ' Conecta-se ao Banco de Dados
            Set Verificalei = Server.CreateObject("Adodb.Recordset")
            Verificalei.CursorLocation = 3
            Verificalei.CursorType = 2
            Verificalei.open "SELECT id,ano,num,lei FROM  lei_norma WHERE id ='"&id&"'",conexao
                if not VerificaLei.eof then
                    Set FSO = Server.CreateObject("Scripting.FileSystemObject") 'Cria uma instância do FSO
                    lei_atual = Verificalei("lei") 'Recebe o nome do arquivo atual do DB para ser alterado pelo ano e número, caso o usuário os altere
                    Set fileobject = FSO.GetFile(pasta&"/"&lei_atual) 'Recupera o nome do arquivo físico no servidor para ser alterado
                    fileobject.Name = ano&"_"&numero&".pdf"'altera o nome do arquivo de acordo com o ano e numero da lei
                    nova_lei = ano&"_"&numero&".pdf" 'criei o mesmo nome nesta variável para gravar no DB
                    ' Conecta-se ao Banco de Dados para fazer a atualização
                    Set AtlzLei = Server.CreateObject("Adodb.Recordset")
                    AtlzLei.CursorLocation = 3
                    AtlzLei.CursorType = 2
                    AtlzLei.open "UPDATE lei_norma SET ano='"&ano&"', num='"&numero&"', descricao='"&descricao&"', lei='"&nova_lei&"' WHERE id='"&id&"'",conexao
                end if
        else
            if envia_arquivo = "sim" then' se a variável não estiver vazia, significa que o usuário irá alterar o arquivo e possivelmente o ano, número e descrição da lei selecionada
                'Conecta-se ao Banco de Dados
                Set Verificalei = Server.CreateObject("Adodb.Recordset")
                Verificalei.CursorLocation = 3
                Verificalei.CursorType = 2
                Verificalei.open "SELECT id,ano,num,lei FROM  lei_norma WHERE id ='"&id&"'",conexao
                
                    if Not Verificalei.Eof Then 'verifica se já existe uma lei cadastrada com o mesmo nome do NOVO arquivo que será enviado
                        Set FSO = Server.CreateObject("Scripting.FileSystemObject")
                        FSO.DeleteFile pasta&"/"&arquivo_atual 'Deleta o arquivo PDF que está na pasta leis que não será mais utilizado
                            For Each File in Upload.Files
                                File.SaveAs (pasta&"/"&ano&"_"&numero&".pdf")

                                Set File = UploadFiles(1)
                                    Set AtlzLei = Server.CreateObject("Adodb.Recordset")
                                    AtlzLei.CursorLocation = 3
                                    AtlzLei.CursorType = 2
                                    AtlzLei.open "UPDATE lei_norma SET ano='"&ano&"', num='"&numero&"', descricao='"&descricao&"', lei='"&File.FileName&"' WHERE id='"&id&"'",conexao
                                    
                            Next
                    end if
                end if
            end if
                
                If Err <> 0 Then %>
                      <div align="center">
                     <span class="style5">Ocorreu um erro durante o envio do arquivo: </span>"<%=Err.Description %>" número do erro: <%=Err%>
                 <%Else %>
                                        </div>                
                      <table width="80%" border="0" align="center" cellpadding="3" cellspacing="2">
                      <tr>
                          <td colspan="4" align="center"><span class="style4"><center>Altera&ccedil;&atilde;o realizada com sucesso.</center></span></td>
                        </tr>
                        <tr>
                          <td width="23%" align="right"><span class="style3">Arquivo Enviado:</span></td>
                          <td width="31%" align="left"><span class="style1"><%=File.OriginalPath%></span></td>
                          <td width="14%"><span class="style3">Salvo como:</span></td>
                          <td width="32%" align="left"><%=File.FileName%></td>
                        </tr>
                        <tr>
                          <td align="right"><span class="style3">Descri&ccedil;&atilde;o:</span></td>
                          <td align="left"><span class="style1"><%=descricao%></span></td>
                          <td>&nbsp;</td>
                          <td>&nbsp;</td>
                        </tr>
                        <tr>
                          <td align="right"><span class="style3">Ano:</span></td>
                          <td align="left"><span class="style1"><%=ano%></span></td>
                          <td>&nbsp;</td>
                          <td>&nbsp;</td>
                        </tr>
                        <tr>
                          <td align="right"><span class="style3">N&uacute;mero:</span></td>
                          <td align="left"><span class="style1"><%=numero%></span></td>
                          <td>&nbsp;</td>
                          <td>&nbsp;</td>
                        </tr>
                      </table>
<div align="center">
                        <br><a href="cad_lei.asp" target="main">Voltar</a>
                    </div>
                    <%End if%>
  
</BODY>
</HTML>

Editado por +.jr_Designer.+
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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...