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

Edição de formulário com imagem


koodez

Pergunta

Tenho um problema com um formulário simples de atualização de informações do banco de dados.

Tudo funciona, mas quando visualizo um item para edição se não atualizar a imagem ela some quando se clica

no botão para fazer a atualização das informações.

Certamente deve ter relação com o fato de que todos os outros campos já estão preenchidos (óbvio!) e o campo

da imagem é um input tipo "file".

A minha pergunta é: Alguém saberia como posso solucionar problema?

Obrigado!

Link para o comentário
Compartilhar em outros sites

18 respostass a esta questão

Posts Recomendados

  • 0

Entendi, mas como seria na prática? Estou utilizando o código que segue abaixo.

<?php
    $id = $_GET['id'];

    if ($_GET['acao'] == "update")
    { 
        
        // DEFINIÇÕES
        // Numero de campos de upload
        $numeroCampos = 5;
        // Tamanho máximo do arquivo (em bytes)
        $tamanhoMaximo = 1000000;
        // Extensões aceitas
        $extensoes = array(".jpg", ".jpeg", ".gif", ".png");
        // Caminho para onde o arquivo será enviado
        $caminho = "../uploads/";
        // Substituir arquivo já existente (true = sim; false = não)
        $substituir = false;
        
        for ($i = 0; $i < $numeroCampos; $i++) {
            
            // Informações do arquivo enviado
            $nomeArquivo = $_FILES["arquivo"]["name"][$i];
            $tamanhoArquivo = $_FILES["arquivo"]["size"][$i];
            $nomeTemporario = $_FILES["arquivo"]["tmp_name"][$i];
            
            // Verifica se o arquivo foi colocado no campo
            if (!empty($nomeArquivo)) {
            
                $erro = false;
            
                // Verifica se o tamanho do arquivo é maior que o permitido
                if ($tamanhoArquivo > $tamanhoMaximo) {
                    $erro = "O arquivo " . $nomeArquivo . " não deve ultrapassar " . $tamanhoMaximo. " bytes";
                } 
                // Verifica se a extensão está entre as aceitas
                elseif (!in_array(strrchr($nomeArquivo, "."), $extensoes)) {
                    $erro = "A extensão do arquivo <b>" . $nomeArquivo . "</b> não é válida";
                } 
                // Verifica se o arquivo existe e se é para substituir
                elseif (file_exists($caminho . $nomeArquivo) and !$substituir) {
                    $erro = "O arquivo <b>" . $nomeArquivo . "</b> já existe";
                }
            
                // Se não houver erro
                if (!$erro) {
                    // Move o arquivo para o caminho definido
                    move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo));
                    
                        //WideImage::load('big.png')->resize(50, 30)->saveToFile('small.jpg');
                        //$nomeArquivo = $nomeArquivo->resize(40, 30);
                    
                    // Mensagem de sucesso
                    echo "O arquivo <b>".$nomeArquivo."</b> foi enviado com sucesso.<br />";
                } 
                // Se houver erro
                else {
                    // Mensagem de erro
                    echo $erro . "<br />";
                }
            }
        }
            
        ///////////////////////////////////////
        //Insere os dados no bando de dados://
        //////////////////////////////////////
                
            $id = $_GET["id"];
            $nome = $_POST["nome"];
            $fone = $_POST["fone"];
            $foto = $_FILES["foto"]['name'];
                
                $tmpfoto = $_FILES['foto']['tmp_name'];
                $destino = "../uploads/".$foto;
                move_uploaded_file($tmpfoto, $destino);
                
                    $query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone', foto='$foto' WHERE id='$id'") or die(mysql_error()); 

                        if ($login) 
                            {    
                            ?>    
                            <div>
                                <a href="./index.html#" class="close"><img src="./img/fecha.png" title="Fechar essa menssagem" alt="fechar"></a>
                                <div>Alteração efetuada com sucesso...</div>
                            </div>
                            <?php    
                            }    
                            else
                            {    
                                echo "&lt;script language='javascript'>alert('Não foi possivel alterar o cadastro...')<//script>";
                            }    
    }
    
        $sql = mysql_query("SELECT * FROM tabela WHERE id = '$id' ") or die(mysql_error());  
            while($array = mysql_fetch_array($sql))  
                {     
?>


        <form action="atualiza.php?acao=update&id=<?=$array['id'];?>" method="post" enctype="multipart/form-data">                
                    <label>Imagem:</label>
                    <a href="../uploads/<?=$array['foto'];?>" id="fancyimg"><img src="../uploads/<?=$array['foto'];?>"></a>
                        <br />                    
                        <input class="text-input small-input" type="file" id="foto" name="foto" value="<?=$_FILES['foto'];?>">
                    <p></p>

                    <label>Nome:</label>
                        <input class="text-input large-input" type="text" id="nome" name="nome" value="<?=$array['nome'];?>">
                    <p></p>

                    <label>Fone:</label>
                        <input class="text-input large-input" type="text" id="fone" name="fone" value="<?=$array['fone'];?>">
                    <p></p>

                    <p><input class="button" type="submit" value="Enviar"></p>
            </form>
                
<?php } ?>

Obrigado pela ajuda.

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

  • 0

$id = $_GET["id"];
$nome = $_POST["nome"];
$fone = $_POST["fone"];
if($_POST["foto"] != "")
{
$foto = $_FILES["foto"]['name'];

$tmpfoto = $_FILES['foto']['tmp_name'];
$destino = "../uploads/".$foto;
move_uploaded_file($tmpfoto, $destino);

$query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone', foto='$foto' WHERE id='$id'") or die(mysql_error()); 
}
else
{
$query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone' WHERE id='$id'") or die(mysql_error());
}

Tente isso, funcionando, estude o que foi feito!

Link para o comentário
Compartilhar em outros sites

  • 0

Agradeço pela dica. Mas infelizmente não funcionou. Continua limpando o campo no banco quando o formulário é atualizado sem se alterar o campo da imagem.

Será que algo como o que segue abaixo não funcionaria? Ou estou enganado? Claro que como o conhecimento é limitado não consegui fazer funcionar, certamente

estou errando em algum lugar.

if (!empty($_FILES['foto'])) {
$query .= " , foto = '{$_FILES['foto']} ";
}

Desde já, agradeço.

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

  • 0

$id = $_GET["id"];
$nome = $_POST["nome"];
$fone = $_POST["fone"];
$foto = $_FILES["foto"]['name'];
if(($foto != "") && ($foto != NULL))
{
$tmpfoto = $_FILES['foto']['tmp_name'];
$destino = "../uploads/".$foto;
move_uploaded_file($tmpfoto, $destino);

$query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone', foto='$foto' WHERE id='$id'") or die(mysql_error()); 
}
else
{
$query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone' WHERE id='$id'") or die(mysql_error());
}

Fiz uma pequena alteração, e na verdade sempre faço assim, e sempre funciona!

Link para o comentário
Compartilhar em outros sites

  • 0

Agora funcionou, mas também tive que editar um pouco. Da maneira que você resolveu a imagem continua firme mas dava uma mensagem de erro (na linha 1 perto de WHERE id ='1') e não alterava o restante do formulário.

$foto = $_FILES["foto"]['name'];

                $tmpfoto = $_FILES['foto']['tmp_name'];
                $destino = "../uploads/".$foto;
                move_uploaded_file($tmpfoto, $destino);

            if (($foto != "") && ($foto != NULL))
                {
                    $query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone', foto='$foto' WHERE id='$id'") or die(mysql_error()); 
                        }
                        else
                        {
                    $query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone' WHERE id='$id'") or die(mysql_error());                         
                        }
Muito obrigado! Você foi de muita ajuda. Aproveito para tirar mais uma dúvida. Caso tenha mais de um campo de foto (é o caso!) como poderia ser feito? Talvez assim:
if (($foto || $foto1 || $foto2 || e por ai vai?

Claro que eu já tentei dessa maneira e não deu certo. Agradeço se puder ajudar, mas já fico feliz com a ajuda que

recebi no início desse problema.

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

  • 0

Não, eu aconselharia de outra forma, por exemplo, quando você monta o formulário você faz um select na base para trazer os campos já preenchidos, consequentemente você já tem uma variavel com a imagem salva atualmente no banco, supondo que essa variavel seja $fotoBD, faça a validação de outra maneira.

$foto = $_FILES["foto"]['name'];

                $tmpfoto = $_FILES['foto']['tmp_name'];
                $destino = "../uploads/".$foto;
                move_uploaded_file($tmpfoto, $destino);

            if (($foto != "") && ($foto != NULL)) { $foto = $foto } else { $foto = $fotoBD}
            
                    $query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone', foto='$foto' WHERE id='$id'") or die(mysql_error());

Repare que assim, você sempre faz o update da imagem, porém se o post da imagem for vazio, você atribui a ela o mesmo valor que está base atual, ou seja, a alteração será feito pelo mesmo nome e não terá problemas, caso seja diferente ele vai apenas atribuir a esse novo valor, e será alterado. Assim fica mais fácil caso use mais de uma imagem, pois não precisá montar varias e varias querys diferentes.

Link para o comentário
Compartilhar em outros sites

  • 0

Dessa vez não acompanhei. Abaixo estou definindo o que estou tentando utilizar:

$id = $_GET["id"];
$nome = $_POST["nome"];
$fone = $_POST["fone"];
$foto1 = $_FILES["foto1"]['name'];
$foto2 = $_FILES["foto2"]['name'];
$foto3 = $_FILES["foto3"]['name'];

$tmpfoto = $_FILES['foto1']['tmp_name'];
$destino = "../uploads/".$foto1;
move_uploaded_file($tmpfoto1, $destino);

$tmpfoto = $_FILES['foto2']['tmp_name'];
$destino = "../uploads/".$foto2;
move_uploaded_file($tmpfoto2, $destino);

$tmpfoto = $_FILES['foto3']['tmp_name'];
$destino = "../uploads/".$foto3;
move_uploaded_file($tmpfoto3, $destino);

if(($foto != "") && ($foto != NULL))
{
$query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone', foto1='$foto1', foto2='$foto2', foto3='$foto3' WHERE id='$id'") or die(mysql_error()); 
}
else
{
$query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone' WHERE id='$id'") or die(mysql_error());
}
Como eu poderia utilizar o código que você me aconselhou?
if (($foto != "") && ($foto != NULL)) { $foto = $foto } else { $foto = $fotoBD}

Confesso que me perdi. De onde sai essa variável $fotoBD? Da maneira que você me aconselhou funcionou perfeitamente com uma imagem

mas ao atualizar um formulário com mais de uma imagem o problema é similar ao primeiro. A imagem cadastrada some, mas a nova imagem

se mantém. Deve ser simples, mas eu estou tendo muita dificuldade com isso.

Novamente só tenho a agradecer pela ajuda!

Link para o comentário
Compartilhar em outros sites

  • 0

Eu apenas dei um exemplo, essa variavel $fotoBD seria a imagem que já se encontra na base de dados, a imagem ATUAL. Faça uma consulta na base, e armazene as imagens atuais nas variaveis. $fotoBD1, $fotoBD3, $fotoBD3.

$id = $_GET["id"];
$nome = $_POST["nome"];
$fone = $_POST["fone"];
$foto1 = $_FILES["foto1"]['name'];
$foto2 = $_FILES["foto2"]['name'];
$foto3 = $_FILES["foto3"]['name'];

$tmpfoto = $_FILES['foto1']['tmp_name'];
$destino = "../uploads/".$foto1;
move_uploaded_file($tmpfoto1, $destino);

$tmpfoto = $_FILES['foto2']['tmp_name'];
$destino = "../uploads/".$foto2;
move_uploaded_file($tmpfoto2, $destino);

$tmpfoto = $_FILES['foto3']['tmp_name'];
$destino = "../uploads/".$foto3;
move_uploaded_file($tmpfoto3, $destino);

if (($foto1 != "") && ($foto1 != NULL)) { $foto1 = $foto1 } else { $foto1 = $fotoBD1} 
if (($foto2 != "") && ($foto2 != NULL)) { $foto2 = $foto2 } else { $foto2 = $fotoBD2}
if (($foto3 != "") && ($foto3 != NULL)) { $foto3 = $foto3 } else { $foto3 = $fotoBD3}

$query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone', foto1='$foto1', foto2='$foto2', foto3='$foto3' WHERE id='$id'") or die(mysql_error());

Veja que se "upar" imagem nova, a variável recebe o valor dessa imagem nova, caso não, ela recebe o valor da imagem que está atualmente na base.

Link para o comentário
Compartilhar em outros sites

  • 0

Abaixo segue o código completo da página. Retirei apenas o HTML desnecessário para a compreensão do todo.

<?php
    $id = $_GET['id'];

    if ($_GET['acao'] == "update")
    { 
        $numeroCampos = 5;
        $tamanhoMaximo = 1000000;
        $extensoes = array(".jpg", ".jpeg", ".gif", ".png");
        $caminho = "../uploads/";
        $substituir = false;
        
        for ($i = 0; $i < $numeroCampos; $i++) {
            
            $nomeArquivo = $_FILES["arquivo"]["name"][$i];
            $tamanhoArquivo = $_FILES["arquivo"]["size"][$i];
            $nomeTemporario = $_FILES["arquivo"]["tmp_name"][$i];
            
            if (!empty($nomeArquivo)) {
            
                $erro = false;
            
                if ($tamanhoArquivo > $tamanhoMaximo) {
                    $erro = "O arquivo " . $nomeArquivo . " não deve ultrapassar " . $tamanhoMaximo. " bytes";
                } 
                elseif (!in_array(strrchr($nomeArquivo, "."), $extensoes)) {
                    $erro = "A extensão do arquivo <b>" . $nomeArquivo . "</b> não é válida";
                } 
                elseif (file_exists($caminho . $nomeArquivo) and !$substituir) {
                    $erro = "O arquivo <b>" . $nomeArquivo . "</b> já existe";
                }
            
                if (!$erro) {
                    move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo));
                    
                    echo "O arquivo <b>".$nomeArquivo."</b> foi enviado com sucesso.<br />";
                } 
                else {
                    echo $erro . "<br />";
                }
            }
        }

        ///////////////////////////////////////////
        //Script para inserir os dados no bando://
        //////////////////////////////////////////

            $id = $_GET["id"];
            $nome = $_POST["nome"];
            $fone = $_POST["fone"];

            $foto1 = $_FILES["foto1"]['name'];
            $foto2 = $_FILES["foto2"]['name'];            
            $foto3 = $_FILES["foto3"]['name'];            
                            
                $tmpfoto1 = $_FILES['foto1']['tmp_name'];
                $destino = "../uploads/".$foto1;
                move_uploaded_file($tmpfoto1, $destino);
                
                $tmpfoto2 = $_FILES['foto2']['tmp_name'];
                $destino = "../uploads/".$foto2;
                move_uploaded_file($tmpfoto2, $destino);
                
                $tmpfoto3 = $_FILES['foto3']['tmp_name'];
                $destino = "../uploads/".$foto3;
                move_uploaded_file($tmpfoto3, $destino);
                
if (($foto1 != "") && ($foto1 != NULL)) { $foto1 = $foto1 } else { $foto1 = $fotoBD1} 
if (($foto2 != "") && ($foto2 != NULL)) { $foto2 = $foto2 } else { $foto2 = $fotoBD2}
if (($foto3 != "") && ($foto3 != NULL)) { $foto3 = $foto3 } else { $foto3 = $fotoBD3}

        $query = mysql_query("UPDATE tabela SET nome='$nome', fone='$fone', foto1='$foto1', foto2='$foto2', foto3='$foto3' WHERE id='$id'") or die(mysql_error()); 

        if ($login) 
            {    
        ?>    
            <div class="sucesso">
            <a href="./index.html#" class="fechar"><img src="./img/x.png" title="Fechar essa mensagem" alt="fechar"></a>
            <div>Altera&ccedil;&atilde;o efetuada com sucesso...</div>
            </div>
        <?php    
            }    
        else
            { 
        ?>    
            <div class="erro">
            <a href="./index.html#" class="fechar"><img src="./img/x.png" title="Fechar essa menssagem" alt="fechar"></a>
            <div>Ocorreu um problema ao cadastrar o item...</div>
            </div>
        <?php 
            }    
        }
    
        $sql = mysql_query("SELECT * FROM tabela WHERE id = '$id' ") or die(mysql_error());  
            while($array = mysql_fetch_array($sql))  
                {     
?>

<form action="atualiza.php?acao=update&id=<?=$array['id'];?>" method="post" enctype="multipart/form-data">
                    
    <label>Nome:</label>
        <input type="text" id="nome" name="nome" value="<?=$array['nome'];?>">
    <p></p>

    <label>Fone:</label>
        <input type="text" id="fone" name="fone" value="<?=$array['fone'];?>">
    <p></p>

    <label>Foto 1:</label>
        <a href="../uploads/<?=$array['foto1']; ?>"><img src="../uploads/<?=$array['foto1']; ?>"></a>
        <input type="file" id="foto1" name="foto1" value="<?=$_FILES['foto1'];?>">
    <p></p>

    <label>Foto 2:</label>
        <a href="../uploads/<?=$array['foto2']; ?>"><img src="../uploads/<?=$array['foto2']; ?>"></a>
        <input type="file" id="foto2" name="foto2" value="<?=$_FILES['foto2'];?>">
    <p></p>

    <label>Foto 3:</label>
        <a href="../uploads/<?=$array['foto3']; ?>"><img src="../uploads/<?=$array['foto3']; ?>"></a>
        <input type="file" id="foto3" name="foto3" value="<?=$_FILES['foto3'];?>">
    <p></p>

        <input class="button" type="submit" value="Alterar">
</form>

Link para o comentário
Compartilhar em outros sites

  • 0
Certo, mas como disse, as variaveis $fotoBD tem que receber os valores das imagens que já estão na base, você não atribuiu nada à elas.

Você diz criar algo do tipo

$fotoDB1 = $_GET["foto1"];
$fotoDB2 = $_GET["foto2"];
$fotoDB3 = $_GET["foto3"];
Mas de qualquer maneira tem algo errado. Quando adiciono as linhas
if (($foto1 != "") && ($foto1 != NULL)) { $foto1 = $foto1 } else { $foto1 = $fotoBD1} 
if (($foto2 != "") && ($foto2 != NULL)) { $foto2 = $foto2 } else { $foto2 = $fotoBD2}
if (($foto3 != "") && ($foto3 != NULL)) { $foto3 = $foto3 } else { $foto3 = $fotoBD3}

A página não retorna nada, também não dá nenhuma mensagem de erro. Apenas fica em branco.

Link para o comentário
Compartilhar em outros sites

  • 0

Achei um erro, desculpa mas foi erro meu, faltou os ponto e virgulas:

if (($foto1 != "") && ($foto1 != NULL)) { $foto1 = $foto1; } else { $foto1 = $fotoBD1;} 
if (($foto2 != "") && ($foto2 != NULL)) { $foto2 = $foto2; } else { $foto2 = $fotoBD2;}
if (($foto3 != "") && ($foto3 != NULL)) { $foto3 = $foto3; } else { $foto3 = $fotoBD3;}

Link para o comentário
Compartilhar em outros sites

  • 0
Achei um erro, desculpa mas foi erro meu, faltou os ponto e virgulas:

if (($foto1 != "") && ($foto1 != NULL)) { $foto1 = $foto1; } else { $foto1 = $fotoBD1;} 
if (($foto2 != "") && ($foto2 != NULL)) { $foto2 = $foto2; } else { $foto2 = $fotoBD2;}
if (($foto3 != "") && ($foto3 != NULL)) { $foto3 = $foto3; } else { $foto3 = $fotoBD3;}
Voltou ao normal, obrigado. Mas infelizmente continua o problema, se atualizar uma imagem as outras limpam o campo. Aquilo que você falou de criar as variáveis para o nome do campo das fotos seria assim?
$fotoDB1 = $_GET["foto1"];

E se for devo colocar no inicio da página? Desculpe por essas perguntas, mas estou bem perdido pois estou iniciando em

PHP e MySQL.

Link para o comentário
Compartilhar em outros sites

  • 0

Não, ai você está pegando por GET, acredito que não está passando esse parametro pelo mesmo.

Faça um select na base, pegue os valores e salva nas variaveis.

$sql = mysql_query("SELECT * FROM tabela WHERE id = '$id' ") or die(mysql_error());
$res = mysql_fetch_assoc($sql);
$fotoBD1 = $res['foto1'];
$fotoBD2 = $res['foto2'];
$fotoBD3 = $res['foto3'];

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,1k
    • Posts
      651,9k
×
×
  • Criar Novo...