Jump to content
Fórum Script Brasil
  • 0

Não atualizar coluna se for vazio


RicardoRP

Question

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 to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...