Pergunta

Estou desenvolvendo uma aplicação PHP / MySQL que lida com vários usuários simultâneos. Eu estou pensando sobre a melhor abordagem a tomar quando se trata de bloqueio / aviso contra registros que estão sendo visualizados / editados.

O cenário é evitar dois usuários que visualizam o registro, um fazendo uma mudança, então os outros fazer o mesmo -. Com o potencial que uma mudança poderia substituir o anterior

Em versões mais recentes do WordPress eles usam algum método para detectar isso, mas não parece totalmente confiável -. Muitas vezes retornando falsos positivos, pelo menos na minha experiência

Eu assumo alguma forma de ajax deve estar no local para 'ping' a aplicação e deixá-lo saber o recorde ainda está sendo visualizados / editados (caso contrário, um usuário pode simplesmente fechar a janela do navegador, e depois como é que o know aplicação aquele).

Outra solução que eu podia ver é verificar a última vez atualizado quando um registro é enviado para atualização, para ver se nesse ínterim ele foi atualizado em outros lugares - e, então, oferecer ao usuário a opção de prosseguir ou descartar suas próprias mudanças.

Talvez eu estou latindo para a árvore errada em termos de uma solução - o que são povos experiências de aplicação do presente (o que deve ser uma bastante comum) exigência

Foi útil?

Solução

Eu faria isso: Armazenar o tempo da última modificação na forma de edição. Compare desta vez sobre a apresentação com o tempo armazenado no banco de dados. Se eles são os mesmos, bloquear a tabela, atualizar os dados (juntamente com a data de modificação) e desbloquear a tabela. Se os tempos são diferentes, notificar o usuário sobre isso e pedir para a próxima etapa.

Outras dicas

Boa ideia com a comparação timestamp. É barato para implementar, e é uma operação barata para executar em produção. Você apenas tem que escrever a lógica para enviar de volta para o usuário a mensagem de status que sua escrita / atualização não ocorreu porque alguém vencê-los a ele.

Talvez considere armazenar o nome de usuário em cada atualização em um campo chamado algo como 'LastUpdateBy', e voltar que volta para o usuário que teve sua atualização antecipou-se. Basta um pouco de sutileza para o usuário. Nice, no sentido corporativo, talvez não em um ambiente onde ele pode não ser apropriada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top