Update banco de dados sql com vários campos e condições distintas para atualizar campos distintos.

12/02/2020

0

Olá pessoal! Sou nova por aqui e tbm novata em php e estou precisando de uma ajudinha. Tenho uma tabela com várias linhas e cada linha possui os seguintes campos: ID Campo1 Campo2 Campo3.... Campo16.
A questão é a seguinte: preciso fazer um update nesta tabela para atualizar para "null" determinados campos sob determinadas condições para cada campo individualmente em uma mesma linha. Por exemplo:
Atualizar o Campo1 para "null" quando os inputs dos campos "id" e "campo" corresponderem ao id da linha da tabela e o campo corresponder ao valor registrado no Campo1 daquela linha. Tenho o seguinte código:
"UPDATE minha_tabela SET Campo1=''NULL'' WHERE id="$id'' and Campo1=''$campo''";
Blz" Atualiza para "null" o Campo1 se o registro nesse campo for igual ao input "campo" e o id="id" da linha. Mas e como atualizar os Campos2, 3, 4, etc... ??
Já tentei:
"UPDATE minha_tabela SET Campo1=''NULL'' WHERE id="$id'' and Campo1=''$campo''";
"UPDATE minha_tabela SET Campo2=''NULL'' WHERE id="$id'' and Campo2=''$campo''";
"UPDATE minha_tabela SET Campo3=''NULL'' WHERE id="$id'' and Campo3=''$campo''";
etc... mas não funcionou.
É possível fazer esse update em uma única instrução? Se sim, poderia me dar um exemplo de como ficaria o código?
Obrigada!
Mary

Mary

Responder

Posts

14/02/2020

Gustavo

Poderia postar um exemplo de uma ou duas linhas da sua tabela? Ficou meio confuso a explicação.

Mostra também o código PHP que você tá usando.
Responder

14/02/2020

Mary

Poderia postar um exemplo de uma ou duas linhas da sua tabela? Ficou meio confuso a explicação.

Mostra também o código PHP que você tá usando.


Olá Gustavo, tudo bem? A tabela é algo assim:

id campo1 campo2 campo3 campo4 código_cliente nome_da_empresa
1 aaaaaa bbbbbb ccccccc ddddddd 123456 Empresa Um LTDA
2 eeeeee ffffffffff ggggggg hhhhhhh 654321 Empresa Dois LTDA
3 iiiiiiiiiiiii jjjjjjjjjjjjjj kkkkkkkk llllllllllllllll 147258 Empresa Tres Ltda

Código PHP:

<?php
$campo = filter_input(INPUT_POST, ''campo'', FILTER_SANITIZE_STRING);
$codigocliente = filter_input(INPUT_POST, ''codigocliente'', FILTER_SANITIZE_STRING);

"UPDATE minha_tabela SET campo1="NULL" WHERE codigo_cliente=''$codigocliente'' AND campo1=''$campo''":
?>

Até aqui funciona: quando a variável $campo recebe o valor aaaaaa e a variável $codigocliente recebe o valor 123456 o campo 1 da tabela fica NULL.
A questáo é: como fazer a mesma coisa para alterar para NULL o campo2 quando o valor da variável $campo for bbbbbb e o valor da variável $codigocliente for 123456, e assim por diante...

Deu pra entender? Não sei se consegui me expressar melhor agora...
:)
Obrigada!
Responder

14/02/2020

Emerson Nascimento

O comando SQL deve ser assim:
UPDATE minha_tabela SET
campo1=(case when codigo_cliente = ''$codigocliente'' AND campo1= ''$campo'' then NULL else campo1 end),
campo2=(case when codigo_cliente = ''$codigocliente'' AND campo2= ''$campo'' then NULL else campo2 end),
campo3=(case when codigo_cliente = ''$codigocliente'' AND campo3= ''$campo'' then NULL else campo3 end),

...
Até o campo16
Dá até pra montar o comando num loop



Responder

14/02/2020

Emerson Nascimento

Esqueci do where...
UPDATE minha_tabela SET
campo1=(case when campo1= ''$campo'' then NULL else campo1 end),
campo2=(case when campo2= ''$campo'' then NULL else campo2 end),
campo3=(case when campo3= ''$campo'' then NULL else campo3 end),
[até o campo16]
WHERE codigo_cliente = ''$codigocliente''

Responder

15/02/2020

Mary

Olá Emerson! Vou remontar meu código na segunda-feira (estou fora de casa esse fds) e aí posto se deu certinho. Mas acredito que conseguirei remontar sem problemas, pois vc explicou bem detalhadamente. Agradeço muito pela atenção e auxílio! Bom fds! Obrigada! :)
Responder

17/02/2020

Mary

Esqueci do where...
UPDATE minha_tabela SET
campo1=(case when campo1= ''$campo'' then NULL else campo1 end),
campo2=(case when campo2= ''$campo'' then NULL else campo2 end),
campo3=(case when campo3= ''$campo'' then NULL else campo3 end),
[até o campo16]
WHERE codigo_cliente = ''$codigocliente''



Bom dia, Emerson,
Fiz o teste com apenas 4 campos (para ver se dava certo) mas não funciona. Quando submeto o formulário de teste, simplesmente me retorna uma página em branco, tipo um erro de php. O código completo ficou montado exatamente assim:

session_cache_expire(30);
session_start();
include('verifica_login.php');
include_once("connect.php");

$code = filter_input(INPUT_POST, 'code', FILTER_SANITIZE_STRING);
$campo = filter_input(INPUT_POST, 'campo', FILTER_SANITIZE_STRING);

$result = "UPDATE minha_tabela SET
campo1=(case when campo1= "$campo" then NULL else campo1 end),
campo2=(case when campo2= "$campo" then NULL else campo2 end),
campo3=(case when campo3= "$campo" then NULL else campo3 end),
campo4=(case when campo4= "$campo" then NULL else campo4 end),
WHERE code = "$code"";

$resultado = mysqli_query($connect, $result);

if(mysqli_affected_rows($connect)) {
$_SESSION['msg'] = "<p style='color: lime; padding:0;'>Sucesso!</p><br/>";
header("Location: minha_pagina.php");
}else{
$_SESSION['msg'] = "<p style='color: red; padding:0;'>Erroe!</p>";
header("Location: minha_paginat.php");
}

Fiz algo errado? Algum detalhe no código?

Obrigada! :)
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar