Ir para conteúdo
unset

Tem como fazer upload sem alterar o campo no banco se existir algum valor?

Recommended Posts

Olá a todos, estou com uma dúvida ou probleminha e buguei aqui, se alguém puder ajudar, é o seguinte tem como eu fazer um update sem setar valor ou de alguma forma não alterar o valor do campo se o campo tiver valor no banco?

 

Exemplo

 

Aqui eu recebo os dados pra cadastrar tudo certo

 

public function update($dados) {

		$this->db->query("UPDATE posts SET capa = :capa, titulo = :titulo, texto = :texto WHERE id = :id");

        $this->db->bind(":id", $dados['id']);
        $this->db->bind(":capa", $dados['capa']);
        $this->db->bind(":titulo", $dados['titulo']);
        $this->db->bind(":texto", $dados['texto']);
    }

 

Porém, o campo capa, ou seja o dado caba não é obrigatório então se ele vier com valor null, ou em branco etc deveria não alterar o valor no banco pois o mesmo ja esta preenchido, como fazer para que ele altera o valor no banco somente se for null

 

Eu já tentei usar unset($dados['capa']); para remover a capa, mais ele deixa o campo do DB null mesmo quando tem valor lá, e também definir $dados['capa'] = null, em fim não da certo...

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue solução, abaixo:

 

CÓDIGO:

public function update($dados) {

	$this->db->query("UPDATE posts SET capa = :capa, titulo = :titulo, texto = :texto WHERE id = :id AND capa IS NULL");

	$this->db->bind(":id", $dados['id']);
	$this->db->bind(":capa", $dados['capa']);
	$this->db->bind(":titulo", $dados['titulo']);
	$this->db->bind(":texto", $dados['texto']);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá ShadowDLL, obg por responder.

 

Dessa forma ai, o update só é feito quando não tiver valor vindo do formulario, ou seja quando não tiver a capa, mais e quando ela existir? 

 

A imagem de capa é opcional no formulário então ela pode ou não vir, ou seja o $dados['capa'] pode ou não existe, se existir faz o update normal e atualiza o campo

 

Se a capa não existir, faz o update mais sem atualizar o campo capa, só os outros campos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe-me pelo inconveniente, tente agora:

 

CÓDIGO:

public function update($dados) {
	if (trim($dados['capa']) === "") {
		$dados['capa'] = null;
	}

	$update = $conn->prepare("UPDATE posts SET capa = IF(capa IS NULL, :capa, capa), titulo = :titulo, texto = :texto WHERE id = :id");
	$update->bindValue(":id", $dados['id']);
	$update->bindValue(":capa", $dados['capa']);
	$update->bindValue(":titulo", $dados['titulo']);
	$update->bindValue(":texto", $dados['texto']);
	$update->execute();
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por vicente386
      Ola. Tenho uma tabela no 3 campos que sao "LIVRO, POS, PAGINA" ao qual a logica e a seguinte: cada livro tem 100 paginas cada pagina tem 30 posiçoes tenho 8,364 registros pra inserir chegando a 100 paginas com 30 posiçoes cada passa para o livro 2 e como fazer o update na tabela inserindo nos campos LIVRO = 1, POS de 0 a 30 e PAGINA 1 para cada 30 registros logos apos pagina 2 ?
      estou tentando fazer assim:
      <?php > ini_set('max_execution_time', 2000); $pdo = new > DO(DB_SERVER.":host=".DB_HOST.";dbname=".DB_BASE,DB_USER,DB_PASSWORD); > $sql = $pdo->prepare("SELECT count(*) FROM tabela2018"); > $sql->execute(); > $livro = 1; > foreach($sql as $obj){ > $variavel = $obj[0]; > ceil((float)$variavel/100); > $qtdlaco = ceil((float)$variavel/100); > for ($id = 1; $id <= 35; $id++) { > for($L=1; $L < $qtdlaco; $L++) { > for ($P = 0; $P <= 30; $P++) { > $sql = $pdo->prepare("UPDATE tabela2018 SET LIVRO = :LIVRO, POS = :POS, PAGINA = :PAGINA WHERE idtabela2018 = $id"); > $sql->bindValue(':LIVRO', $livro); > $sql->bindValue(':POS', $P); > $sql->bindValue(':PAGINA', $L); > $sql->execute(); > } > } > } >} ?> mas na tebela so aparece: LIVRO POS PAGINA 1 30 83 1 30 83 1 30 83 e nao como deveria : LIVRO POS PAGINA 1 0 1 1 1 1 1 2 1
    • Por Kellison Ruan
      Acho que não fui tão claro no título, portanto irei esmiuçar melhor aqui...
       
      É o seguinte, quero saber se há algum jeito de pegar as linhas de uma coluna q está em VARCHAR com informações do tipo "4 PONTOS DE ILUMINAÇÃO", dessa informação pretendo retirar somente o número que em questão é o "4" e colocá-lo em outra coluna INTEGER. Há essa possibilidade? Detalhe, as vezes as informações não está seguindo um padrão de vim somente como "4 PONTOS DE ILUMINAÇÃO" às vezes vêm dados com mais informações númericas que precisa distinguir, por exemplo, a mim só interessa pegar números que vem antecedendo as palavras "PONTOS", "PTOS", "PTS", têm algum jeito de distinguir isso?
    • Por unset
      Olá, estou com um probleminha aqui se alguém puder ajudar,
       
      Eu tenho a data em uma coluna no formato date 2020-12-01 e a hora em outra coluna no formato time 09:00:00
       
      Como eu posso saber se a data de hoje é maior do que data e hora dessas 2 colunas?
    • Por lezão
      Boa tarde, galera!
      Td bem com vcs?
       
      Estou precisando de um UPDATE que qnd eu seleciono o checkbox e clico no botão submit ele chama para a pagina que ira fazer a alteração.
      Tenho um exemplo só que  em asp, vejam abaixo:
      Imagem UPDATE
       
      espero ter explicado certo.
       
      obrigado!
       
    • Por MarcosxEduardo
      Olá.
      Eu instalei um site na minha hospedagem.
      Criei a DB e o usuário, dando todas as permissões e conectei essa DB ao site.
       
      Mas quando vou entrar aparece a seguinte mensagem:
      Fatal error: Call to undefined function mysqli_connect() in /home2/public_html/database/DB.php on line 34
       
      alguém sabe que possa ser ?
       
×

Informação importante

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