Ir para conteúdo
Fórum Script Brasil
  • 0

Não atualizar coluna se for vazio


RicardoRP

Pergunta

Boas pessoal

seguinte, num sei se era aqui ou no PHP rs... mas vamos la

tenha uma tabela de usuários e claro, tem o campo "senha"

o usuário pode atualizar seus dados via form...

Nome

E-mail

Senha

Os dados atuais são exibidos no form quando o usuário entra na tela de edição menos a senha que esta em SHA1 no BD portanto não da para exibir descriptografada.

quando digitado uma nova senha ela é atualizada corretamente, mas quando o usuário atualizar o e-mail por exemplo sem querer atualizar sua senha é enviado ao BD o campo sha1 do "vazio"

como definir no php para que não seja enviado nenhum dado ao campo "senha" para que o mesmo continue com a senha atual caso o usuário não queira atualiza-la?

tentei com

if ($_POST['senha'] != ''){
            $senhanova = sha1($_POST['senha']);
        }else {
            $senhanova = NULL;  "tentei com "0", sem o else, com else vazio..."
        }

e no Update colocando senha = $senhanova...

mas tudo acima faz com que o BD atualize para "vazio" deixando senha em branco.

qual a maneira mais correta de acertar isso?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Boas pessoal

seguinte, num sei se era aqui ou no PHP rs... mas vamos la

tenha uma tabela de usuários e claro, tem o campo "senha"

o usuário pode atualizar seus dados via form...

Nome

E-mail

Senha

Os dados atuais são exibidos no form quando o usuário entra na tela de edição menos a senha que esta em SHA1 no BD portanto não da para exibir descriptografada.

quando digitado uma nova senha ela é atualizada corretamente, mas quando o usuário atualizar o e-mail por exemplo sem querer atualizar sua senha é enviado ao BD o campo sha1 do "vazio"

como definir no php para que não seja enviado nenhum dado ao campo "senha" para que o mesmo continue com a senha atual caso o usuário não queira atualiza-la?

...

qual a maneira mais correta de acertar isso?

Use Trigger de BEFORE UPDATE

exemplo:

DELIMITER $$;

DROP TRIGGER `seguranca`.`tbu_usuario`$$

CREATE TRIGGER `seguranca`.`tbu_usuario` BEFORE UPDATE on `seguranca`.`usuario`
FOR EACH ROW BEGIN
   IF NEW.senha = '' then
      SET NEW.SENHA = OLD.senha;
END$$

DELIMITER;$$

onde:

seguranca é o nome do meu banco de teste.

usuario é a minha tabela no banco seguranca

senha é o campo da tabela usuario

Link para o comentário
Compartilhar em outros sites

  • 0
DELIMITER $$;

DROP TRIGGER `seguranca`.`tbu_usuario`$$

CREATE TRIGGER `seguranca`.`tbu_usuario` BEFORE UPDATE on `seguranca`.`usuario`
FOR EACH ROW BEGIN
   IF NEW.senha = '' then
      SET NEW.SENHA = OLD.senha;
END$$

DELIMITER;$$

mas nesse caso como a trigger é direto pelo BD acaba não funcionando assim, porque quando envio o form com a senha 'vazio' ela é transformada em SHA1 no PHP antes do BD receber o campo 'vazio' e ai ele adiciona a senha como sha1 do 'vazio' no campo senha.

acho q deu pra entender não é?? rs

acho q teria de ter uma solução vinda do php não é?

tem ideias? :rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0
...

mas nesse caso como a trigger é direto pelo BD acaba não funcionando assim, porque quando envio o form com a senha 'vazio' ela é transformada em SHA1 no PHP antes do BD receber o campo 'vazio' e ai ele adiciona a senha como sha1 do 'vazio' no campo senha.

acho q deu pra entender não é?? rs

acho q teria de ter uma solução vinda do php não é?

tem ideias? :rolleyes:

Neste caso o lógico seria criar um teste na formação da string de atualização não gravando este campo se ele estiver vazio.

Para tal o campo deve ser NULL.

Como não conheço PHP vou transferir este tópico para lá.

Link para o comentário
Compartilhar em outros sites

  • 0

if (!empty($_POST['senha'])) {
$senhanova = sha1($_POST['senha']);
}

ele só ira resgatar o $_POST['senha'] caso ele seja preenchido.. se o usuario não digitar nada, não vai atualizar...

é o que eu uso aqui e funciona.. ve se vai ai e posta o resultado.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...