Участник
Пользователь
- Сообщения
- 317
- Реакции
- 132
- Предупреждения
- 8
- Помог
- 4 раз(а)
Хочу сделать покупки привилегий работающую с бд csbans`a и сервисом freekassa
Все просто, думал я, ага
Покидайте какие нибудь идеи, предложения, правки или то или сё или что-то еще или иное, ща взорвусь хелп
Сделал форму, обработчик формы, резаулт, от части все работает.
1. Сложно разобраться как сделать зависимые селекты. Выбрать сервер и в селекте ниже услуги именно для этого сервера
2. Мне кажется не правильно сделал обработчик
, мб надо чтоб сразу с index.php перекидывало на кассу
3. Как передать флаги доступа, тут вообще жестко, думается надо выбирать услугу по id как то соединить с id выбранного сервера и что то дальше...
4. Что-то еще уже не помню, потом добавлю
fantom , oxoTHuk Архив со всем мб надо кому, а мне нужно поспать
Все просто, думал я, ага

Сделал форму, обработчик формы, резаулт, от части все работает.
1. Сложно разобраться как сделать зависимые селекты. Выбрать сервер и в селекте ниже услуги именно для этого сервера
2. Мне кажется не правильно сделал обработчик

3. Как передать флаги доступа, тут вообще жестко, думается надо выбирать услугу по id как то соединить с id выбранного сервера и что то дальше...

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
В этой теме было размещено решение! Перейти к решению.
Последнее редактирование: