> > > >

php Покупка привилегий, help

Сообщения
214
Рейтинг
76
#1
Хочу сделать покупки привилегий работающую с бд csbans`a и сервисом freekassa
Все просто, думал я, ага :crazy: Покидайте какие нибудь идеи, предложения, правки или то или сё или что-то еще или иное, ща взорвусь хелп


Сделал форму, обработчик формы, резаулт, от части все работает.
1. Сложно разобраться как сделать зависимые селекты. Выбрать сервер и в селекте ниже услуги именно для этого сервера
2. Мне кажется не правильно сделал обработчик :dntknw: , мб надо чтоб сразу с index.php перекидывало на кассу
3. Как передать флаги доступа, тут вообще жестко, думается надо выбирать услугу по id как то соединить с id выбранного сервера и что то дальше... :wacko:

4. Что-то еще уже не помню, потом добавлю

PHP:
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <title>Покупка привилегий онлайн</title>

    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

    <!-- jQuery library -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    <!-- Popper JS -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>

    <!-- Latest compiled JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

    <!-- Font Awesome Icons -->
    <link rel="stylesheet" href="https://use.fontawesome.com/64ff6e1601.css">

    <!-- Google Fonts -->
    <link href="https://fonts.googleapis.com/css?family=Arimo" rel="stylesheet">

    <!-- My CSS -->
    <link rel="stylesheet" href="styles.css">

    <!-- My JavaScript -->
    <script src="my_js.js"></script>

    <!-- PHP Includes -->
    <?php
        require_once ('cfg.php');
        require_once ('database.php');
        require_once ('mon/index.php');
    ?>
</head>

<body>
    <div class="container">
        <div class="content">
            <h4>Покупка привилегий онлайн</h3>
            <hr>
            <div class="row">

                <!-- start block -->
                <div class="col-sm-6">
                    <form method="GET" action="test_action.php" autocomplete="off">
                        <div class="form-group">
                            <label><i class="fa fa-keyboard-o"></i> Сервера</label>
                            <select class="form-control form-control-sm" name="us_servername" id="us_servername" onchange="(this.value);" required>
                                <option value="0" disabled="disabled" selected="selected">Выбрать сервер</option>
                                <?= $form_server ;?>
                            </select>
                        </div>
                        <div class="form-group">
                            <label><i class="fa fa-star"></i> Привилегии</label>
                            <select class="form-control form-control-sm" name="oa" onchange='(this.value)' required>
                                <option value="" disabled="disabled" selected="selected" name="servertarif">Выбрать привилегию</option>
                                <?=$form_tarif;?>
                            </select>
                        </div>
                        <div class="form-group">
                            <label><i class="fa fa-calendar"></i> Срок услуги</label>
                            <select class="form-control form-control-sm" name="us_date" onchange='(this.value)' required>
                                <option value="" disabled="disabled" selected="selected" name="serverdate">Выбрать срок</option>
                                <?=$form_date;?>
                            </select>
                        </div>
                        <div class="form-group form-background">
                            <div class="row">
                                <div class="col">
                                    <label><i class="fa fa-user"></i> Ник в игре</span></label>
                                <input type="text" name="us_nickname" placeholder="Ваш никнейм" class="form-control form-control-sm" maxlength="32" required>
                                </div>
                                <div class="col">
                                    <label><i class="fa fa-lock"></i> Ваш пароль</label>
                                    <div style="float:right;font-size:13px;color:#007bff;">
                                        <i class="fa fa-eye" aria-hidden="true"></i>
                                        <a href="#" id="s-h-pass"> Показать пароль</a>
                                    </div>
                                    <input id="password" type="password" name="us_password" placeholder="Придумайте пароль " pattern="^[\w]{4,32}$" class="form-control form-control-sm" required>
                                </div>
                            </div>
                            <small class="form-text text-muted">Ник и пароль вводить только на английском!</small>
                        </div>
                        <input class="btn btn-lg btn-block btn-dark" type="submit" value="Купить" name="submit">
                    </form>
                </div>
                <!-- end block -->

                <!-- start block -->
                <div class="col-sm-6">
                    <div class="card text-white bg-dark">
                        <div class="card-header"><?=$hostname;?></div>
                            <div class="card-body">
                                <div class="row">
                                    <div class="col-md-4"><?=$mapimage;?></div>
                                    <div class="col-md-8">
                                        <b><i class="fa fa-location-arrow" style="width: 15px;"></i> Адрес:</b> <?=$serverip.':'.$serverport;?> <br>
                                        <b><i class="fa fa-users" style="width: 15px;"></i> Игроки:</b> <?=$players.'/'.$maxplayers;?> <br>
                                        <b><i class="fa fa-map-marker" style="width: 15px;"></i> Карта:</b> <?=$map;?> <br>
                                        <a class="btn btn-warning btn-sm" href="steam://connect/<?=$serverip.':'.$serverport;?>">Подключиться через Steam</a>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <!-- end block -->

            </div>
        </div>
    </div>
</body>
</html>

PHP:
<?php
// freekassa
/*
$merchant_id = ''; // shop id
$secret_word = ''; // secret key
$get_order_id = $_GET['us_servername']; // order id
$get_order_amount = $_GET['oa']; // cost
$get_date = $_GET['us_date']; // date
$get_nick = $_GET['us_nickname']; // nickname
$get_pass = md5($_GET['us_password']); // password
$get_sign = md5($merchant_id.':'.$get_order_amount.':'.$secret_word.':'.$get_order_id); // hash
*/
// server status
$serverip = '46.174.52.237';
$serverport = '27015';
PHP:
<?php
require_once ('cfg.php');
//require_once ('classes.php');

$driver = 'mysql';
$host = '127.0.0.1'; // host
$db_name = 'csbans'; // data base
$db_user = ''; // user
$db_pass = ''; // password
$charset = 'utf8';
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];

try {
    $pdo = new PDO("$driver:host=$host;dbname=$db_name;charset=$charset", $db_user, $db_pass, $options);
} catch (PDOException $e) {
    die('Не могу подключиться к базе данных :(');
}

# CREATE TABLE `csbans`.`amx_buy` ( `idt` INT(11) NOT NULL ,  `name` VARCHAR(60) NOT NULL ,  `time` VARCHAR(60) NOT NULL ,  `cost` VARCHAR(60) NOT NULL ,  `flags` VARCHAR(60) NOT NULL
// запросы к бд
$get_servers = $pdo->query("SELECT id, hostname, address, rcon FROM amx_serverinfo");
$get_shop = $pdo->query("SELECT * FROM amx_buy");
$get_admins = $pdo->query("SELECT username, password, access, flags, nickname, ashow, created, expired, days FROM amx_amxadmins");

// вывод 3 последних админов
//$get_lastadmins = $pdo->query("SELECT nickname, created, expired FROM amx_amxadmins ORDER BY id DESC LIMIT 0,3");

while ( $server = $get_servers->fetch(PDO::FETCH_ASSOC) ) {
    $form_server .= '<option value="'.$server['id'].'" name="form_server" id="form_server">'.$server['hostname'].' ['.$server['address'].']</option>';
}

// вывод услуг и их даты
while ( $shop = $get_shop->fetch(PDO::FETCH_ASSOC) ) {
    $form_tarif .= '<option value="'.$shop['cost'].'" name="form_tarif" id="form_tarif">'.$shop['name'].' - '.$shop['cost'].' руб. ['.$shop['flags'].'] </option>';
    $form_date .= '<option value="'.$shop['time'].'" name="form_date" id="form_date">'.$shop['time'].' суток </option>';
}

// functions
// @author BLVCKMANIA.
$time = time();
/* Фильтация данных */
function fl($m){
    $m = abs($m);
    $m = intval($m);
    return $m;
}
/* Работаем с базой данных */
function qry($sql, $params = array()) {
    global $base;
    $stmt = $base -> prepare($sql);
    $stmt -> execute($params);
    return $stmt;
}
/* Для обычного запроса */
function cnt($sql, $params = array()) {
    global $base;
    $stmt = $base -> prepare($sql);
    $stmt -> execute($params);
    $stmt = $stmt->rowCount();
    return $stmt;
}
/* Для вывода запроса с подсчетом */
function obj($sql, $params = array()) {
    global $base;
    $stmt = $base -> prepare($sql);
    $stmt -> execute($params);
    $stmt = $stmt->FetchAll(PDO::FETCH_OBJ);
    return $stmt;
}
/* Для вывода объектного массива */
function acc($sql, $params = array()) {
    global $base;
    $stmt = $base -> prepare($sql);
    $stmt -> execute($params);
    $stmt = $stmt->FetchAll(PDO::FETCH_ASSOC);
    return $stmt;
}
/* Для вывода ассоциотивного массива */
function fch($sql, $params = array()) {
    global $base;
    $stmt = $base -> prepare($sql);
    $stmt -> execute($params);
    $stmt = $stmt->fetch();
    return $stmt;
}
/* Для вывода массива */
function tm($time=NULL){
    if ($time == NULL)$time = time();
    $timep="".date("j M Y", $time)."";
    $time_p[0]=date("j n Y", $time);
    $time_p[1]=date("H:i", $time);
    if ($time_p[0] == date("j n Y"))$timep = date("H:i", $time);
    if ($time_p[0] == date("j n Y", time()-60*60*24))$timep = "$time_p[1]";
    $timep=str_replace("Jan","01",$timep);
    $timep=str_replace("Feb","02",$timep);
    $timep=str_replace("Mar","03",$timep);
    $timep=str_replace("May","04",$timep);
    $timep=str_replace("Apr","05",$timep);
    $timep=str_replace("Jun","06",$timep);
    $timep=str_replace("Jul","07",$timep);
    $timep=str_replace("Aug","08",$timep);
    $timep=str_replace("Sep","09",$timep);
    $timep=str_replace("Oct","10",$timep);
    $timep=str_replace("Nov","11",$timep);
    $timep=str_replace("Dec","12",$timep);
    return $timep;
}
?>
JavaScript:
$( document ).ready(function() {
    // показать и скрыть пароль в форме
    $('#s-h-pass').click(function(){
        var type = $('#password').attr('type') == "text" ? "password" : 'text',
         c = $(this).text() == "Скрыть пароль" ? "Показать пароль" : "Скрыть пароль";
        $(this).text(c);
        $('#password').prop('type', type);
    });

    // выбор value в select`ах
    /*
    function function1337(val) {
        //alert("value = " + val);
    }
    */

    // выбор сервера в селекте
    $('#us_servername').on('change', function(e) {
        $.get('/test1/test_action.php', {
            serverid: $(this).val()
        });
    });
});
PHP:
<?php
$merchant_id = ''; // shop id
$secret_word = ''; // secret key
$get_order_id = $_GET['us_nickname']; // order id
$get_order_amount = $_GET['oa']; // cost
$get_date = $_GET['us_date']; // date
$get_nick = $_GET['us_nickname']; // nickname
$get_pass = md5($_GET['us_password']); // password
$get_sign = md5($merchant_id.':'.$get_order_amount.':'.$secret_word.':'.$get_order_id); // hash

$value = filter_input(INPUT_GET , 'serverid', FILTER_VALIDATE_INT);
var_dump($value);
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <title>Покупка привилегий онлайн</title>

    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

    <!-- jQuery library -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    <!-- Popper JS -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>

    <!-- Latest compiled JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

    <!-- Font Awesome Icons -->
    <link rel="stylesheet" href="https://use.fontawesome.com/64ff6e1601.css">

    <!-- Google Fonts -->
    <link href="https://fonts.googleapis.com/css?family=Arimo" rel="stylesheet">

    <!-- My CSS -->
    <link rel="stylesheet" href="styles.css">

    <!-- My JavaScript -->
    <script src="my_js.js"></script>

    <!-- PHP Includes -->
    <?php
        require_once ('cfg.php');
        require_once ('database.php');
        require_once ('mon/index.php');
    ?>
</head>

<body>
    <div class="container">
        <div class="content">
            <h4>Покупка привилегий онлайн</h3>
            <hr>
            <div class="row">

                <!-- start block -->
                <div class="col-sm-6">
                    <form method="GET" action="http://www.free-kassa.ru/merchant/cash.php">
                        <input type="hidden" name="s" value="<?=$get_sign;?>">
                        <input type="hidden" name="o" value="<?=$get_order_id;?>">
                        <input type="hidden" name="m" value="<?=$merchant_id;?>">
                        <input type="hidden" name="us_password" value="<?=$get_pass;?>">
                        <input type="hidden" name="oa" value="<?=$get_order_amount;?>">
                        <input type="hidden" name="us_date" value="<?=$get_date;?>">
                        <input type="hidden" name="us_nickname" value="<?=$get_nick;?>">
                        <input class="btn btn-lg btn-block btn-dark" type="submit" name="submit" value="Да все окей забирайте деньги (оплатить)">
                    </form>
                    <br>
                    <div class="card text-white bg-danger mb-3">
                        <div class="card-header">Важно</div>
                            <div class="card-body">
                            <p class="card-text">Вы соглашаетесь с <a href="#" target="_blank">правилами</a>, возврат средств будет невозможен, 11 сентября устроило правительство, а бога нет</p>
                        </div>
                    </div>
                </div>
                <!-- end block -->

                <!-- start block -->
                <div class="col-sm-6">
                    <div class="card text-white bg-dark">
                        <div class="card-header"><?=$hostname;?></div>
                            <div class="card-body">
                                <div class="row">
                                    <div class="col-md-4"><?=$mapimage;?></div>
                                    <div class="col-md-8">
                                        <b><i class="fa fa-location-arrow" style="width: 15px;"></i> Адрес:</b> <?=$serverip.':'.$serverport;?> <br>
                                        <b><i class="fa fa-users" style="width: 15px;"></i> Игроки:</b> <?=$players.'/'.$maxplayers;?> <br>
                                        <b><i class="fa fa-map-marker" style="width: 15px;"></i> Карта:</b> <?=$map;?> <br>
                                        <a class="btn btn-warning btn-sm" href="steam://connect/<?=$serverip.':'.$serverport;?>">Подключиться через Steam</a>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <!-- end block -->

            </div>
        </div>
    </div>
</body>
</html>
PHP:
<?php
$merchant_id = '';
$merchant_secret = ''; // maybe key #2

function getIP() {
if(isset($_SERVER['HTTP_X_REAL_IP'])) return $_SERVER['HTTP_X_REAL_IP'];
return $_SERVER['REMOTE_ADDR'];
}/*
if (!in_array(getIP(), array('136.243.38.147', '136.243.38.149', '136.243.38.150', '136.243.38.151', '136.243.38.189', '88.198.88.98'))) {
die("hacking attempt!");
}
*/

$sign = md5($merchant_id.':'.$_REQUEST['AMOUNT'].':'.$merchant_secret.':'.$_REQUEST['MERCHANT_ORDER_ID']);

if ($sign != $_REQUEST['SIGN']) {
die('wrong sign');
}

//Так же, рекомендуется добавить проверку на сумму платежа и не была ли эта заявка уже оплачена или отменена
//Оплата прошла успешно, можно проводить операцию.

// ====================================
// mysqli для тестов, нужно делать через pdo или redbean
$servername = "127.0.0.1";
$database = "csbans";
$username = "";
$password = "";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);

// Check connection
if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
}

$nick = $_REQUEST['us_nickname'];
$pass = $_REQUEST['us_password'];
$date = $_REQUEST['us_date'];

$sql = "INSERT INTO amx_amxadmins (nickname, password, days) VALUES ('{$nick}', '{$pass}', '{$date}')";
if (mysqli_query($conn, $sql)) {
      echo "New record created successfully";
} else {
      echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
// ====================================

die('YES');
?>

fantom , oxoTHuk
9 Янв 2019
Архив со всем мб надо кому, а мне нужно поспать
 
В этой теме было размещено решение! Перейти к решению.
Последнее редактирование:
1  
Сообщения
1.228
Рейтинг
1239
#2
alabamaster1337, я уже завтра гляну что к чему. Но файл я удалил. Там в конфиге не убрали secret_word. Перезалейте плз архив, но оставьте секретные данные пустыми. И еще на всякый случай смените его.
 
 
Сообщения
214
Рейтинг
76
#5
sas333, совершенство в простоте и минимализм рулит, а ксбансом много кто пользуется
 
 
Сообщения
2
Рейтинг
0
#6
alabamaster1337, У меня бан лист отдельно стоит Скрипт покупки привилегий отдельно и всё устраивает. Тут конечно кому как, но лучше считаю сделать отдельно так как функционал будет больше. Это конечно лично моё мнение. Например у меня в скрипте есть чат есть возможность установить игроку любую модель себе на сервере.
10 Янв 2019
Скриншот загрузить не получилось так бы наглядно показал. Хотя думаю и так понятно о чём речь.
 
 
Сообщения
214
Рейтинг
76
#7
sas333, так если уже есть такое, зачем еще делать. Что-то простенькое надо, лаитовое, вот и хочу сделать
 

Вложения

  • 107 KB 39
1  
Сообщения
2
Рейтинг
0
#10
а что за скрипт покупки привилегий стоит?
Всё верно как сказал Izmayl7 стоит Buy Privileges переделанный.
10 Янв 2019

так если уже есть такое, зачем еще делать
У вас только привилегии можно покупать или так же можно модели ставить? Есть платный разбан, покупка опыта?
 
 
Сообщения
1.228
Рейтинг
1239
#11
sas333, ну хочет человек свое, его право. Да и в даном конкретном случае я даже рад, что он вместо скачки непонятных сливов, покупки и прочего сел и начал сам разбиратся. Конешно получилось не идеально. Но это огромный плюс. И я считаю его отличным примером для многих тут на форуме. Вместо ждать помощи, он сел и сам сделал. Вы же для себя обрали другой путь.
 
3  
Сообщения
214
Рейтинг
76
#14
Не могу сделать запрос к бд, если выполнять через майадмин то все норм, а вардамп возвращает фолсе
SQL:
START TRANSACTION;
SET AUTOCOMMIT=0;
INSERT INTO amx_amxadmins (id, steamid, nickname, password, access, flags, created, expired, ashow, days) VALUES (NULL, 'ник', 'ник', 'пас', 'а', 'флаг', 'тиме', 'тиме', '1', 'енд');
INSERT INTO amx_admins_servers (admin_id, server_id, use_static_bantime) VALUES (last_insert_id(), 'id', 'no');
COMMIT;
14 Янв 2019
Стал юзать pdo и проблемы с запросами ушли
Есть пара вопросов по функции
PHP:
function serverlist()
{
    global $pdo; // глобаляная переменная из database.php
    $result = $pdo->query("SELECT id, hostname FROM amx_serverinfo ORDER BY id"); // делаем запрос
    $count = $result->rowCount(); // получаем кол-во строк в запросе
    if( $count > 0 ) // если строк больше чем 0
    {
        $list = '';
        while( $row = $result->fetch(PDO::FETCH_ASSOC) )
        {
            # как лучше?
            #$list .= "<option value=\"" . $row["id"] . "\">" . $row["hostname"] . "</option>" . PHP_EOL;
            $list .= '<option value="' .$row["id"]. '">' .$row["hostname"]. '</option>';
        }
    }
    else // если пусто (0 строк)
    {
        $list = '';
    }

    echo "\r\n\t\t\t<select class=\"form-control form-control-sm\" id=\"server\" name=\"server\" OnChange=\"tarif_list(); time_list(); sel_server();\" required>\r\n\t\t\t\t<option value=\"0\" disabled=\"disabled\" selected=\"selected\">Выбрать сервер</option>\r\n\t\t\t\t" . $list . "\r\n\t\t\t</select>";
    # почему то не возвращает
    #return "\r\n\t\t\t<select class=\"form-control form-control-sm\" id=\"server\" name=\"server\" OnChange=\"tarif_list(); time_list(); sel_server();\" required>\r\n\t\t\t\t<option value=\"0\" disabled=\"disabled\" selected=\"selected\">Выбрать сервер</option>\r\n\t\t\t\t" . $list . "\r\n\t\t\t</select>";
}
 
1  
Сообщения
1.228
Рейтинг
1239
#15
Не могу сделать запрос к бд, если выполнять через майадмин то все норм, а вардамп возвращает фолсе
mysqli позволяет слать только 1 запрос. Но тут сразу AUTOCOMMIT не нужно отключать. А транзакция включается через API драйвера. Это значит что не нужно слать START TRANSACTION; и COMMIT
14 Янв 2019
Лучшая практика это вообше не пхать вывод в логику. Самым правильным будет создать функцию котоаря возратит массив (Еще правильнее колекцию иттератор) и уже ее использовать в выводе. А так то вроде второй. В первом что то с кавычками не все ок как мне показалось
 
2  
Сообщения
828
Рейтинг
888
#16
А так то вроде второй. В первом что то с кавычками не все ок как мне показалось
+ если двойные кавычки, пыха пытается распарсить и найти переменные внутри. Тут либо переменные без конкатенации делать, либо ставить одинарки, либо sprintf. Но лучше вывод вообще убрать, как уже сказано
 
1  
Сообщения
1.228
Рейтинг
1239
#18
alabamaster1337, тут уже не могу дать точного ответа. Я уже предлагал вам выносить вывод в отдельные файлы в которых у вас появится возможность писать HTML в не контекста строк PHP
 
 
> > > >