Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => -1
            [id] => 553079
            [titulo] => Solicitar senha ou captcha para excluir um registro
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-05-03 15:15:08
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 418027
            [status] => A
            [isExample] => 
            [NomeUsuario] => Jothaz
            [Apelido] => 
            [Foto] => 418027_20150313165406.jpg
            [Conteudo] => [quote][quote]Usuário reclama de tudo, até da mensagem de confirmação, eles falam que demora muito quando precisam excluir vários registros rs[/quote]

É bem assim mesmo William, Livia, eu usaria o captcha.[/quote]

Acho que vocês estão viajando, captcha não é para esta finalidade. Deve ser utilizada para garantir que quem esta enviando a solicitação é um humano e não uma máquina. Assim quando você vai fazer um inscrição no site, enviar um proposta ou qualquer solicitação ao digitar um captcha você garante que é um pessoa que faz a solicitação e não uma máquina. É usada principalmente para evitar ataques de negação de serviço.

Qualquer sistema seja complexo ou simples é feito para facilitar a vida do usuário e prover produtividade ao processo. Exigir captcha para excluir um registro não é prático e certamente o usuário irá reclamar. E se o usuário não usar o sistema a merda esta feita, não tem como obrigá-lo. Por incrível que pareça isto acontece muito. O analista sem o menor conhecimento criam um sistema com péssima usabilidade e simplesmente os usuários não usam. O segredo é justamente conquistar os usuários.

Não é possível criar sistema que fique de baba do usuário, se o usuário excluir um registro indevidamente ele que assuma a responsabilidade. Nenhum sistema do mundo é a prova de idiotices.

Claro que sempre é bom ficar atento as deleções em cacatas, pois ai sim pode-se fazer um grande merda na base, fora isto o processo deve ser simples.

Eu particularmente não uso exclusão física de registros, prefiro o conceito de exclusão lógica. Que seria criar um campo Ativo na tabela e marcá-lo como True ou False (quando excluir), criando o conceito de ativo e inativo. Assim você garante o histórico, pois um cliente pode já ter feito compras ou outras operações e garante a coesão da base, pois evita que se possa matar registros com intuito de burlar o sistema.

Não acho que um sistema que permita excluir um cliente seja seguro, se foi cadastrado algum dado errado é só alterar e se o cliente não vá ser usado é melhor inativá-lo.

Agora se quer mesmo permitir exclusão a dica é colocar uma mensagem clara "Quer mesmo excluir definitivamente este registro. Esta operação não poderá ser revertida e blablablabla". Nunca coloque o Ok como default e se possível abra um modal.

Só ressalto que a considerações acima são para que pretende se profissionalizar, criar aplicações robusta e para empresas de médio e grande porte. Se for somente hobby e criar aplicações amadoras, para micro empresas (apesar de conhecer micro empresas que prezam pela qualidade) podem desconsiderá-las. ) )

Solicitar senha ou captcha para excluir um registro

PHP
Livia Sampaio
   - 03 mai 2016

Boa tarde. Me ajudem. Tenho um cadastro de clientes, dei uma melhorada com um js, assim fazendo uma pergunta antes de excluir um registro, mas mesmo assim ainda por engano a pessoa pode dar o ok. Fica um pouco sem segurança.
Se alguém tiver uma alternativa que fosse mais segura. Seria melhor que antes ele solicitasse a senha do usuário para confirmar a exclusão, um CAPTCHA também poderia ser.
No momento ele tem um js assim.
<script language="JavaScript">
function pergunta()
{
if (confirm('Você tem certeza que deseja realmente excluir este cliente do sistema?')) { return true }
else { return false }
}
</script>

E no input assim:
<td width="5%" align="center"><a href="?Excluir=ok&id=<?=$coluna[id_cliente]?>" onClick="return pergunta();"><img src="imagens/deletar.png" alt="Excluir" border="0"></a></td>

Está bem simples e funciona, porém com pouca segurança para um descuido.

William (devwilliam)
   - 03 mai 2016

Olha Livia, só ser for um sistema com muitos privilégios mesmo para usar esse tipo de prática, porque se eu pedir para um usuário digitar um captcha ou senha quando for excluir um registro no ERP da empresa serei pendurado vivo no lado de fora da janela até o meio dia rsrsrsrsr

Usuário reclama de tudo, até da mensagem de confirmação, eles falam que demora muito quando precisam excluir vários registros rs

Livia Sampaio
   - 03 mai 2016

Não é ERP, é um cadastro de clientes normal, mas por vezes o usuário tem de excluir alguns registros, e acontece as vezes de errar e apagar um registro que não era para apagar.

Marlon Gera
   - 03 mai 2016

William, estou com uma duvida parecida, tem como fazer a solicitação da senha somente a primeira vez e dps não necessitar mais caso precise apagar varios itens?

Grato.

William (devwilliam)
   - 03 mai 2016

Olha sempre tem um jeito, umas das várias maneiras seria você solicitar a senha uma vez e gravar em uma session com tempo previsto para expiração.

A partir disso sempre que for solicitada uma exclusão seria verificado essa session, caso vazia solicita a senha novamente senão excluí direto.

Mas como falei isso pode ser feito de diversas formas.

Marcio Araujo
   - 03 mai 2016


Citação:
Usuário reclama de tudo, até da mensagem de confirmação, eles falam que demora muito quando precisam excluir vários registros rs


É bem assim mesmo William, Livia, eu usaria o captcha.

Livia Sampaio
   - 03 mai 2016

Pra mim está bom sendo a senha ou captcha. Mas por favor, não desviem o tópico.

William (devwilliam)
   - 03 mai 2016


Citação:
Olha sempre tem um jeito, umas das várias maneiras seria você solicitar a senha uma vez e gravar em uma session com tempo previsto para expiração.

A partir disso sempre que for solicitada uma exclusão seria verificado essa session, caso vazia solicita a senha novamente senão excluí direto.

Mas como falei isso pode ser feito de diversas formas.

Marlon Gera
   - 03 mai 2016

Espero que ajude mais esta ai uma base...

#Código

<?php
	if(isset($_POST['submit'])){
		echo "<div style='width: 400px; height: 400px; z-index: 9999;'>";
		echo "<form method='post'>";
		echo "<input type='text' name='confirmasenha'>";
		echo "<input type='submit' name='submitconfirm' value='Excluir'>";
		echo "</form>";
		echo "</div>";
	}
	if(isset($_POST['submitconfirm'])){
		$sql_compara_senha = 
		$query_compara_senha = $PDO->prepare($sql_compara_senha);
		$query_compara_senha->execute();
		if($sql_compara_senha === $_POST['confirmasenha'){
		$sql_delete =
		$query = $PDO->prepare($sql_delete);
		$query->execute();
		}
	}
?>
<form method="post">
<input type="text" name="dadodb" disabled value="dados">
<input type="submit" name="submit" value="deletar">
</form>

Marlon Gera
   - 03 mai 2016


Citação:
Olha sempre tem um jeito, umas das várias maneiras seria você solicitar a senha uma vez e gravar em uma session com tempo previsto para expiração.

A partir disso sempre que for solicitada uma exclusão seria verificado essa session, caso vazia solicita a senha novamente senão excluí direto.

Mas como falei isso pode ser feito de diversas formas.


Wiliam desculpa postar aqui mais teria como você me dar uma ajuda nesto topico?

http://www.devmedia.com.br/forum/form-dentro-de-uma-pagina-com-requisicao-load/553014

Jothaz
   - 03 mai 2016


Citação:

Citação:
Usuário reclama de tudo, até da mensagem de confirmação, eles falam que demora muito quando precisam excluir vários registros rs


É bem assim mesmo William, Livia, eu usaria o captcha.


Acho que vocês estão viajando, captcha não é para esta finalidade. Deve ser utilizada para garantir que quem esta enviando a solicitação é um humano e não uma máquina. Assim quando você vai fazer um inscrição no site, enviar um proposta ou qualquer solicitação ao digitar um captcha você garante que é um pessoa que faz a solicitação e não uma máquina. É usada principalmente para evitar ataques de negação de serviço.

Qualquer sistema seja complexo ou simples é feito para facilitar a vida do usuário e prover produtividade ao processo. Exigir captcha para excluir um registro não é prático e certamente o usuário irá reclamar. E se o usuário não usar o sistema a merda esta feita, não tem como obrigá-lo. Por incrível que pareça isto acontece muito. O analista sem o menor conhecimento criam um sistema com péssima usabilidade e simplesmente os usuários não usam. O segredo é justamente conquistar os usuários.

Não é possível criar sistema que fique de baba do usuário, se o usuário excluir um registro indevidamente ele que assuma a responsabilidade. Nenhum sistema do mundo é a prova de idiotices.

Claro que sempre é bom ficar atento as deleções em cacatas, pois ai sim pode-se fazer um grande merda na base, fora isto o processo deve ser simples.

Eu particularmente não uso exclusão física de registros, prefiro o conceito de exclusão lógica. Que seria criar um campo Ativo na tabela e marcá-lo como True ou False (quando excluir), criando o conceito de ativo e inativo. Assim você garante o histórico, pois um cliente pode já ter feito compras ou outras operações e garante a coesão da base, pois evita que se possa matar registros com intuito de burlar o sistema.

Não acho que um sistema que permita excluir um cliente seja seguro, se foi cadastrado algum dado errado é só alterar e se o cliente não vá ser usado é melhor inativá-lo.

Agora se quer mesmo permitir exclusão a dica é colocar uma mensagem clara "Quer mesmo excluir definitivamente este registro. Esta operação não poderá ser revertida e blablablabla". Nunca coloque o Ok como default e se possível abra um modal.

Só ressalto que a considerações acima são para que pretende se profissionalizar, criar aplicações robusta e para empresas de médio e grande porte. Se for somente hobby e criar aplicações amadoras, para micro empresas (apesar de conhecer micro empresas que prezam pela qualidade) podem desconsiderá-las.

William (devwilliam)
   - 03 mai 2016

Jothaz minha resposta foi embasada na dúvida da colega, já presenciei requisitos dos mais estranhos possíveis como esse do captcha, mas minha opinião deixei bem clara sobre esse tipo e prática.

Jothaz
   - 03 mai 2016


Citação:
Jothaz minha resposta foi embasada na dúvida da colega, já presenciei requisitos dos mais estranhos possíveis como esse do captcha, mas minha opinião deixei bem clara sobre esse tipo e prática.


William (Devwilliam) você é um dos participantes do fórum que mais admiro pela experiência e conhecimento, basta ver seu blog, nem sou fã de PHP, mas sempre dou uma passada por lá para ficar atualizado.

Sua resposta foi assertiva, como sempre e minhas considerações tiveram como intuito completar o que foi exposto.

Concordo que requisito são "vivos", mutáveis e podem contemplar uma gama de situações. Mas ai justamente cabe a quem vai projetar/desenvolver refiná-los.

Na minha humilde opinião, mais que codificar precisamos mostrar para os iniciantes como pensar, se portar diante do cliente, acima de tudo desenvolver um senso crítico e utilizar boa práticas.

Trabalhei em centenas de projetos dos mais variados possíveis e já tive que refazer muitos projetos simplesmente por motivos como você citou: demora, burocracia ou simplesmente que implementa não teve conhecimento ou procurou entender o processo.

Só para ilustrar já algum tempo tempo evitado retornar um número demasiado de mensagens se necessidade, principalmente mensagens de sucesso. Só exibo se for necessário. Incluiu um registro e deu tudo certo, não acho que é necessário exibir uma mensagem avisando que foi incluído, só atrasa. Agora se der erro ai sim a mensagem faz sentido. E decidi isto após várias reclamações de usuários que no dia a dia e na correria não tem muito tempo.

Mas quero ressaltar que o não tenho a pretensão de é cagar regras, pois cabe ao dono do projeto decidir o que usar.

William (devwilliam)
   - 03 mai 2016

Obrigado pelas palavras Jothaz, sem problemas.