За последние 24 часа нас посетили 21338 программистов и 1665 роботов. Сейчас ищут 749 программистов ...

Почему скрипт выполняется несколько раз вместо одного?

Тема в разделе "PHP для новичков", создана пользователем Максим1233331, 1 апр 2018.

Метки:
  1. Максим1233331

    Максим1233331 Новичок

    С нами с:
    28 янв 2018
    Сообщения:
    19
    Симпатии:
    0
    Здравствуйте, имеется скрипт рулетки на php, ajax. Рулетка работает, но почему-то когда нажимаю на кнопку выполняется не 1, а несколько раз, то есть ставится несколько ставок вместо одной, как это исправить? Также еще проблема: скрипт не выполняется при первом клике после обновления страницы, а выполняется только на 2-ом клике
    Вот wheel.php:
    PHP:
    1. <?php top("Игра \"Колесо фортуны\"")?>
    2. <h1 style="font-size: 35px">Игра Колесо фортуны</h1>
    3. <h1>Ваш баланс:
    4.     <b><?=$_SESSION['balance']?>$</b></h1>
    5. <div class="games">
    6.     <img src="img/str.gif" alt="Стрелка" class="img-responsive center-block">
    7.     <img src="img/wheel.png" alt="Колесо" class="img-responsive center-block wheel" id="wheel"><br>
    8.     <select class="center-block" id="col">
    9.         <option value="0" disabled>Выберите ставку</option>
    10.         <option value="R">Красный</option>
    11.         <option value="B">Черный</option>
    12.         <option value="G">Зеленый</option>
    13.     </select><br>
    14.     <input type="number" id="bet" class="center-block" placeholder="Ваша ставка">
    15.     <br>
    16.     <button class="center-block" id="but" onclick="game()">Крутить</button>
    17.     <p id="p">Выпало: </p>
    18.     <p id="res"></p>
    19. </div>
    20. <?php bottom() ?>
    Файл script.js:
    Код (Javascript):
    1. function game() {
    2.         var f = true;
    3.         var but = document.getElementById("but");
    4.         var wheel = document.getElementById("wheel");
    5.         wheel.style.transitionDuration = "3s";
    6.         wheel.style.transitionTimingFunction = "ease-in-out";
    7.         but.addEventListener('click', function func() {
    8.             var bet = $("#bet").val();
    9.             var col = $("#col").val();
    10.             but.style.pointerEvents = "none";
    11.             $.ajax({
    12.                 method: "POST", // метод HTTP, используемый для запроса
    13.                 url: "game_engine", // строка, содержащая URL адрес, на который отправляется запрос
    14.                 data: { // данные, которые будут отправлены на сервер
    15.                     bet: bet,
    16.                     col: col
    17.                 },
    18.                 success: function(data) {
    19.                     var msg = JSON.parse(data);
    20.                     wheel.style.transform = "rotate(" + msg.deg + "deg)";
    21.                     if (msg.winbet == 0) {
    22.                         setTimeout(function() {
    23.                             $("#res").text("Вы проиграли!");
    24.                         }, 3500);
    25.                     } else if (msg.winbet == 1) {
    26.                         setTimeout(function() {
    27.                             $("#res").text("Вы выйграли!");
    28.                         }, 3500);
    29.                     } else {
    30.                         alert("Ошибка");
    31.                     }
    32.                     setTimeout(function() {
    33.                         $("#p").text("Выпало: " + msg.win); // добавляем текстовую информацию и данные
    34.                         but.style.pointerEvents = "auto";
    35.                     }, 3500);
    36.             }
    37.             })
    38.         });
    39.     }
    Вот файл game_engine.php(там выполняется скрипт):
    PHP:
    1. <?php
    2.     session_start();
    3.     $login = $_SESSION['id'];
    4.     $bal = (int)$_SESSION['balance'];
    5.     $bet = (int)$_POST['bet'];
    6.     $col = $_POST['col'];
    7.     if($bal<$bet){
    8.         exit("ОШИБКА!");
    9.     }else{
    10.     $vin1 = array(350,349,348,1,'R');
    11.     $vin2 = array(323,325,327,2,'B');
    12.     $vin3 = array(305,307,303,3,'G');
    13.     $vin4 = array(280,282,284,4,'B');
    14.     $vin5 = array(261,262,263,5,'R');
    15.     $vin6 = array(240,238,236,6,'B');
    16.     $vin7 = array(216,215,214,7,'R');
    17.     $vin8 = array(190,192,194,8,'B');
    18.     $vin9 = array(172,170,168,9,'R');
    19.     $vin10 = array(148,146,149,10,'B');
    20.     $vin11 = array(126,124,122,11,'R');
    21.     $vin12 = array(103,101,99,12,'B');
    22.     $vin13 = array(80,82,83,13,'R');
    23.     $vin14 = array(58,56,55,14,'B');
    24.     $vin15 = array(36,35,34,15,'R');
    25.     $vin16 = array(12,13,14,16,'B');
    26.     $roulette = array($vin1, $vin2, $vin3, $vin4, $vin5, $vin6, $vin7, $vin8, $vin9, $vin10, $vin11, $vin12, $vin13, $vin14, $vin15, $vin16);
    27.     $deg = $roulette[rand(0,15)];
    28.     $win = $deg[3];
    29.     if($deg[4] == $col){
    30.         if($deg[4] == 'G'){
    31.             $winbet = 1;
    32.             $newbal = $bal + ($bet*6);
    33.             $text = "Ставка ".$bet.". Выйграна! Дата: ".date("H:i:s")." ".date("m.d.y").". Новый баланс: ".$newbal;
    34.             mysqli_query($CONNECT, "UPDATE `users` SET `balance` = '$newbal' WHERE `id` = '$login'");
    35.             mysqli_query($CONNECT, "INSERT INTO `history` VALUES('', '$login', '$text')");
    36.             $_SESSION['balance'] = $newbal;
    37.            
    38.         }else{
    39.         $winbet = 1;
    40.         $newbal = $bal + $bet;
    41.         $text = "Ставка ".$bet.".Выйграна! Дата: ".date("H:i:s")." ".date("m.d.y")." .Новый баланс: ".$newbal;
    42.         mysqli_query($CONNECT, "UPDATE `users` SET `balance` = '$newbal' WHERE `id` = '$login'");
    43.         mysqli_query($CONNECT, "INSERT INTO `history` VALUES('', '$login', '$text')");
    44.         $_SESSION['balance'] = $newbal;
    45.         }
    46.     }else{
    47.         $winbet = 0;
    48.         $newbal = $bal - $bet;
    49.         $text = "Ставка ".$bet.".Проиграна! Дата: ".date("H:i:s")." ".date("m.d.y").". Новый баланс: ".$newbal;
    50.         mysqli_query($CONNECT,"UPDATE `users` SET `balance` = '$newbal' WHERE `id` = '$login'");
    51.         mysqli_query($CONNECT, "INSERT INTO `history` VALUES('', '$login', '$text')");
    52.         $_SESSION['balance'] = $newbal;
    53.     }
    54.     $deg = $deg[rand(0,2)];
    55.     $deg = $deg + 360*rand(3,5);
    56.     $array = array('deg' => $deg, 'win' => $win, 'winbet' => $winbet, 'newbal' => $newbal);
    57.     $json = json_encode($array);
    58.     exit($json);
    59.     }
    60. ?>
    Подскажите пожалуйста что не так, ЗАРАНЕЕ СПАСИБО
     
  2. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Нужно не полученные данные вешать на таймаут, а сам запрос, т.е. выглядеть может так


    1) Клик
    2) Дисаблед кнопку
    3) Повесить таймаут на отправку данных в файл
    4) Показать прелоадер
    5) Показать полученную информацию юзеру и разблочить кнопку
     
  3. Максим1233331

    Максим1233331 Новичок

    С нами с:
    28 янв 2018
    Сообщения:
    19
    Симпатии:
    0
    Здравствуйте, сделал как вы сказали - не помогло(( Может есть другой способ?
     
  4. Максим1233331

    Максим1233331 Новичок

    С нами с:
    28 янв 2018
    Сообщения:
    19
    Симпатии:
    0
    тот, который выберет пользователь) я уже все решил