Есть скрипт, который должен записывать + и -, которые ставит пользователь на разных страницах. Но при параллельных запросах от одного пользователя иногда происходит так, что пользователь ставит вместо 1 + (или -) два и больше. Пытался это исправить с помощью транзакций, но не помогло. Как возможно решить данную проблему? Буду очень благодарен!
include '../lib/connect.php';
include '../lib/login.php';
$pade = mysqli_real_escape_string($link, htmlspecialchars($_POST['pade'], ENT_QUOTES));
$var = mysqli_real_escape_string($link, htmlspecialchars($_POST['var'], ENT_QUOTES));
$user = login();
mysqli_begin_transaction($link, MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT);
if ($user != false){
$result = mysqli_query($link, "SELECT * FROM users_rate WHERE id_pade='$pade' AND id_user='$user'");
if (mysqli_num_rows($result) == 0) {
mysqli_query($link, "INSERT INTO users_rate(id_pade, id_user, var) VALUES ('$pade','$user','$var')");
if ($var){
mysqli_query($link, "UPDATE users_stats SET rate=rate+1 WHERE name='$pade'");
echo '{"success":true,"rez":1,"msg":"Плюс успешно поставлен"}';
} else {
mysqli_query($link, "UPDATE users_stats SET rate=rate-1 WHERE name='$pade'");
echo '{"success":true,"rez":-1,"msg":"Минус успешно поставлен"}';
}
} else {
$data = mysqli_fetch_array($result);
if ($data['var'] == $var){
if ($var){
echo '{"success":false,"rez":0,"msg":"Вы уже ставили плюс"}';
} else {
echo '{"success":false,"rez":0,"msg":"Вы уже ставили минус"}';
}
} else {
mysqli_query($link, "DELETE FROM users_rate WHERE id_pade='$pade' AND id_user='$user'");
if ($var){
mysqli_query($link, "UPDATE users_stats SET rate=rate+1 WHERE name='$pade'");
echo '{"success":true,"rez":1,"msg":"Вы убрали свой минус"}';
} else {
mysqli_query($link, "UPDATE users_stats SET rate=rate-1 WHERE name='$pade'");
echo '{"success":true,"rez":-1,"msg":"Вы убрали свой плюс"}';
}
}
}
}
mysqli_close($link);