Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diogo Libana

Registro recém inserido pode SUMIR?

Recommended Posts

Bom dia,

 

Preciso de ajuda em uma questão. Vejam o código:

 

//Gravo a carta na tabela
	$erro = retorna_valor("INSERT INTO cartas (id_jogo, id_mesa, carta, equipe, ordem) VALUES ('$id_jogo', '$mesa', '$carta', '$equipe', '$posicao' )");	
	//echo "<script>alert('algum erro ao tentar adicionar a carta? $erro')</script>";
//vefifico se a carta foi gravada com sucesso	
	$verifica = retorna_valor("SELECT carta FROM cartas WHERE equipe = '$equipe' AND id_mesa = '$mesa' AND id_jogo = '$id_jogo' AND carta = '$carta'");
	if($verifica == $carta){
		//executo funcao que valida se a carta é válida, essa função retorna "invalido" ou "valido"
		$regras = valida_carta($equipe, $id_jogo, $mesa);		
		if($regras == "invalido"){
			retorna_valor("DELETE FROM cartas WHERE id_mesa = '$mesa' AND equipe = '$equipe' AND carta = '$carta'");	
			echo "<script>alert('Jogo invalido...')</script>";	
		}elseif($regras == "valido"){
			retorna_valor("DELETE FROM mao_jogador WHERE id_mesa = '$mesa' AND player = '$jogador' AND carta = '$carta'");
		}
	}

A idéia é bem simples:

- Gravo a carta,

- Verifico se foi gravada,

- Verifico se é Válida,

- Se for inválida deleto a carta que acabei de gravar

- Se for válida deleto a carta que estava na mão do jogador para que ela exista apenas na tabela cartas.

 

 

Funciona 90% do tempo perfeitamente, porém, começou a acontecer algo estranho. A carta é gravada, verifica, validada sem problema nenhum, é deletada da mão do jogador, porém, ao final do script a carta "desaparece" do banco de dados, sem a mensagem de "inválida" porque ele nem chega a entrar na rotina de "deleção" da carta, eu já comentei a linha "DELETE FROM cartas WHERE"... E mesmo não havendo função para deletar a carta, ela é gravada, validada e some...

 

Isso não acontece 100% das vezes, acontece quase "raramente", no entanto compromete completamente o sistema essa possibilidade.
Caso alguém saiba alguma coisa que possa estar ocasionando isso, ficaria muito agradecido em ouvir sugestões... Até pensei ser uma instabilidade do servidor MSQL que por alguma razão está dando um "server back" ou sei lá... Estou meio sem idéias pois isso só acontece nesse script de um sistema que é bastante grande e acessa constantemente o banco de dados sem erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo que seja apenas para indicar uma direção, toda ajuda será bem vinda. Não sei se foco na documentação do PHP considerando que possa ser um erro de scrip ou na configuração do MYSQL... Coisa inédita vemos quase todo dia, mas... Não ter nenhuma instrução para deletar um registro, no entanto, apesar de gravado e checado ele sumir... É intrigante... :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que falta um COMMIT e/ou uma declarão de TRANSACTION.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta!Obrigado pela resposta.

Apesar de ter lido sobre COMMIT (ainda estou me familiarizando com muita coisa em BD) não cheguei a considerar pois li que por padrão o AUTOCOMMIT é TRUE em MYSQL,contudo, vi agora que para sistemas multi usuário, o melhor é implementar isso "manualmente" para garantir a integridade dos dados. Vou implementar e testar. Agradeço novamente pela "luz" :) .

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.