Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>"; $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'");
}
}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.
Creio que falta um COMMIT e/ou uma declarão de TRANSACTION.
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" :) .
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... :)