За последние 24 часа нас посетили 20863 программиста и 1132 робота. Сейчас ищут 359 программистов ...

Лотерея

Тема в разделе "PHP для новичков", создана пользователем Владимир11, 24 мар 2019.

  1. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    Здравствуйте ребята помогите с лотереей,
    Смысл люди купили 10 билетов и пошел рандом розыгрыш.

    Я переделал что б было по окончанию времен добавил переменные текущего времени и окончания лотереи

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

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

    PHP:
    1. # Разыгрываем призы
    2.                while(true){
    3.                     $winner_a = rand(1, $num_bil);
    4.                     $winner_b = rand(1, $num_bil);
    5.                     $winner_c = rand(1, $num_bil);
    6.                     if($winner_a != $winner_b AND $winner_b != $winner_c AND $winner_c != $winner_a) break;
    7.                 }
    8.                 # Пользователь 1
    9.                $db->Query("SELECT user FROM db_lottery WHERE id = '$winner_a'");
    10.                 $user_a = $db->FetchRow();
    11.                 # Пользователь 2
    12.                $db->Query("SELECT user FROM db_lottery WHERE id = '$winner_b'");
    13.                 $user_b = $db->FetchRow();
    14.                 # Пользователь 3
    15.                $db->Query("SELECT user FROM db_lottery WHERE id = '$winner_c'");
    16.                 $user_c = $db->FetchRow();
    17.                 # чистим таблицу
    18.                $db->Query("TRUNCATE TABLE db_lottery");
    19.                 # Вставляем запись о победителях
    20.                $all_bank = ($num_bil * $amount_lottery);
    21.                 $db->Query("INSERT INTO db_lottery_winners (user_a, bil_a, user_b, bil_b, user_c, bil_c, bank, date_add)
    22.                VALUES ('$user_a','$winner_a','$user_b','$winner_b','$user_c','$winner_c','$all_bank','".time()."')");
    23.                 # Обновляем средства пользователям
    24.                # 1 место
    25.                $money_a = $all_bank * 0.5;
    26.                 $db->Query("UPDATE db_users_b SET money_b = money_b + '$money_a' WHERE user = '$user_a'");
    27.                 # 2 место
    28.                $money_b = $all_bank * 0.25;
    29.                 $db->Query("UPDATE db_users_b SET money_b = money_b + '$money_b' WHERE user = '$user_b'");
    30.                 # 3 место
    31.                $money_c = $all_bank * 0.20;
    32.                 $db->Query("UPDATE db_users_b SET money_b = money_b + '$money_c' WHERE user = '$user_c'");

    Подскажите как сделать что б работало без дополнительного нажатия


    PHP:
    1. <?PHP
    2. $_OPTIMIZATION["title"] = "Аккаунт - Лотерея";
    3. # Настройки лотерея
    4. $amount_lottery = 100; // Стоимость лотерейного билета
    5. $num_bil = 10; // Количество билетов
    6. ?>
    7.     <div class="acc-title">Лотерея</div>
    8. <b>Лотерея</b> - это такая игры :) Всего имеется <?=$num_bil; ?> билетов. После того, как все билеты будут проданы состоится розыгрыш счастливых билетов. Система случайным образом выберет 3 номера счастливых билетов и зачислит им призы. <BR />
    9. 1 место - 50% от общего банка [<?=($amount_lottery * $num_bil) * 0.5; ?> серебра]. <BR />
    10. 2 место - 25% от общего банка [<?=($amount_lottery * $num_bil) * 0.25; ?> серебра]. <BR />
    11. 3 место - 20% от общего банка [<?=($amount_lottery * $num_bil) * 0.2; ?> серебра]. <BR />
    12. Остальные 5% составляют комиссию системы.
    13. <BR />
    14. <u>Стоимость билета = <?=$amount_lottery; ?></u>.
    15.  
    16. <?PHP
    17.     if(isset($_POST["set_lottery"], $_POST["hash"]) AND $_SESSION["lot_hash"] == $_POST["hash"]){
    18.         $db->Query("SELECT money_b FROM db_users_b WHERE id = '{$user_id}' LIMIT 1");
    19.         if($db->FetchRow() >= $amount_lottery){
    20.             $db->Query("UPDATE db_users_b SET money_b = money_b - '$amount_lottery' WHERE id = '{$user_id}'");
    21.             $db->Query("INSERT INTO db_lottery (user_id, user, date_add) VALUE ('$user_id','$user_name','".time()."')");
    22.             $lid = $db->LastInsert();
    23.             if( $lid >= $num_bil){
    24.                 # Разыгрываем призы
    25.                while(true){
    26.                     $winner_a = rand(1, $num_bil);
    27.                     $winner_b = rand(1, $num_bil);
    28.                     $winner_c = rand(1, $num_bil);
    29.                     if($winner_a != $winner_b AND $winner_b != $winner_c AND $winner_c != $winner_a) break;
    30.                 }
    31.                 # Пользователь 1
    32.                $db->Query("SELECT user FROM db_lottery WHERE id = '$winner_a'");
    33.                 $user_a = $db->FetchRow();
    34.                 # Пользователь 2
    35.                $db->Query("SELECT user FROM db_lottery WHERE id = '$winner_b'");
    36.                 $user_b = $db->FetchRow();
    37.                 # Пользователь 3
    38.                $db->Query("SELECT user FROM db_lottery WHERE id = '$winner_c'");
    39.                 $user_c = $db->FetchRow();
    40.                 # чистим таблицу
    41.                $db->Query("TRUNCATE TABLE db_lottery");
    42.                 # Вставляем запись о победителях
    43.                $all_bank = ($num_bil * $amount_lottery);
    44.                 $db->Query("INSERT INTO db_lottery_winners (user_a, bil_a, user_b, bil_b, user_c, bil_c, bank, date_add)
    45.                VALUES ('$user_a','$winner_a','$user_b','$winner_b','$user_c','$winner_c','$all_bank','".time()."')");
    46.                 # Обновляем средства пользователям
    47.                # 1 место
    48.                $money_a = $all_bank * 0.5;
    49.                 $db->Query("UPDATE db_users_b SET money_b = money_b + '$money_a' WHERE user = '$user_a'");
    50.                 # 2 место
    51.                $money_b = $all_bank * 0.25;
    52.                 $db->Query("UPDATE db_users_b SET money_b = money_b + '$money_b' WHERE user = '$user_b'");
    53.                 # 3 место
    54.                $money_c = $all_bank * 0.20;
    55.                 $db->Query("UPDATE db_users_b SET money_b = money_b + '$money_c' WHERE user = '$user_c'");
    56.                 echo "<center><b><font color='green'>Лотерея окончена</font></b></center><BR />";
    57.             }else echo "<center><b><font color='green'>Билет успешно куплен</font></b></center><BR />";
    58.         }else echo "<center><b><font color='red'>Недостаточно средств для покупки билета</font></b></center><BR />";
    59.     }
    60. ?>
    61. <center>
    62. <?PHP
    63. $_SESSION["lot_hash"] = rand(1, 9999999);
    64. ?>
    65. <form action="" method="post">
    66. <input type="submit" name="set_lottery" value="Купить билет" style="padding:7px;" />
    67. <input type="hidden" name="hash" value="<?=$_SESSION["lot_hash"]; ?>" />
    68. </form>
    69. </center>
    --- Добавлено ---
    я добавил в таблу date_end = к примеру через 5 минут после покупки первого билета и после сделал условие если текущее время >= date_end то делать розыгрыш но он срабатывает только после нажатия на кнопку
     
  2. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    используй крон, запускай скрипт каждые 5 мин и проверяй.
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Если для розыгрыша всегда нужно 10 купленных билетов - то можно и на кнопке покупки оставить проведение розыгрыша. Просто сперва скрипт должен зарегистрировать покупку билета и потом проверить - набралось ли уже 10. И, если набралось - сразу и разыграть.
     
  4. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    нет их неограниченно пока не пройдет неделя