Como impedir que o sistema insira vários registros por clicar várias vezes?

Vamos supor que para inserir um registro um usuário deve clicar em um botão. O usuário clica várias vezes no botão (o cara está nervoso, hehe), mas o sistema deve inserir apenas uma vez. Como vcs costumam resolver este tipo de problema? Acredito que seja bem típico.

abraços!

Uma solução a grosso modo é desabilitar o botão qdo ele clicar pela primeira vez.

Normalmente, se coloca um código JavaScript na página mais ou menos parecido com o seguinte:

[code]
<!–
var submissionflag = false;

function checkSubmission()
{
   if (!submissionflag) {
       submissionflag= true;
       return true;
   } else {
       return false;
   }
}
//-->
</script>[/code]

E, no botão de submissão, você chama esse código com o atributo “onclick”. Veja exemplo:

<input type="submit" name="_save" class="button" value="Gravar" onclick="return checkSubmission();"/>

Quando o usuário clicar na segunda vez, ele não enviará mais o formulário. Você também pode desabilitar o botão também no seu JavaScript, como sugerido pelo Vinny.

Abraços,
Rodrigo

Caraca rcastro, adorei sua solução, é exatamente isso que eu queria, e ridiculamente simples! :smiley:

Vou testar isso daí daqui a poko!

abração pessoal, mais uma vez valeu pela ajuda de vcs!

Peço desculpas pela demora pessoal. Queria avisar que usado esta solução e esta funcionando maravilhosamente bem!

abraços a todos!

so uma pergunta:

se o mesmo registro esta sendo inserido varias vezes, não deveria estourar alguma coisa tipo uma PK? :roll:
lembre-se que codigo js roda no cliente e pode ser desabilitado.
acho que tratar isso no servidor tmb seria uma boa.

[]'s

Eu concordo com o que você diz, mas tem alguns casos desse meu sistema que não há uma nenhuma restrição do banco que impeça a inserção. E mesmo na maioria dos casos, onde o banco impede a inserção, fazendo o que o rcastro sugeriu evitamos que o servidor receba mais solicitações e consequentemente tenha que processar mais coisas.

mas a soluçao em js não impede de eu entrar na pagina de novo, digitar os mesmo valores e inserir.
como falei, validar em js tmb é importante, ma não confie 100% nisso. validar no servidor sempre vai ser mais seguro e confiavel.
se não quer validar no bd, de uma procurada no conceito de token em aplicações web.

[]'s

Concordo plenamente com que o jgbt falou, ao inserir faça um select na tabela, por exemplo um cpf seria uma PK pois é unico, se o cpf já existir não cadastra de novo.