Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Estou com um problema que é o seguinte:
O usuário utiliza a operação de gravar em uma pagina Web. Porém ao re-carregar a página ou quando clica no botão Voltar do navegador os dados recem gravados são gravados novamente criando 2 ou mais registros na tabela.
Como posso impedir que um refresh regrave informações já gravadas ?
Desde já obrigado!
Ja tíve um problema semelhante.
Na hora de adicionar um novo registro,veja a hora/data que o ultimo registro foi adicionado.
se a diferença for de uns 5 segundos e os dados tiverem iguais,exclua um deles.
Faz o seguinte amigo, no momento do click no button você mandou pro bd não, já aproveita e redireciona o bichão.
ex:
$user->inserir($usuario); //inserir é a função que tem o insert no db
header("Location: ".$url);
Já era, acho.Pessoal,
Consegui resolver o problema e pra agregar conhecimento deixarei aqui como fiz, mas acredito que todas as sugestões funcionam.
protected void Page_Load(object sender, EventArgs e)
{
// Validação para impedir duplicação de dados no banco
if (!Page.IsPostBack)
{
Session["HouveRefresh"] = true;
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
// Validação para impedir duplicação de dados no banco
ViewState["HouveRefresh "] = Session["HouveRefresh "];
}
protected void btnCadastrar_Click(object sender, EventArgs e)
{
// Validação para impedir duplicação de dados no banco
if (Session["HouveRefresh "].ToString() == ViewState["HouveRefresh "].ToString())
{
Session["HouveRefresh "] = false;
Obrigado
Valew mesmo
Essa é uma questão complicada quando se trabalha com Web. O problema é que você está trabalhando por requisições, cada requisição vai realizar uma ação no servidor. A parte de tratar quando essa ação deve ou não ser executada e inteiramente da lógica do back-end, ou seja, você vai ter que adicionar uma lógica para identificar se aquele registro já existe na tabela e impedir a inserção.
Você pode fazer isso usando um simples select na chave primária ou em dados chave da linha.