koodez Postado Junho 8, 2010 Denunciar Share Postado Junho 8, 2010 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 clicano 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 campoda imagem é um input tipo "file".A minha pergunta é: Alguém saberia como posso solucionar problema? Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Junho 8, 2010 Denunciar Share Postado Junho 8, 2010 Verifique se o campo da imagem está vazio, se estiver não atualize a informação referente a esse campo no BD, caso contrário atualize com a informação da nova imagem. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 8, 2010 Autor Denunciar Share Postado Junho 8, 2010 (editado) 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 "<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 Junho 9, 2010 por koodez Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Junho 8, 2010 Denunciar Share Postado Junho 8, 2010 $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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 9, 2010 Autor Denunciar Share Postado Junho 9, 2010 (editado) 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, certamenteestou errando em algum lugar.if (!empty($_FILES['foto'])) { $query .= " , foto = '{$_FILES['foto']} "; }Desde já, agradeço. Editado Junho 9, 2010 por koodez Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Junho 9, 2010 Denunciar Share Postado Junho 9, 2010 $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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 9, 2010 Autor Denunciar Share Postado Junho 9, 2010 (editado) 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 querecebi no início desse problema. Editado Junho 9, 2010 por koodez Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Junho 9, 2010 Denunciar Share Postado Junho 9, 2010 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 9, 2010 Autor Denunciar Share Postado Junho 9, 2010 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 imagemmas ao atualizar um formulário com mais de uma imagem o problema é similar ao primeiro. A imagem cadastrada some, mas a nova imagemse mantém. Deve ser simples, mas eu estou tendo muita dificuldade com isso.Novamente só tenho a agradecer pela ajuda! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Junho 9, 2010 Denunciar Share Postado Junho 9, 2010 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 9, 2010 Autor Denunciar Share Postado Junho 9, 2010 Não está funcionando. quando insiro o código:if (($foto1 != "") && ($foto1 != NULL)) { $foto1 = $foto1 } else { $foto1 = $fotoBD1}A página fica em branco. Não sei o que posso estar fazendo de errado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Junho 9, 2010 Denunciar Share Postado Junho 9, 2010 Como está inserindo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 9, 2010 Autor Denunciar Share Postado Junho 9, 2010 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çã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> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Junho 10, 2010 Denunciar Share Postado Junho 10, 2010 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 10, 2010 Autor Denunciar Share Postado Junho 10, 2010 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Junho 10, 2010 Denunciar Share Postado Junho 10, 2010 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;} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 10, 2010 Autor Denunciar Share Postado Junho 10, 2010 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 emPHP e MySQL. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Junho 10, 2010 Denunciar Share Postado Junho 10, 2010 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']; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 koodez Postado Junho 10, 2010 Autor Denunciar Share Postado Junho 10, 2010 Muito obrigado!!!Agora funcionou perfeitamente. Vou estudar e comentar o que você me ensinou para não esquecer de como fazer.Novamente muito obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
koodez
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
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.