Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos, eu ainda sou iniciante em programação e estou tendo problema ao inserir dados em uma tabela em um banco mysql.
O problema é o seguinte, implementei um sisteminha de votação, as pessoas vão na página e escolhem a opção através de um radio button e dão submit. Após isso são redirecionados a um outro PHP que faz a conexão ao banco e faz o insert na tabela. O problema é que regularmente ele insere a opção zero no banco, só que na votação não existe essa opção.
O que eu estou achando que é o problema: duas pessoas votaram ao mesmo tempo e tentou gravar no banco simultaneamente, daí deu algum pau maluco.
Daí pesquisei sobre transactions em mysql e tentei implementar, só que mesmo assim continua a ocorrerem os erros.
Alguém tem uma idéia do que pode ser o problema ou se eu implementei o transactions errado.
ID Categoria Voto
12033 1 3
12034 1 3
12035 2 3
12036 0 0
12037 0 0
12038 1 3
12039 1 2
function begin() {
@mysql_query("BEGIN");
}
function commit() {
@mysql_query("COMMIT");
}
function rollback() {
@mysql_query("ROLLBACK");
}
// Query de inserção
$query = "INSERT INTO votacao ( categoria, voto ) VALUES ( '$cat', '$voto' )";
// Testa se a categoria já está na session
if(isset($_SESSION["categoria"][$cat])) {
echo "Categoria já votada";
// Se não estiver...
} else {
begin(); // transaction begins
$result = @mysql_query($query);
// Testa se a query foi executada
if(!$result) {
rollback(); // transaction rolls back
echo "<script type='text/javascript'>alert('Voto não computado, sistema sobrecarregado, tente novamente.'); history.back();</script>";
exit;
} else {
commit(); // transaction is committed
$_SESSION["categoria"][$cat] = "x";
echo "Voto computado com sucesso.<br /><br />Obrigado pela sua participação.";
}
}
Mesmo implementando o transaction, continuam a aparecer as entradas zero na tabela.
Não são entradas diretamente com zero, porque eu criei filtros que testavam se a entrada era zero, e sempre passava, o que eu percebi é que só ocorria o erro quando ele ia armazena no banco.
Alguém sabe qual pode ser o problema ?
Vlws!
Carregando comentários...