Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kleber brito

[Resolvido] Atualizar campo do banco apenas se a img tiver sido s

Recommended Posts

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á.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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";
}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");
  }
}

E aqui o campo do form:

<input name="imagem" type="file"/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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..."

Compartilhar este post


Link para o post
Compartilhar em outros sites

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());
}

? :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bixo,

 

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

<? $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"];
else{
	$caminho2 = "$dados[imagem]";}

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<? $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"];
else{
	$caminho2 = "$dados[imagem]";}

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.