como bloquear mais de um click no mesmo botao

5,264 views
Skip to first unread message

Edvaldo

unread,
Jun 8, 2009, 10:35:08 AM6/8/09
to LISTA PHP
olá pessoal...

como faço para bloquear mais de um click no mesmo botao.
por exemplo:

o cidadão clica no botao cadastrar(submit), e com a lerdeza da net do
mesmo ou por razoes obscuras ele "senta o dedo" no botao e me abre
trezentos milhoes de registros no banco.

alguem tem alguma ideia?

Applicata // Cabral

unread,
Jun 8, 2009, 10:37:57 AM6/8/09
to list...@googlegroups.com

tem um evento do form, onsubmit....nele vc coloca....
document.getElementById(idbotao).disabled = true;

Renato de Freitas Freire

unread,
Jun 8, 2009, 10:40:16 AM6/8/09
to list...@googlegroups.com
<input type='submit' value='Enviar' onclick='this.disabled=true' />

ou

<form method='post' action='#' onsubmit='document.getElementById("enviar").disabled=true'>
<input type='submit' value='Enviar' id='enviar' />
</form>
 
só não sei se isso altera alguma coisa no post ou se funciona perfeitamente...
não testei...

eu tinha um formulario que bloqueava o botao, mas lembro que eu tinha que fazer uma funcao javascript que tinha um delay e nessa funcao eu desabilitava o botao depois de dar o submit...

algo assim...
vou ver se acho ele aqui...

--
Renato de Freitas Freire
ren...@morfer.org


2009/6/8 Edvaldo <edv...@aerorodrigues.com>

Felipe Nascimento de Moura

unread,
Jun 8, 2009, 10:43:55 AM6/8/09
to list...@googlegroups.com
Tche, vai ter q usar um JS, eu acho...
coloca um div "modal", tipo, no onclick do botao, ou apos validar o formulario, manda aparecer um div na frente da tela, com uma mensagem de carregando, por exemplo... ai, no final do load, manda o div desaparecer (varia caso esteja enviando para um frame oculto, outra janela, etc...)
se quiser tentar isto, avisa ai, q t ajudo.

Abração.



2009/6/8 Renato de Freitas Freire <rena...@gmail.com>



--
Felipe N. de Moura
Desenvolvimento Web

http://thewebmind.org
fel...@thewebmind.org
---------------------------------
Fazendo da web um lugar melhor pra se viver.
Making the web a better place to live

Renato Mendes

unread,
Jun 8, 2009, 11:22:48 AM6/8/09
to LISTA PHP
HUrggggggggggggg

Esta lista é php ou javascript?????

pois então....

ai faz assim q é mais seguro,

pega o ip do "usuario" com

<?php
$ip = getenv("REMOTE_ADDR"); //linha que captura o ip do usuario.
echo "seu ip é: $ip";
?>

depois informa no form e obviamente vc cria um campo em tabela de
cadastro para receber ip
depois é mamão com açucar só vc verificar c aquele ip ja esta
cadastrado no banco caso sim vc não possibilita a inserção do novo
cadastro.

b le?

Abraço

On 8 jun, 11:43, Felipe Nascimento de Moura <felipenmo...@gmail.com>
wrote:
> Tche, vai ter q usar um JS, eu acho...
> coloca um div "modal", tipo, no onclick do botao, ou apos validar o
> formulario, manda aparecer um div na frente da tela, com uma mensagem de
> carregando, por exemplo... ai, no final do load, manda o div desaparecer
> (varia caso esteja enviando para um frame oculto, outra janela, etc...)
> se quiser tentar isto, avisa ai, q t ajudo.
>
> Abração.
>
> 2009/6/8 Renato de Freitas Freire <renat...@gmail.com>
>
>
>
> > <input type='submit' value='Enviar' onclick='this.disabled=true' />
>
> > ou
>
> > <form method='post' action='#'
> > onsubmit='document.getElementById("enviar").disabled=true'>
> > <input type='submit' value='Enviar' id='enviar' />
> > </form>
>
> > só não sei se isso altera alguma coisa no post ou se funciona
> > perfeitamente...
> > não testei...
>
> > eu tinha um formulario que bloqueava o botao, mas lembro que eu tinha que
> > fazer uma funcao javascript que tinha um delay e nessa funcao eu
> > desabilitava o botao depois de dar o submit...
>
> > algo assim...
> > vou ver se acho ele aqui...
>
> > --
> > Renato de Freitas Freire
> > ren...@morfer.org
>
> > 2009/6/8 Edvaldo <edva...@aerorodrigues.com>

Renato de Freitas Freire

unread,
Jun 8, 2009, 11:33:01 AM6/8/09
to list...@googlegroups.com
eh claro que isso nao conta com o uso de um proxy anonimo...
onde cada requisicao vem de um ip diferente...

mas pra bloquear a criacao de varios registros no banco, eh soh criar um campo unique, e sempre verificar se esse campo ja tem o valor cadastrado, por ex. cpf.

tambem acho que a solucao seria mais "elegante" em php, mas ele pediu ajuda para bloquear o botao.... hehe


--
Renato de Freitas Freire
ren...@morfer.org


2009/6/8 Renato Mendes <renat...@gmail.com>

Junior Grossi

unread,
Jun 8, 2009, 11:44:51 AM6/8/09
to list...@googlegroups.com
nao é mais facil vc usar captcha nao?

Junior Grossi
juni...@gmail.com



2009/6/8 Renato de Freitas Freire <rena...@gmail.com>:

Gustavo Almeida

unread,
Jun 8, 2009, 11:45:20 AM6/8/09
to list...@googlegroups.com
Gente...
 
O cara simplesmente quer evitar que o usuário clique 2 vezes no botão (coisa que acontece muitas vezes).
 
Só isso...
 
Um simples " .disable" como já foi dito deve funcionar pra ele...

Edvaldo

unread,
Jun 8, 2009, 12:47:20 PM6/8/09
to LISTA PHP
como diria o velho deitado chines... ferrou-se

obrigado pelas respostas, mais...

1- nao posso fazer no submit pois eu valido os campos com o php e hora
que ele volta o botao fica como inativo dai...
2- nao posso pegar ip pois aqui e por proxys e mascara tudo...

vou perguntar numa lista de javascript, eu axo que la deve ter alguma
solution, mais se algum de voces tiverem alguma ideia ehehe nao se
avexem nao ehehehe

On 8 jun, 12:45, "Gustavo Almeida" <gust...@gmasoftwares.com.br>
wrote:
> Gente...
>
> O cara simplesmente quer evitar que o usuário clique 2 vezes no botão (coisa que acontece muitas vezes).
>
> Só isso...
>
> Um simples " .disable" como já foi dito deve funcionar pra ele...
>
>   ----- Original Message -----
>   From: Junior Grossi
>   To: list...@googlegroups.com
>   Sent: Monday, June 08, 2009 12:44 PM
>   Subject: [ PHP - Google ] Re: como bloquear mais de um click no mesmo botao
>
>   nao é mais facil vc usar captcha nao?
>
>   Junior Grossi
>   juninh...@gmail.com
>
>   2009/6/8 Renato de Freitas Freire <renat...@gmail.com>:
>   > eh claro que isso nao conta com o uso de um proxy anonimo...
>   > onde cada requisicao vem de um ip diferente...
>   > mas pra bloquear a criacao de varios registros no banco, eh soh criar um
>   > campo unique, e sempre verificar se esse campo ja tem o valor cadastrado,
>   > por ex. cpf.
>   > tambem acho que a solucao seria mais "elegante" em php, mas ele pediu ajuda
>   > para bloquear o botao.... hehe
>
>   > --
>   > Renato de Freitas Freire
>   > ren...@morfer.org
>
>   > 2009/6/8 Renato Mendes <renatoc...@gmail.com>

Renato de Freitas Freire

unread,
Jun 8, 2009, 12:50:32 PM6/8/09
to list...@googlegroups.com
é só colocar um disabled=false quando retornar no formulario, caso algum dado seja invalido...

--
Renato de Freitas Freire
ren...@morfer.org


2009/6/8 Edvaldo <edv...@aerorodrigues.com>

Felipe Nascimento de Moura

unread,
Jun 8, 2009, 1:26:43 PM6/8/09
to list...@googlegroups.com
Teu form ta indo pra um iframe oculto?
Tipo, se tiver indo pra mesma tela, vai recarregar, se estiver indo em um iframe oculto, tu pode usar um parent.algo pra, tanto reabilitar o botao, quanto fazer uma mensagem de carregando desaparecer, é mto simples, rápido, e processado no cliente.
NUNCA menosprese o poder do JS...eu validaria o form no cliente, com js, antes de enviar para o PHP(que validaria sim, novamente), pq, é MUITO melhor q tu deixe o processamento disso distribuido entre clientes, que todos os clientes forçarem isto a rodar no server a cada requisição...as requisições q chegarem com problema pro server resolver, serão minimas.
Algo como um div transparente e a mensagem de loading, ou mesmo, desabilitar o botao e mudar o seu texto para enviando, já sao coisas q o usuario adora, e vai t dar o poder sobre essa situação...pode tambem, mudar o tipo do botao, de submit, para button, e qndo retornar, de button pra submit.

Abraço.




2009/6/8 Renato de Freitas Freire <rena...@gmail.com>

Renato Mendes

unread,
Jun 8, 2009, 3:08:10 PM6/8/09
to LISTA PHP
Cara, muito simples....

Mude a validação de seus campos já q num tem jeito utilize javascript
mesmo assim:

function valida(form)
{

if(form.nome.value == '')

{
alert('Preencha o campo Nome!');
return false;

}
};

e chame o scrript assim:

<form onsubmit="return valida(this)">

blas

</form>

resovido?

rsrs

On 8 jun, 14:26, Felipe Nascimento de Moura <felipenmo...@gmail.com>
wrote:
> Teu form ta indo pra um iframe oculto?
> Tipo, se tiver indo pra mesma tela, vai recarregar, se estiver indo em um
> iframe oculto, tu pode usar um parent.algo pra, tanto reabilitar o botao,
> quanto fazer uma mensagem de carregando desaparecer, é mto simples, rápido,
> e processado no cliente.
> NUNCA menosprese o poder do JS...eu validaria o form no cliente, com js,
> antes de enviar para o PHP(que validaria sim, novamente), pq, é MUITO melhor
> q tu deixe o processamento disso distribuido entre clientes, que todos os
> clientes forçarem isto a rodar no server a cada requisição...as requisições
> q chegarem com problema pro server resolver, serão minimas.
> Algo como um div transparente e a mensagem de loading, ou mesmo, desabilitar
> o botao e mudar o seu texto para enviando, já sao coisas q o usuario adora,
> e vai t dar o poder sobre essa situação...pode tambem, mudar o tipo do
> botao, de submit, para button, e qndo retornar, de button pra submit.
>
> Abraço.
>
> 2009/6/8 Renato de Freitas Freire <renat...@gmail.com>
>
>
>
> > é só colocar um disabled=false quando retornar no formulario, caso algum
> > dado seja invalido...
>
> > --
> > Renato de Freitas Freire
> > ren...@morfer.org
>
> > 2009/6/8 Edvaldo <edva...@aerorodrigues.com>

Felipe Nascimento de Moura

unread,
Jun 8, 2009, 3:11:00 PM6/8/09
to list...@googlegroups.com
isto é uma alternativa, mas, não iria impedir o cara de clicar varias vezes seguidas, mas logo apos esta validação, tu poderia desativar ou ativar o botao, por exemplo.
Eu so alteraria esta linha
if(form.nome.value == '')
para isto:
if(form.nome.value.replace(/ /g, '') == '')

usando este replace, tu vai evitar que alguem segure o espaço, por exemplo, e submeta
;)

Abração.


2009/6/8 Renato Mendes <renat...@gmail.com>

Paulo Henrique Bueno Lopes

unread,
Jun 8, 2009, 3:23:03 PM6/8/09
to list...@googlegroups.com
É simples... no onLoad da página, de um enable no botão!! =D hehehehe
Daí quando o cara voltar, o botao volta habilitado... daí soh desabilita qdo ele clicar! =D

Finish Him!!! =D

Atenciosamente,

Paulo Henrique Bueno Lopes
Analista de Sistemas
Ábaco Tecnologia da Informação Ltda
SEDUC-Secretaria de Estado de Educação de Mato Grosso
COT-Coordenadoria de Tecnologia da Informação
(65) 3613-6394

-----Mensagem original-----
De: list...@googlegroups.com [mailto:list...@googlegroups.com] Em nome de Edvaldo
Enviada em: segunda-feira, 8 de junho de 2009 12:47
Para: LISTA PHP
Assunto: [ PHP - Google ] Re: como bloquear mais de um click no mesmo botao

Marcus Brasizza

unread,
Jun 8, 2009, 10:39:53 AM6/8/09
to list...@googlegroups.com
facil...
em jquery assim

$("#Seubotao").click(function(){
$(this).attr('disabled','disabled');
$(this).val("Aguarde");
return true;
})

2009/6/8 Edvaldo <edv...@aerorodrigues.com>



--
Blog Programaçao Especialista
http://my.opera.com/artigos
-->ZEND PHP Certified.
-->UML BORLAND Cerfified.
-->Piadista Certified.


Anderson Aguiar

unread,
Jun 8, 2009, 10:48:49 AM6/8/09
to list...@googlegroups.com
Pra que DIV? oO

Desabilita o botão usando a propriedade citada acima e coloque um texto no botão de "Enviando..."

----------------------------------------
Att Anderson Aguiar
E-mail: revs...@gmail.com
Twitter: http://twitter.com/andersonaguiar



2009/6/8 Felipe Nascimento de Moura <felipe...@gmail.com>

Marcus Brasizza

unread,
Jun 8, 2009, 11:28:41 AM6/8/09
to list...@googlegroups.com
pra q isso brother... nao precisa....
tanto PHP ou javascript .. NESSE caso o melhor jeito e javascript sem ironizar tambem ne...
tem COISAS e COISAS, nesse caso javascript e o melhor jeito!

2009/6/8 Renato Mendes <renat...@gmail.com>

Anderson Aguiar

unread,
Jun 8, 2009, 12:24:21 PM6/8/09
to list...@googlegroups.com
É é, galera ta complicando algo tão simples... leiam o que ele quer fazer antes de postar...

----------------------------------------
Att Anderson Aguiar
E-mail: revs...@gmail.com
Twitter: http://twitter.com/andersonaguiar



2009/6/8 Gustavo Almeida <gus...@gmasoftwares.com.br>

Leonardo Metrô-DF

unread,
Jun 9, 2009, 7:54:14 AM6/9/09
to LISTA PHP
Eu uso uma solução com seeds:
Quando crio o form, crio um input hidden assim:

$seed = funcs::gerar_seed(); //apenas gera um numero aleatório com uns
20 caracteres ( pesquise por rand() )

//jogo no form:
echo "<input type=hidden name='seed' value='$seed'>";

//jogo na session:
$_SESSION['seed'] = $seed;


Aí no PHP que vai processar você verifica se as seeds sao iguais, e se
forem, destroi a seed e joga no DB:

if ( $_POST['seed'] == $_SESSION['seed'] )
{
unset( $_SESSION['seed'] );

//joga no DB
$sql = 'INSERT INTO ...';
// ...
echo 'Gravado com sucesso!';

}
else
{
echo 'Este comando ja foi processado ou nao foi enviado por um
formulario valido';
}

Funciona perfeitamente tanto para adicionar quanto para alterar.

[]s



On 8 jun, 13:24, Anderson Aguiar <revsof...@gmail.com> wrote:
> É é, galera ta complicando algo tão simples... leiam o que ele quer fazer
> antes de postar...
> ----------------------------------------
> Att Anderson Aguiar
> E-mail: revsof...@gmail.com
> Twitter:http://twitter.com/andersonaguiar
>
> 2009/6/8 Gustavo Almeida <gust...@gmasoftwares.com.br>
>
> >  Gente...
>
> > O cara simplesmente quer evitar que o usuário clique 2 vezes no botão
> > (coisa que acontece muitas vezes).
>
> > Só isso...
>
> > Um simples " .disable" como já foi dito deve funcionar pra ele...
>
> > ----- Original Message -----
> > *From:* Junior Grossi <juninh...@gmail.com>
> > *To:* list...@googlegroups.com
> > *Sent:* Monday, June 08, 2009 12:44 PM
> > *Subject:* [ PHP - Google ] Re: como bloquear mais de um click no mesmo
> > botao
>
> > nao é mais facil vc usar captcha nao?
>
> > Junior Grossi
> > juninh...@gmail.com
>
> > 2009/6/8 Renato de Freitas Freire <renat...@gmail.com>:
> > > eh claro que isso nao conta com o uso de um proxy anonimo...
> > > onde cada requisicao vem de um ip diferente...
> > > mas pra bloquear a criacao de varios registros no banco, eh soh criar um
> > > campo unique, e sempre verificar se esse campo ja tem o valor cadastrado,
> > > por ex. cpf.
> > > tambem acho que a solucao seria mais "elegante" em php, mas ele pediu
> > ajuda
> > > para bloquear o botao.... hehe
>
> > > --
> > > Renato de Freitas Freire
> > > ren...@morfer.org
>
> > > 2009/6/8 Renato Mendes <renatoc...@gmail.com>

Marcus Brasizza

unread,
Jun 9, 2009, 2:04:05 PM6/9/09
to list...@googlegroups.com
facil...
em jquery assim

$("#Seubotao").click(function(
){
$(this).attr('disabled','disabled');
$(this).val("Aguarde");
return true;
})




2009/6/9 Leonardo Metrô-DF <leo...@gmail.com>

Jean

unread,
Jun 10, 2009, 11:24:30 PM6/10/09
to list...@googlegroups.com
QUANTA COMPLICACAO para fazer algo simplissimo
fora q em jquery vc pode usar a funcao one() em vez do click()

2009/6/8 Marcus Brasizza <mvbdesenv...@gmail.com>:
--
[]´s Jean a.k.a Suissa

Tecnólogo em Análise de Sistemas - UTF-PR
131

www.twitter.com/suissacorp

Eliane

unread,
Jun 10, 2009, 11:29:34 PM6/10/09
to list...@googlegroups.com
Pq vcs sempre tem que enfiar uma crítica ao código dos outros antes de apresentar uma solução alternativa?
É aquela que vocês acham certa, mas não tem programação errada se o negócio funciona, tem a programação "no padrão" e a fora dele.

Pronto Bruno, quiser pode me dar Ban, eu mereço!

Mas esse deveria ser um OFF-TOPIC pq a lista é PHP e tão discutindo javascript e jquery.

#beijosmetwitta ;)
@garotageek

Jean escreveu:

Mário Júnior

unread,
Jun 10, 2009, 11:48:00 PM6/10/09
to list...@googlegroups.com
caramba... ninguem pensou em usar um form.(id-button).disable=true ???
Tem q usar jQuery pra uma coisa simples assim!?!?!?

Isso me leva a crer na teoria de um amigo, que diz q muita gente não sabem programar sem um framework/lib/tools ... nesse caso, o cara não programa javascript, programa "jQuery" ... hehehe

Lembro uma vez q falei pra um colega criar um serlvet java (puro mesmo, extendendo diretamente de HttpServlet) e o cara não sabia.... ele queria usar springMVC só pra poder usar um MultiActionController pq era a única forma q ele conhecia... :S




2009/6/11 Eliane <garot...@gmail.com>




--
Mário Júnior
Programador Java / Adobe Flex
http://blog.mariojunior.com

Jean

unread,
Jun 11, 2009, 12:38:45 AM6/11/09
to list...@googlegroups.com
mas seria burrice ele tentar fazer algo que deve ser feito no layout em php neh?
uma coisa eh uam coisa outra coisa eh outra coisa

2009/6/11 Eliane <garot...@gmail.com>:

Eliane

unread,
Jun 11, 2009, 2:18:58 AM6/11/09
to list...@googlegroups.com
use vírgulas.

Jean escreveu:

Joseilton Costa Bruce

unread,
Jun 11, 2009, 6:26:54 PM6/11/09
to list...@googlegroups.com
Dá para  fazer junto com banco de dados ou uma forma de armazena dados.
Basta vc criar um ID único para a pagina e envia-lo junto com os dados ai quem recebe os dados verifica se o ID já foi utilizado e no caso de envio duplo ocorreria a identificação deste ID como já utilizado e assim não processa as demais requisição, apenas a primeira.
Vc armazenaria este ID num Banco para fazer a verificação, e depois limpar os dados apos algum tempo assim sua tabela sempre estaria com poucos dados. Mesmo pq é apenas validar um envio único.
É interessante esta forma pois independe do usuário está ou não com o JavaScript ativado. Esta forma garante 100% o uso do primeiro envio de dados e a rejeição dos demais.

2009/6/11 Eliane <garot...@gmail.com>

Rafael Sirotheau

unread,
Jun 12, 2009, 2:32:28 PM6/12/09
to list...@googlegroups.com
em JS simples,

insira -> onClick="this.value='Aguarde';this.disabled=true;" no input do botao

2009/6/9 Marcus Brasizza <mvbdesenv...@gmail.com>

Felipe Nascimento de Moura

unread,
Jun 12, 2009, 2:57:24 PM6/12/09
to list...@googlegroups.com
Acho que a essa altura, ele já resolveu o problema... é bem simples, com varias boas e validas alternativas, as quais o pessoal elucidou bem, aqui.



2009/6/12 Rafael Sirotheau <rsiro...@gmail.com>
Reply all
Reply to author
Forward
0 new messages