РЕШЕНО Не закрывается конкурс рефералов.

roug13

Участник
Ребят, кто подскажет. Поставил конкурс рефералов, всё работает. Вчера запустил, до сегодняшнего вечера потестить. Конкурс должен был завершиться 30 минут назад. А он работает, паразит. Принудительно менял в БД значение date_end на такое же. как начальное. Кто подскажет?
 

pligin

Команда форума
Администратор
Ребят, кто подскажет. Поставил конкурс рефералов, всё работает. Вчера запустил, до сегодняшнего вечера потестить. Конкурс должен был завершиться 30 минут назад. А он работает, паразит. Принудительно менял в БД значение date_end на такое же. как начальное. Кто подскажет?
С такими "уликами" только экстрасенс...
Причина ясна - в скрипте нет проверки даты завершения либо есть, но не работает
 

roug13

Участник
С такими "уликами" только экстрасенс...
Причина ясна - в скрипте нет проверки даты завершения либо есть, но не работает
Вот код comconfig.php
Код:
<div class="s-bk-lf">
    <div class="acc-title">Конкурс рефералов</div>
</div>
<div class="silver-bk"><div class="clr"></div>   
<center><a href = "/?menu=seasonhunter&sel=compconfig" class="stn">Текущий конкурс</a> || <a href = "/?menu=seasonhunter&sel=compconfig&add" class="stn">Добавить Конкурс</a> || <a href = "/?menu=seasonhunter&sel=compconfig&list" class="stn">Завершенные</a></center>
<BR />
<?PHP



# добавление конкурса
if(isset($_GET["add"])){


    $db->Query("SELECT * FROM db_competition WHERE status = '0'");
    if($db->NumRows() > 0){
    
    echo "<center><b><font color = 'red'>Максимум действующий конкурс. <BR />Завершите прошлый, чтоб создать новый</font></b></center><BR />";
    
    ?>
    </div>
    <div class="clr"></div>   
    <?PHP
    
    return;
    }
    
    # Создание конкурса
    if(isset($_POST["1m"])){
    
        $m1 = (intval($_POST["1m"]) > 0) ? intval($_POST["1m"]) : 0;
        $m2 = (intval($_POST["2m"]) > 0) ? intval($_POST["2m"]) : 0;
        $m3 = (intval($_POST["3m"]) > 0) ? intval($_POST["3m"]) : 0;
        $duration = time() + intval($_POST["duration"]) * 86400;
        
        if($m1 > $m2 AND $m2 > $m3){
        
            $db->Query("INSERT INTO db_competition (1m, 2m, 3m, date_add, date_end) VALUES ('$m1','$m2','$m3','".time()."','$duration')");
            
            echo "<center><b><font color = 'green'>Конкурс создан</font></b></center><BR />";
            
            ?>           
            </div>
            <div class="clr"></div>   
            <?PHP
            
            return;
            
        }else echo "<center><b><font color = 'red'>1е место должно быть больше второго, 2е место больше третего</font></b></center><BR />";
        
    }
    
?>
<form action="" method="post">
<table width="300" border="0" align="center">
  <tr >
    <td>Продолжительность (дней):</td>
    <td align="center">
    <select name="duration">
        
        <?PHP
        $count = 0;
        while( $count <= 365 ){
        $count++;
        ?>
        <option value="<?=$count; ?>">&nbsp;&nbsp;<?=$count; ?>&nbsp;&nbsp;</option>
        <?PHP } ?>
    </select>
    </td>
  </tr>
  <tr>
    <td>Приз за 1 место (RUB):</td>
    <td align="center"><input type="text" name="1m" value="10000" size="10"/></td>
  </tr>
  <tr>
    <td>Приз за 2 место (RUB):</td>
    <td align="center"><input type="text" name="2m" value="5000" size="10"/></td>
  </tr>
  <tr>
    <td>Приз за 3 место (RUB):</td>
    <td align="center"><input type="text" name="3m" value="2500" size="10"/></td>
  </tr>
  <tr>
    <td align="center" colspan="2"><input type="submit" value="Создать конкурс"></td>
  </tr>
</table>
</form>

</div>
<div class="clr"></div>   
<?PHP

return;
}


# Список конкурсов
if(isset($_GET["list"])){


    # Список пользователей
    $db->Query("SELECT * FROM db_competition WHERE status > 0");
    if($db->NumRows() > 0){
    
    ?>
    
    
    <?PHP
        while($data = $db->FetchArray()){
        
        ?>
            <table width="99%" border="0" align="center">
            <tr bgcolor="#efefef">
                <td align="center" width="75" class="m-tb">ID</td>
                <td align="center" class="m-tb">Начат</td>
                <td align="center" class="m-tb">Завершен</td>
                <td align="center" class="m-tb">Фонд</td>
            </tr>
            <tr class="htt" >
                <td align="center"><?=$data["id"]; ?></td>
                <td align="center"><?=date("d.m.Y", $data["date_add"]); ?></td>
                <td align="center"><?=date("d.m.Y", $data["date_end"]); ?></td>
                <td align="center"><?=$data["1m"]+$data["2m"]+$data["3m"]; ?> RUB</td>
             </tr>
            <tr bgcolor="#efefef">
                <td align="center" width="75" class="m-tb">Статус</td>
                <td align="center" class="m-tb">1 место / приз</td>
                <td align="center" class="m-tb">2 место / приз</td>
                <td align="center" class="m-tb">3 место / приз</td>
            </tr>
            <tr class="htt" >
                <td align="center"><?=($data["status"] > 1) ? "Отменен" : "Завершен"; ?></td>
                <td align="center"><?=$data["user_1"]; ?> / <?=$data["1m"]; ?></td>
                <td align="center"><?=$data["user_2"]; ?> / <?=$data["2m"]; ?></td>
                <td align="center"><?=$data["user_3"]; ?> / <?=$data["3m"]; ?></td>
             </tr>
            </table>
        <BR /><BR />
        <?PHP
        }

    }else echo "<center><b><font color = 'red'>Нет завершенных конкурсов</font></b></center><BR />";


?>
</div>
<div class="clr"></div>   
<?PHP

return;
}

$db->Query("SELECT * FROM db_config WHERE id = '1'");
$data_cq = $db->FetchArray();

# Отмена
if(isset($_POST["cancel"])){

    $cancel = intval($_POST["cancel"]);
    $db->Query("SELECT * FROM db_competition WHERE status = '0' AND id = '{$cancel}' LIMIT 1");
    if($db->NumRows() == 1){
    
        $db->Query("UPDATE db_competition SET user_1 = '-', user_2 = '-', user_3 = '-', status = '2' WHERE id = '$cancel'");
        $db->Query("TRUNCATE TABLE db_competition_users");
        
        echo "<center><b><font color = 'green'>Конкурс отменен, призы НЕ зачислены</font></b></center><BR />";
        
    }else echo "<center><b><font color = 'red'>Конкурс с указанным ID не найден, возможно он уже завершен</font></b></center><BR />";
    
}

# Завершение конкурса
if(isset($_POST["set_ok"])){

    $sok = intval($_POST["set_ok"]);
    $db->Query("SELECT * FROM db_competition WHERE status = '0' AND id = '{$sok}' LIMIT 1");
    if($db->NumRows() == 1){
        
        $comp_p = $db->FetchArray();
        
        $user_s = array();
        $user_s[1] = "-";
        $user_s[2] = "-";
        $user_s[3] = "-";   
        
        # зачисляем бонус
        $db->Query("SELECT * FROM db_competition_users ORDER BY points DESC LIMIT 3");
        if($db->NumRows() > 0){
            
            $counter = 1;
            while($data = $db->FetchArray()){
            
                $user_up_id = $data["user_id"];
                $user_s[$counter] = $data["user"];
                $money = $comp_p["{$counter}m"];
                $money = ($money * $data_cq["ser_per_wmr"]);
                # Зачисляем средства победителям
                $db->Query("UPDATE db_users_b SET money_p = money_p + '{$money}' WHERE id = '{$user_up_id}'", false, false);
                
            $counter++;
            }
        
        $db->Query("UPDATE db_competition SET user_1 = '".$user_s[1]."', user_2 = '".$user_s[2]."', user_3 = '".$user_s[3]."', status = '1' WHERE id = '$sok'");
        $db->Query("TRUNCATE TABLE db_competition_users");
        echo "<center><b><font color = 'green'>Конкурс завершен, призы зачислены</font></b></center><BR />";
        
        }
        
    }else echo "<center><b><font color = 'red'>Конкурс с указанным ID не найден, возможно он уже завершен</font></b></center><BR />";

?>
</div>
<div class="clr"></div>   
<?PHP

return;
}


$db->Query("SELECT * FROM db_competition WHERE status = 0 LIMIT 1");
if($db->NumRows() == 1){
$comp = $db->FetchArray();   
    ?>
<b>Конкурс рефералов № <?=$comp["id"]; ?> с общим призовым фондом <?=$comp["1m"]+$comp["2m"]+$comp["3m"]; ?> RUB<BR /><BR />
Старт конкурса: <?=date("d.m.Y в H:i:s", $comp["date_add"]); ?> <BR />Завершение: <?=date("d.m.Y в H:i:s", $comp["date_end"]); ?>
<BR /><BR />
<u>Призовые места:</u><BR />
1 - <?=$comp["1m"]; ?> RUB <BR />
2 - <?=$comp["2m"]; ?> RUB <BR />
3 - <?=$comp["3m"]; ?> RUB <BR /><BR />

<?=($comp["date_end"] < time()) ? '<center><font color = "red">!ДАТА ОКОНЧАНИЯ КОНКУРСА ПРОШЛА!</font></center>' : false; ?>
</b>
<BR />

<table width="350" border="0" align="center">
  <tr=>
    <td align="center">
    <form action="" method="post">
        <input type="hidden" name="cancel" value="<?=$comp["id"]; ?>" />
        <input type="submit" value="Отменить без призов"  />
    </form>
    </td>
    <td align="center">
    <form action="" method="post">
        <input type="hidden" name="set_ok" value="<?=$comp["id"]; ?>" />
        <input type="submit" value="Завершить и зачислить средства"  />
    </form>
    </td>
  </tr>
</table>
<BR />
    <?PHP
    
    # Список пользователей
    $db->Query("SELECT * FROM db_competition_users ORDER BY points DESC LIMIT 200");
    if($db->NumRows() > 0){
    
    ?>
    
<table width="99%" border="0" align="center">
  <tr bgcolor="#efefef">
    <td align="center" width="75" class="m-tb">Позиция</td>
    <td align="center" class="m-tb">Пользователь</td>
    <td align="center" class="m-tb">Баллов</td>
    <td align="center" class="m-tb">Приз</td>
  </tr>
    <?PHP
        $position = 1;
        while($data = $db->FetchArray()){
        
        ?>
            <tr class="htt" >
                <td align="center" width="75"><?=$position; ?></td>
                <td align="center"><?=$data["user"]; ?></td>
                <td align="center"><?=sprintf("%.0f",$data["points"]); ?></td>
                <td align="center"><?=(intval($comp["{$position}m"]) > 0) ? $comp["{$position}m"]." RUB" : "-" ?></td>
             </tr>
        <?PHP
        $position++;
        }
    
    ?>
</table>
<BR />
    <?PHP
    
    }else echo "<center><b><font color = 'red'>Нет участников в конкурсе</font></b></center><BR />";

}else echo "<center><b><font color = 'red'>В данный момент конкурс не проводится</font></b></center><BR />";

?>

</div>
<div class="clr"></div>
 

pligin

Команда форума
Администратор
Вот код comconfig.php
Код:
<div class="s-bk-lf">
    <div class="acc-title">Конкурс рефералов</div>
</div>
<div class="silver-bk"><div class="clr"></div>  
<center><a href = "/?menu=seasonhunter&sel=compconfig" class="stn">Текущий конкурс</a> || <a href = "/?menu=seasonhunter&sel=compconfig&add" class="stn">Добавить Конкурс</a> || <a href = "/?menu=seasonhunter&sel=compconfig&list" class="stn">Завершенные</a></center>
<BR />
<?PHP



# добавление конкурса
if(isset($_GET["add"])){


    $db->Query("SELECT * FROM db_competition WHERE status = '0'");
    if($db->NumRows() > 0){
   
    echo "<center><b><font color = 'red'>Максимум действующий конкурс. <BR />Завершите прошлый, чтоб создать новый</font></b></center><BR />";
   
    ?>
    </div>
    <div class="clr"></div>  
    <?PHP
   
    return;
    }
   
    # Создание конкурса
    if(isset($_POST["1m"])){
   
        $m1 = (intval($_POST["1m"]) > 0) ? intval($_POST["1m"]) : 0;
        $m2 = (intval($_POST["2m"]) > 0) ? intval($_POST["2m"]) : 0;
        $m3 = (intval($_POST["3m"]) > 0) ? intval($_POST["3m"]) : 0;
        $duration = time() + intval($_POST["duration"]) * 86400;
       
        if($m1 > $m2 AND $m2 > $m3){
       
            $db->Query("INSERT INTO db_competition (1m, 2m, 3m, date_add, date_end) VALUES ('$m1','$m2','$m3','".time()."','$duration')");
           
            echo "<center><b><font color = 'green'>Конкурс создан</font></b></center><BR />";
           
            ?>          
            </div>
            <div class="clr"></div>  
            <?PHP
           
            return;
           
        }else echo "<center><b><font color = 'red'>1е место должно быть больше второго, 2е место больше третего</font></b></center><BR />";
       
    }
   
?>
<form action="" method="post">
<table width="300" border="0" align="center">
  <tr >
    <td>Продолжительность (дней):</td>
    <td align="center">
    <select name="duration">
       
        <?PHP
        $count = 0;
        while( $count <= 365 ){
        $count++;
        ?>
        <option value="<?=$count; ?>">&nbsp;&nbsp;<?=$count; ?>&nbsp;&nbsp;</option>
        <?PHP } ?>
    </select>
    </td>
  </tr>
  <tr>
    <td>Приз за 1 место (RUB):</td>
    <td align="center"><input type="text" name="1m" value="10000" size="10"/></td>
  </tr>
  <tr>
    <td>Приз за 2 место (RUB):</td>
    <td align="center"><input type="text" name="2m" value="5000" size="10"/></td>
  </tr>
  <tr>
    <td>Приз за 3 место (RUB):</td>
    <td align="center"><input type="text" name="3m" value="2500" size="10"/></td>
  </tr>
  <tr>
    <td align="center" colspan="2"><input type="submit" value="Создать конкурс"></td>
  </tr>
</table>
</form>

</div>
<div class="clr"></div>  
<?PHP

return;
}


# Список конкурсов
if(isset($_GET["list"])){


    # Список пользователей
    $db->Query("SELECT * FROM db_competition WHERE status > 0");
    if($db->NumRows() > 0){
   
    ?>
   
   
    <?PHP
        while($data = $db->FetchArray()){
       
        ?>
            <table width="99%" border="0" align="center">
            <tr bgcolor="#efefef">
                <td align="center" width="75" class="m-tb">ID</td>
                <td align="center" class="m-tb">Начат</td>
                <td align="center" class="m-tb">Завершен</td>
                <td align="center" class="m-tb">Фонд</td>
            </tr>
            <tr class="htt" >
                <td align="center"><?=$data["id"]; ?></td>
                <td align="center"><?=date("d.m.Y", $data["date_add"]); ?></td>
                <td align="center"><?=date("d.m.Y", $data["date_end"]); ?></td>
                <td align="center"><?=$data["1m"]+$data["2m"]+$data["3m"]; ?> RUB</td>
             </tr>
            <tr bgcolor="#efefef">
                <td align="center" width="75" class="m-tb">Статус</td>
                <td align="center" class="m-tb">1 место / приз</td>
                <td align="center" class="m-tb">2 место / приз</td>
                <td align="center" class="m-tb">3 место / приз</td>
            </tr>
            <tr class="htt" >
                <td align="center"><?=($data["status"] > 1) ? "Отменен" : "Завершен"; ?></td>
                <td align="center"><?=$data["user_1"]; ?> / <?=$data["1m"]; ?></td>
                <td align="center"><?=$data["user_2"]; ?> / <?=$data["2m"]; ?></td>
                <td align="center"><?=$data["user_3"]; ?> / <?=$data["3m"]; ?></td>
             </tr>
            </table>
        <BR /><BR />
        <?PHP
        }

    }else echo "<center><b><font color = 'red'>Нет завершенных конкурсов</font></b></center><BR />";


?>
</div>
<div class="clr"></div>  
<?PHP

return;
}

$db->Query("SELECT * FROM db_config WHERE id = '1'");
$data_cq = $db->FetchArray();

# Отмена
if(isset($_POST["cancel"])){

    $cancel = intval($_POST["cancel"]);
    $db->Query("SELECT * FROM db_competition WHERE status = '0' AND id = '{$cancel}' LIMIT 1");
    if($db->NumRows() == 1){
   
        $db->Query("UPDATE db_competition SET user_1 = '-', user_2 = '-', user_3 = '-', status = '2' WHERE id = '$cancel'");
        $db->Query("TRUNCATE TABLE db_competition_users");
       
        echo "<center><b><font color = 'green'>Конкурс отменен, призы НЕ зачислены</font></b></center><BR />";
       
    }else echo "<center><b><font color = 'red'>Конкурс с указанным ID не найден, возможно он уже завершен</font></b></center><BR />";
   
}

# Завершение конкурса
if(isset($_POST["set_ok"])){

    $sok = intval($_POST["set_ok"]);
    $db->Query("SELECT * FROM db_competition WHERE status = '0' AND id = '{$sok}' LIMIT 1");
    if($db->NumRows() == 1){
       
        $comp_p = $db->FetchArray();
       
        $user_s = array();
        $user_s[1] = "-";
        $user_s[2] = "-";
        $user_s[3] = "-";  
       
        # зачисляем бонус
        $db->Query("SELECT * FROM db_competition_users ORDER BY points DESC LIMIT 3");
        if($db->NumRows() > 0){
           
            $counter = 1;
            while($data = $db->FetchArray()){
           
                $user_up_id = $data["user_id"];
                $user_s[$counter] = $data["user"];
                $money = $comp_p["{$counter}m"];
                $money = ($money * $data_cq["ser_per_wmr"]);
                # Зачисляем средства победителям
                $db->Query("UPDATE db_users_b SET money_p = money_p + '{$money}' WHERE id = '{$user_up_id}'", false, false);
               
            $counter++;
            }
       
        $db->Query("UPDATE db_competition SET user_1 = '".$user_s[1]."', user_2 = '".$user_s[2]."', user_3 = '".$user_s[3]."', status = '1' WHERE id = '$sok'");
        $db->Query("TRUNCATE TABLE db_competition_users");
        echo "<center><b><font color = 'green'>Конкурс завершен, призы зачислены</font></b></center><BR />";
       
        }
       
    }else echo "<center><b><font color = 'red'>Конкурс с указанным ID не найден, возможно он уже завершен</font></b></center><BR />";

?>
</div>
<div class="clr"></div>  
<?PHP

return;
}


$db->Query("SELECT * FROM db_competition WHERE status = 0 LIMIT 1");
if($db->NumRows() == 1){
$comp = $db->FetchArray();  
    ?>
<b>Конкурс рефералов № <?=$comp["id"]; ?> с общим призовым фондом <?=$comp["1m"]+$comp["2m"]+$comp["3m"]; ?> RUB<BR /><BR />
Старт конкурса: <?=date("d.m.Y в H:i:s", $comp["date_add"]); ?> <BR />Завершение: <?=date("d.m.Y в H:i:s", $comp["date_end"]); ?>
<BR /><BR />
<u>Призовые места:</u><BR />
1 - <?=$comp["1m"]; ?> RUB <BR />
2 - <?=$comp["2m"]; ?> RUB <BR />
3 - <?=$comp["3m"]; ?> RUB <BR /><BR />

<?=($comp["date_end"] < time()) ? '<center><font color = "red">!ДАТА ОКОНЧАНИЯ КОНКУРСА ПРОШЛА!</font></center>' : false; ?>
</b>
<BR />

<table width="350" border="0" align="center">
  <tr=>
    <td align="center">
    <form action="" method="post">
        <input type="hidden" name="cancel" value="<?=$comp["id"]; ?>" />
        <input type="submit" value="Отменить без призов"  />
    </form>
    </td>
    <td align="center">
    <form action="" method="post">
        <input type="hidden" name="set_ok" value="<?=$comp["id"]; ?>" />
        <input type="submit" value="Завершить и зачислить средства"  />
    </form>
    </td>
  </tr>
</table>
<BR />
    <?PHP
   
    # Список пользователей
    $db->Query("SELECT * FROM db_competition_users ORDER BY points DESC LIMIT 200");
    if($db->NumRows() > 0){
   
    ?>
   
<table width="99%" border="0" align="center">
  <tr bgcolor="#efefef">
    <td align="center" width="75" class="m-tb">Позиция</td>
    <td align="center" class="m-tb">Пользователь</td>
    <td align="center" class="m-tb">Баллов</td>
    <td align="center" class="m-tb">Приз</td>
  </tr>
    <?PHP
        $position = 1;
        while($data = $db->FetchArray()){
       
        ?>
            <tr class="htt" >
                <td align="center" width="75"><?=$position; ?></td>
                <td align="center"><?=$data["user"]; ?></td>
                <td align="center"><?=sprintf("%.0f",$data["points"]); ?></td>
                <td align="center"><?=(intval($comp["{$position}m"]) > 0) ? $comp["{$position}m"]." RUB" : "-" ?></td>
             </tr>
        <?PHP
        $position++;
        }
   
    ?>
</table>
<BR />
    <?PHP
   
    }else echo "<center><b><font color = 'red'>Нет участников в конкурсе</font></b></center><BR />";

}else echo "<center><b><font color = 'red'>В данный момент конкурс не проводится</font></b></center><BR />";

?>

</div>
<div class="clr"></div>
Не этот файл завершает конкурс...
_class.competition.php
 

roug13

Участник
Не этот файл завершает конкурс...
_class.competition.php
Код:
<?PHP

class competition{

    var $db = NULL;
    var $compd = array();
    
    
    # Конструктор
    function __construct($db){
    
        $this->db = $db;
        $this->compd = $this->CompData();
        
    }
    
    # Данные конкурса
    function CompData(){
    
        $this->db->Query("SELECT * FROM db_competition WHERE status = '0' LIMIT 1");   
        if($this->db->NumRows() > 0){
            
            return $this->db->FetchArray();

                
        }else return false;
    }
    
    # Обновляем очки пользователя
    function UpdatePoints($user_id, $sum){
    
        $user_id = intval($user_id);
        $sum = round($sum, 2);
        
        if($this->compd["date_add"] >= 0 AND $this->compd["date_end"] > time()){
        
            $this->db->Query("SELECT referer, referer_id, date_reg FROM db_users_a WHERE id = '{$user_id}'");
            $ret_d = $this->db->FetchArray();
            
            if($ret_d["date_reg"] >= $this->compd["date_add"]){
            
                # Проверяем есть ли пользователь в конкурсе
                $ref_id = $ret_d["referer_id"];
                $ref = $ret_d["referer"];
                $this->db->Query("SELECT COUNT(*) FROM db_competition_users WHERE user_id = '{$ref_id}'");
                if($this->db->FetchRow() == 1){
                
                    $this->db->Query("UPDATE db_competition_users SET points = points + '{$sum}' WHERE user_id = '{$ref_id}'");
                
                }else $this->db->Query("INSERT INTO db_competition_users (user, user_id, points) VALUES ('{$ref}','{$ref_id}','$sum')");
                
                return true;
                
            }else return false;
            
        }else return false;
        
    }
    
}



?>
 

pligin

Команда форума
Администратор
Бл***...
Вспомнил...
Конкурс завершает администратор в админке
 

pligin

Команда форума
Администратор
В смысле, вручную? у меня там дата завершения выставляется. По идее должно само закрываться
Идея не всегда граничит с реальностью... Всегда конкурс закрывался вручную... Если у тебя нет кнопок закрытия, то это не значит, что его переделали на "автомат"
upload_2017-11-28_22-34-58.png
 
Верх