$user = db_get_row($mysqli, "SELECT * FROM users WHERE email=?", [$email]);
$_buf = array(
"LINK.USLUGI" => "/page/uslugi",
"LINK.CONTACT" => "/contact",
"EMAIL" => "email@domain.zone",
"TG.CANNEL" => "https://t.me/cannel",
"TG.PERS" => "https://t.me/",
"VK.PERS" => "https://vk.com/id",
"VK.GROUP" => "https://vk.com/group"
);
$buffer = ob_get_contents();
foreach($_buf as $k => $v)
{
$buffer = str_replace("{{ {$k} }}", $v, $buffer);
}
ob_end_clean();
echo $buffer;
<?php
function numberOfDecimals($value)
{
if ((int)$value == $value)
{
return 0;
}
else if (! is_numeric($value))
{
// throw new Exception('numberOfDecimals: ' . $value . ' is not a number!');
return false;
}
return strlen($value) - strrpos($value, '.') - 1;
}
function roulette($items)
{
$sumOfPercents = 0;
foreach($items as $itemsPercent)
{
$sumOfPercents += $itemsPercent;
}
$decimals = numberOfDecimals($sumOfPercents);
$multiplier = 1;
for ($i=0; $i < $decimals; $i++)
{
$multiplier *= 10;
}
$sumOfPercents *= $multiplier;
$rand = rand(1, $sumOfPercents);
//echo "max percent = {$sumOfPercents}\n";
//echo "rand = $rand\n";
$rangeStart = 1;
foreach($items as $itemKey => $itemsPercent)
{
$rangeFinish = $rangeStart + ($itemsPercent * $multiplier);
//echo "$itemKey in [$rangeStart, $rangeFinish]\n";
if($rand >= $rangeStart && $rand <= $rangeFinish)
{
return $itemKey;
}
$rangeStart = $rangeFinish + 1;
}
}
$items = array('item-1' => 0.25, 'item-2' => 0.5, 'item-3' => 5, 'item-4' => 4.25333);
echo roulette($items);
<script>
var error = document.querySelector('#result');
if (error.querySelector('.success, .error') != null) {
var type = error.querySelector('.success, .error').className;
console.log(type);
//$('#error').css("opacity","1").css("z-index","100000");
swal({
position: 'center',
type: type,
title: '<?php if ($this->error) echo $this->error; ?>',
showConfirmButton: false,
timer: 2500
})
</script>
$de_donat = new \app\models\donat();
$dechart = $de_donat->getUserDonat($this->usid, 5, 5);
foreach($dechart as $v) {
$data[] = $v->sum;
}
echo json_encode($data)."<br>";
new Date(2017, 0, 1)
? Это первое января текущего года. То есть, условие (new Date()) > ts
всегда оказывается истинным, и... ну да, выставляется дата, на 27 дней больше текущей. Ничего удивительного, что у вас постоянно происходит "обновление счета". Вы уж разберитесь, к какому моменту времени надо делать обратный отсчёт. var $data;
$data = $('#mlog').serialize();
var $data = $('#mlog').serialize();
data:
.removeClass("hidden_toast").addClass("visible_toast");
скорее всего это можно переписать так, чтобы добавлять/убирать один класс, но не трогать второй.$('#Login').click(function(e) {
e.preventDefault();
$.ajax({
url: "/ajax/manager.php?p=1",
type: 'post',
data: $('#mlog').serialize(),
success: function(result) {
$('#hum').html(result);
$("#toast-container")
.removeClass("hidden")
.delay(3000)
.fadeOut(500, function(){ // on complete
$("#hum").html('');
});
}
});
})
var tRish = "tits_rish_a1 tits_rish_a2 tits_rish_a3";
var tRishClasses = tRish.split(' ').map(e=>'.' + e).join(', '); // список классов .tits_rish_a1, .tits_rish...
var tClick = "#tits_click_a1, #tits_click_a2, #tits_click_a3";
$(function() {
function onClick(e) {
var n = (n = this.id.match(/b(\d+)/)) ? n[1] : null; // n == 1, 2 или 3
if(!n) return;
$(tClick).removeClass(tRish).addClass( 'tits_rish_a' + n);
// $(tClick).attr('id', 'tits_click_a' + n); // id менять некошерно!
$(tRishClasses).attr('style', '');
}
$('#b1, #b2, #b3').on('click', onClick);
});
#b2 => 2
и далее использует полученный номер для составления классов/id. <?
$r = array();
$d = array();
$query = $mysqli->query("SELECT * FROM history WHERE id2='1'");
while ($set = $query->fetch_array()) {
$r[] = $set['sum'];
$d[] = '"'.date("d.m", $set['time']).'"';
}
$dt = implode(", ", $d);
$str = implode(", ", $r);
?>
var myArr = [<?=$str?>];
var Date = [<?=$dt?>];