Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos,
Tenho um formulario para alterar produtos em um banco de dados.
Ele funciona tudo beleza, o problema é, que se a pessoa nao selecionar uma imagem ele atualiza o banco com o campo nulo, apagando o caminho da foto que antes estava cadastrada, entao a unica solucao eh sempre que for atualizar um produto eu preciso reenviar a foto para o banco.
Teria como atualizar os campos do banco apenas com os formularios que estiverem preenchidos?
eu tentei da seguinte forma
if(!isset($_FILES['imagem'])){
$sql2 = "UPDATE pratos SET nome='$nome', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
}else{
$sql = "UPDATE pratos SET nome='$nome', imagem='$caminho2', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
$result = mysql_query($sql) or die(mysql_error());
}
mas sem resultados, alguem pode dar uma força?
Agradeço desde já.
nao funcionou, vou postar mais um pedaço do codigo Beraldo :D
$cod_select = $_GET['cod'];
if(isset($_POST['cod']))
$cod = $_POST['cod'];
if(isset($_POST['nome']))
$nome = $_POST['nome'];
if(isset($_FILES['imagem']))
$imagem = $_FILES['imagem'];
if(isset($_POST['conteudo']))
$conteudo = $_POST['conteudo'];
if(isset($_POST['categoria']))
$categoria = $_POST['categoria'];
if(isset($_POST['ativo']))
$ativo = $_POST['ativo'];
$pasta = "../imagens/$categoria/";
if(!file_exists($pasta)){
mkdir ("$pasta", 0755, true);
}
$caminho = $pasta . $imagem["name"];
// Faz o upload da imagem
move_uploaded_file($imagem["tmp_name"], $caminho);
$pasta2 = "imagens/$categoria/";
$caminho2 = $pasta2 . $imagem["name"];
if( $_FILES['imagem']['name'] == '' ){
$sql2 = "UPDATE pratos SET nome='$nome', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";if (isset($_POST['categoria']) && isset($_FILES['imagem']) && isset($_POST['nome']) && isset($_POST['conteudo']) && isset($_POST['ativo'])){
$sql = "UPDATE pratos SET nome='$nome', imagem='$caminho2', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
$result = mysql_query($sql) or die(mysql_error());
// header("Location: editor_mostra.php");
}
}<input name="imagem" type="file"/>
O problema no caso, é esse segundo if então.. pq vai entrar nele..
if (isset($_POST['categoria']) && $imagem['name'] != '' && isset($_POST['nome']) && isset($_POST['conteudo']) && isset($_POST['ativo'])){"A negação de uma afirmação..."
vou testar agora William,
No caso, eu substituo
if( $_FILES['imagem']['name'] == '' ){
$sql2 = "UPDATE pratos SET nome='$nome', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
}else{
if (isset($_POST['categoria']) && isset($_FILES['imagem']) && isset($_POST['nome']) && isset($_POST['conteudo']) && isset($_POST['ativo'])){
$sql = "UPDATE pratos SET nome='$nome', imagem='$caminho2', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
$result = mysql_query($sql) or die(mysql_error());
// header("Location: editor_mostra.php");
}
}
por:
if (isset($_POST['categoria']) && $imagem['name'] != '' && isset($_POST['nome']) && isset($_POST['conteudo']) && isset($_POST['ativo'])){
$sql = "UPDATE pratos SET nome='$nome', imagem='$caminho2', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
$result = mysql_query($sql) or die(mysql_error());
}
? :DBixo,
o que você pode fazer é, quando for pegar os dados do BD, jogar os que já estão lá dentro do value dos inputs. Ae, você cria uma função para validar o campo, mais ou menos assim:
<?php
function ValidaCampo($campo) {
if(empty($campo)) {
return false;
}else {
return true;
}
}
$id = $_GET["id"]; // Aqui você captura o ID da url
$query = mysql_query("SELECT * FROM tabela WHERE id='$id'");
$dados = mysql_fetch_array($query);
echo '<input name="nome" value="'.$dados["nome"].'">';
if (isset($_POST["botao_cadastrar"])) {
$imagem = $_FILES["imagem"]['name'];
$imagem_tmp = $_FILES["imagem"]['tmp_name'];
$nome = $dados["nome"];
if(ValidaCampo($imagem)) {
$sql = "UPDATE tabela SET nome='$nome', imagem='$imagem' WHERE id='$id'";
}else {
$sql = "UPDATE tabela SET nome='$nome' WHERE id='$id'";
}
$atualiza = mysql_query($sql);
if($atualiza) {
echo "Sucesso!";
}else {
echo "Erro!";
}
}
?>
Ae é só você adaptar.
Flw!
tentei algumas variacoes e tambem outras formas, de todo o modo, ele nem se quer atualiza o BD.
coloquei o codigo antigo e entao ele atualiza o bd, mas sobreescreve o campo da imagem com um valor nulo se a imagem nao tiver sido setada!
ta osso :D
<?php
$cod_select = $_GET['cod'];
if(isset($_POST['cod']))
$cod = $_POST['cod'];
if(isset($_POST['nome']))
$nome = $_POST['nome'];
if(isset($_FILES['imagem']))
$imagem = $_FILES['imagem'];
if(isset($_POST['conteudo']))
$conteudo = $_POST['conteudo'];
if(isset($_POST['categoria']))
$categoria = $_POST['categoria'];
if(isset($_POST['ativo']))
$ativo = $_POST['ativo'];
$pasta = "../imagens/$categoria/";
if(!file_exists($pasta)){
mkdir ("$pasta", 0755, true);
}
$caminho = $pasta . $imagem["name"];
// Faz o upload da imagem
move_uploaded_file($imagem["tmp_name"], $caminho);
$pasta2 = "imagens/$categoria/";
$caminho2 = $pasta2 . $imagem["name"];
if( $_FILES['imagem']['name'] == '' ){
$sql2 = "UPDATE pratos SET nome='$nome', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
}
if (isset($_POST['categoria']) && isset($_POST['nome']) && isset($_POST['conteudo']) && isset($_POST['ativo'])){
$sql = "UPDATE pratos SET nome='$nome', imagem='$caminho2', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
$result = mysql_query($sql) or die(mysql_error());
// header("Location: editor_mostra.php");
}
form:
<form id="form_4104" class="appnitro" enctype="multipart/form-data" method="post" action="" name="cad_prato">
<div class="form_description">
<h2>Disk Sushi - Alterando Prato: <?php echo "<font color='#993300' size='+3' face='Verdana, Geneva, sans-serif'>$nome</font>"; ?></h2>
<p>Use este formulário para alterar um prato no cardápio</p>
</div>
<ul >
<li id="li_4" >
<label class="description" for="element_4">Tipo do Prato</label>
<div>
<select class="element select medium" id="element_4" name="categoria">
<option value="<?php echo $dados["cat_id"]; ?>" selected='selected'><?php echo $dados["nome"]; ?></option>
<option value="">=======================</option>
<?php
$sql3 = "SELECT * FROM categorias ORDER BY nome ASC";
$query3= mysql_query($sql3) or die(mysql_error());
while ($linha3 = mysql_fetch_array($query3)) {
$id = $linha3["id"];
$nome_cat = $linha3["nome"];
echo "<option value='$id' >$nome_cat</option>";
}
?>
</select>
</div>
</li> <li id="li_2" >
<label class="description" for="element_2">Imagem do prato </label>
<div>
<input id="element_2" name="imagem" class="element file" type="file"/>
</div>
</li> <li id="li_1" >
<label class="description" for="element_1">Nome do Prato </label>
<div>
<input id="element_1" name="nome" class="element text medium" type="text" maxlength="255" value="<?php echo $nome ?>"/>
</div>
</li> <li id="li_3" >
<label class="description" for="element_3">Conteudo do prato </label>
<div>
<textarea id="element_3" name="conteudo" class="element textarea medium"><?php echo $conteudo ?></textarea>
</div>
</li> <li id="li_5" >
<label class="description" for="element_5">Ativo </label>
<div>
<select class="element select medium" id="element_5" name="ativo">
<?php if($ativo == S){
echo "<option value='S' selected='selected'>SIM</option>
<option value='N' >NÃO</option>";
}else{
echo "<option value='N' selected='selected'>NÃO</option>
<option value='S' >SIM</option>";
}
?>
</select>
</div>
</li>
<li class="buttons">
<input type="hidden" name="cod" value="<?php echo $cod ?>">
<input id="saveForm" class="button_text" type="submit" name="submit" value="Enviar" />
</li>
</ul>
</form>Uai!!!!
Na área admin cria links onde a pessoa ira atualizar somente os dados, e outro para imagens!!!´
Isso já é questão de organização.
>
Uai!!!!
Na área admin cria links onde a pessoa ira atualizar somente os dados, e outro para imagens!!!´
Isso já é questão de organização.
Bem, mas eu preciso do form na mesma pagina, entao nao adianta criar outro link para administrar só as imagens :D
>
>
Uai!!!!
Na área admin cria links onde a pessoa ira atualizar somente os dados, e outro para imagens!!!´
Isso já é questão de organização.
Bem, mas eu preciso do form na mesma pagina, entao nao adianta criar outro link para administrar só as imagens :D
Bom em minhas aplicações eu já penso no futuro é quem nem sempre tenho a intenção de limitar em 1!!! ;)
Mas aguarde ai, e como o Beraldo disse não tem erro!!!!
<? $cod_select = $_GET['cod'];
if(isset($_POST['cod']))
$cod = $_POST['cod'];
if(isset($_POST['nome']))
$nome = $_POST['nome'];
if(isset($_FILES['imagem']))
$imagem = $_FILES['imagem'];
if(isset($_POST['conteudo']))
$conteudo = $_POST['conteudo'];
if(isset($_POST['categoria']))
$categoria = $_POST['categoria'];
if(isset($_POST['ativo']))
$ativo = $_POST['ativo'];
$pasta = "../imagens/$categoria/";
if(!file_exists($pasta)){
mkdir ("$pasta", 0755, true);
}
$caminho = $pasta . $imagem["name"];
// Faz o upload da imagem
move_uploaded_file($imagem["tmp_name"], $caminho);
$pasta2 = "imagens/$categoria/";
$sql3 = mysql_query("select * from pratos where cod='$cod'");
$dados=mysql_fetch_array($sql3);
if($imagem!=""){
$caminho2 = $pasta2 . $imagem["name"];if( $_FILES['imagem']['name'] == '' ){
$sql2 = "UPDATE pratos SET nome='$nome', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
}else{
if (isset($_POST['categoria']) && isset($_FILES['imagem']) && isset($_POST['nome']) && isset($_POST['conteudo']) && isset($_POST['ativo'])){
$sql = "UPDATE pratos SET nome='$nome', imagem='$caminho2', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
$result = mysql_query($sql) or die(mysql_error());
// header("Location: editor_mostra.php");
}
}
adicionei essas linhas do seu codigo:
$sql3 = mysql_query("select * from pratos where cod='$cod'");
$dados=mysql_fetch_array($sql3);
if($imagem!=""){
$caminho2 = $pasta2 . $imagem["name"];
else{
$caminho2 = "$dados[imagem]";}
se entendi bem, acredito que isso pode resolver o seu problema.
primeiro faz uma conexão para pegar o valor da imagem que ja esta no banco de dados. e quando for editar, se não tiver imagem para upload ele vai pegar o valor que ja esta na base de dados, e assim continuara com a mesma imagem.
espero ter ajudado.
até +, abração.
>
<? $cod_select = $_GET['cod'];
if(isset($_POST['cod']))
$cod = $_POST['cod'];
if(isset($_POST['nome']))
$nome = $_POST['nome'];
if(isset($_FILES['imagem']))
$imagem = $_FILES['imagem'];
if(isset($_POST['conteudo']))
$conteudo = $_POST['conteudo'];
if(isset($_POST['categoria']))
$categoria = $_POST['categoria'];
if(isset($_POST['ativo']))
$ativo = $_POST['ativo'];
$pasta = "../imagens/$categoria/";
if(!file_exists($pasta)){
mkdir ("$pasta", 0755, true);
}
$caminho = $pasta . $imagem["name"];
// Faz o upload da imagem
move_uploaded_file($imagem["tmp_name"], $caminho);
$pasta2 = "imagens/$categoria/";
$sql3 = mysql_query("select * from pratos where cod='$cod'");
$dados=mysql_fetch_array($sql3);
if($imagem!=""){
$caminho2 = $pasta2 . $imagem["name"];if( $_FILES['imagem']['name'] == '' ){
$sql2 = "UPDATE pratos SET nome='$nome', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
}else{
if (isset($_POST['categoria']) && isset($_FILES['imagem']) && isset($_POST['nome']) && isset($_POST['conteudo']) && isset($_POST['ativo'])){
$sql = "UPDATE pratos SET nome='$nome', imagem='$caminho2', conteudo='$conteudo', cat_id='$categoria', ativo='$ativo' where cod=$cod";
$result = mysql_query($sql) or die(mysql_error());
// header("Location: editor_mostra.php");
}
}
adicionei essas linhas do seu codigo:
$sql3 = mysql_query("select * from pratos where cod='$cod'");
$dados=mysql_fetch_array($sql3);
if($imagem!=""){
$caminho2 = $pasta2 . $imagem["name"];
else{
$caminho2 = "$dados[imagem]";}
se entendi bem, acredito que isso pode resolver o seu problema.
primeiro faz uma conexão para pegar o valor da imagem que ja esta no banco de dados. e quando for editar, se não tiver imagem para upload ele vai pegar o valor que ja esta na base de dados, e assim continuara com a mesma imagem.
espero ter ajudado.
até +, abração.
vou testar agora e ja te digo! :D
opa agora ta funcionando, só mudei uma coisa na sua dica
if($imagem["name"] != ""){
$caminho2 = $pasta2 . $imagem["name"];
}else{
$caminho2 = "$dados[imagem]";
}
Obrigado ae a todos que ajudaram e/ou tentaram!!! :D
****
Resolvido