Единый валидатор имён.
This commit is contained in:
parent
078cb49669
commit
bfc075010d
@ -57,12 +57,6 @@ class Register
|
||||
'effects' => [8, 20, 25, 37, 38, 283, 296, 412, 472],
|
||||
],
|
||||
];
|
||||
private array $restrictedLogins = [
|
||||
'ангел', 'angel', 'администрация', 'administration', 'Комментатор',
|
||||
'Мироздатель', 'Мусорщик', 'Падальщик', 'Повелитель',
|
||||
'Архивариус', 'Пересмешник', 'Волынщик', 'Лорд Разрушитель',
|
||||
'Милосердие', 'Справедливость', 'Искушение', 'Вознесение',
|
||||
];
|
||||
|
||||
public function hasGoodEmail(string $email): bool
|
||||
{
|
||||
@ -141,40 +135,30 @@ class Register
|
||||
|
||||
public function hasGoodLogin(string $login): bool
|
||||
{
|
||||
$isRestricted = in_array($login, $this->restrictedLogins);
|
||||
$isRegistered = Db::getValue('select count(*) from users where login = ?', [$login]);
|
||||
//Бывшие в употреблении логины. Дичь, но ладно.
|
||||
$wasRegistered = Db::getValue('select count(*) from lastnames where login = ?', [$login]);
|
||||
$login = str_replace(' ', ' ', $login);
|
||||
if (mb_strlen($login) > 20) {
|
||||
$this->error = 'Логин должен содержать не более 20 символов.';
|
||||
}
|
||||
if (mb_strlen($login) < 4) {
|
||||
$this->error = 'Логин должен содержать не менее 4 символов.';
|
||||
}
|
||||
if ($this->hasMixedLatCur($login)) {
|
||||
$this->error = 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.';
|
||||
}
|
||||
if (substr_count($login, ' ') + substr_count($login, '-') + substr_count($login, '_') > 2) {
|
||||
$this->error = 'Не более двух разделителей одновременно (пробел, тире, нижнее подчеркивание).';
|
||||
}
|
||||
if (!empty($this->error)) {
|
||||
$validator = (new \Validator\Login())->setLogin($login);
|
||||
if (!$validator->check()) {
|
||||
$this->error = match ($validator->getErrorCode()) {
|
||||
1 => 'Логин ' . $login . ' уже занят, выберите другой.',
|
||||
2 => 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.',
|
||||
3 => 'Логин должен содержать не менее ' . $validator::LENGTH['min'] . ' символов.',
|
||||
4 => 'Логин должен содержать не более ' . $validator::LENGTH['max'] . ' символов.',
|
||||
5 => 'Не более двух разделителей одновременно (пробел, тире, нижнее подчеркивание).',
|
||||
6 => 'В логине используются запрещённые символы.',
|
||||
};
|
||||
$this->error .= '<br>Пример правильного никнейма: Петя Убиватор, Коля, xalop.<br>Пример неправильного никнейма: )))), kolя)=-/.';
|
||||
}
|
||||
if ($isRegistered || $wasRegistered || $isRestricted) {
|
||||
$this->error = 'Логин ' . $login . ' уже занят, выберите другой.';
|
||||
} else {
|
||||
$login = $validator->get();
|
||||
$isRegistered = Db::getValue('select count(*) from users where login = ?', [$login]);
|
||||
//Бывшие в употреблении логины. Дичь, но ладно.
|
||||
$wasRegistered = Db::getValue('select count(*) from lastnames where login = ?', [$login]);
|
||||
if ($isRegistered || $wasRegistered) {
|
||||
$this->error = 'Логин ' . $login . ' уже занят, выберите другой.';
|
||||
}
|
||||
}
|
||||
|
||||
return !$this->error;
|
||||
}
|
||||
|
||||
public function hasMixedLatCur(string $txt): bool
|
||||
{
|
||||
$en = preg_match("/^(([0-9A-z -])+)$/iu", $txt);
|
||||
$ru = preg_match("/^([а-яёіїє\s\d]*)$/iu", $txt);
|
||||
return ($ru && $en) || (!$ru && !$en);
|
||||
}
|
||||
|
||||
private function setCookies($login): void
|
||||
{
|
||||
setcookie('login', 1, 1, '/', Config::get('host'), true);
|
||||
|
67
_incl_data/class/Validator/Login.php
Normal file
67
_incl_data/class/Validator/Login.php
Normal file
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace Validator;
|
||||
|
||||
class Login
|
||||
{
|
||||
private const RESTRICTED = [
|
||||
'ангел', 'angel', 'администрация', 'administration', 'Комментатор',
|
||||
'Мироздатель', 'Мусорщик', 'Падальщик', 'Повелитель',
|
||||
'Архивариус', 'Пересмешник', 'Волынщик', 'Лорд Разрушитель',
|
||||
'Милосердие', 'Справедливость', 'Искушение', 'Вознесение',
|
||||
];
|
||||
public const LENGTH = ['min' => 4, 'max' => 16];
|
||||
protected readonly string $login;
|
||||
private int $errorcode = 0;
|
||||
|
||||
public function getErrorCode(): int
|
||||
{
|
||||
return $this->errorcode;
|
||||
}
|
||||
|
||||
public function setLogin(string $login): self
|
||||
{
|
||||
$login = preg_replace('!\s+!', ' ', $login); // remove inner spaces
|
||||
$login = trim($login); // remove outer spaces
|
||||
$this->login = $login;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function get(): string
|
||||
{
|
||||
return $this->check() ? $this->login : '';
|
||||
}
|
||||
|
||||
public function check(): bool
|
||||
{
|
||||
if (!$this->isAllowed()) {
|
||||
$this->errorcode = 1;
|
||||
} elseif ($this->isMixed()) {
|
||||
$this->errorcode = 2;
|
||||
} elseif (mb_strlen($this->login) < self::LENGTH['min']) {
|
||||
$this->errorcode = 3;
|
||||
} elseif (mb_strlen($this->login) > self::LENGTH['max']) {
|
||||
$this->errorcode = 4;
|
||||
} elseif (substr_count($this->login, ' ') + substr_count($this->login, '-') + substr_count($this->login, '_') > 2) {
|
||||
$this->errorcode = 5;
|
||||
} elseif (strpos("!@#$%^&*()\+|/'\"", $this->login) || empty($this->login)) {
|
||||
$this->errorcode = 6;
|
||||
}
|
||||
|
||||
return $this->errorcode === 0;
|
||||
}
|
||||
|
||||
private function isAllowed(): bool
|
||||
{
|
||||
$d = implode('|', self::RESTRICTED);
|
||||
$pattern = "/\b($d)\b/iu";
|
||||
return !preg_match($pattern, $this->login);
|
||||
}
|
||||
|
||||
private function isMixed(): bool
|
||||
{
|
||||
$en = preg_match("/^(([0-9A-z -])+)$/iu", $this->login);
|
||||
$ru = preg_match("/^([а-яёіїє\s\d]*)$/iu", $this->login);
|
||||
return ($ru && $en) || (!$ru && !$en);
|
||||
}
|
||||
}
|
@ -1,102 +1,39 @@
|
||||
<?php
|
||||
//Вызывается из ekr.php
|
||||
define('GAME', true);
|
||||
//fixme Технически это всратое API и ему самое место в API.
|
||||
use Core\Db;
|
||||
use Validator\Login;
|
||||
|
||||
const GAME = true;
|
||||
include_once('_incl_data/__config.php');
|
||||
include_once('_incl_data/class/__db_connect.php');
|
||||
|
||||
if (!isset($_GET['login'])) {
|
||||
return;
|
||||
}//
|
||||
}
|
||||
|
||||
$_GET['login'] = htmlspecialchars($_GET['login'], null);
|
||||
//
|
||||
$bad = [
|
||||
'Мусорщик' => 1,
|
||||
'Мироздатель' => 1,
|
||||
];
|
||||
//
|
||||
function en_ru($txt)
|
||||
{
|
||||
$g = false;
|
||||
$en = preg_match("/^(([0-9a-zA-Z _-])+)$/i", $txt);
|
||||
$ru = preg_match("/^(([0-9а-яА-Я _-])+)$/i", $txt);
|
||||
if (($ru && $en) || (!$ru && !$en)) {
|
||||
$g = true;
|
||||
}
|
||||
return $g;
|
||||
}
|
||||
|
||||
//
|
||||
function testBad($txt): bool
|
||||
{
|
||||
$white = '-_ 0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю';
|
||||
$r = false;
|
||||
$i = 0;
|
||||
while ($i != -1) {
|
||||
if (isset($txt[$i])) {
|
||||
$g = false;
|
||||
$j = 0;
|
||||
while ($j != -1) {
|
||||
if (isset($white[$j])) {
|
||||
if ($white[$j] == $txt[$i]) {
|
||||
$g = true;
|
||||
}
|
||||
} else {
|
||||
$j = -2;
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
if ($g == false) {
|
||||
$r = true;
|
||||
}
|
||||
} else {
|
||||
$i = -2;
|
||||
$validator = new class extends Login {
|
||||
private function exist(): bool
|
||||
{
|
||||
return Db::getValue('select count(login) from users where login = ?', [$this->login]) > 0;
|
||||
}
|
||||
|
||||
public function getstatus(): string
|
||||
{
|
||||
if ($this->exist()) {
|
||||
return '<b style="color:red">Логин занят.</b>';
|
||||
}
|
||||
$i++;
|
||||
if (parent::check()) {
|
||||
return '<b style="color:green">Логин свободен!</b>';
|
||||
}
|
||||
return '<b style="color:red">Неверный логин.</b>';
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
$login = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id` FROM `users` WHERE `login` = "' . mysql_real_escape_string($_GET['login']) . '" LIMIT 1'
|
||||
)
|
||||
);
|
||||
if (isset($login['id']) || isset($bad[$_GET['login']])) {
|
||||
echo '<b style="color:red">Логин занят.</b>';
|
||||
} else {
|
||||
$true = true;
|
||||
echo $validator->setLogin($_GET['login'])->getstatus();
|
||||
|
||||
/*
|
||||
Логин может содержать от 4 до 16 символов, и состоять только из букв русского ИЛИ английского алфавита, цифр, символов '_', '-' и пробела.
|
||||
Логин не может начинаться или заканчиваться символами '_', '-' или пробелом.
|
||||
*/
|
||||
|
||||
$_GET['login'] = str_replace(' ', ' ', $_GET['login']);
|
||||
$_GET['login'] = str_replace('%', ' ', $_GET['login']);
|
||||
$_GET['login'] = str_replace(' ', ' ', $_GET['login']);
|
||||
//
|
||||
if (strlen($_GET['login']) > 16) {
|
||||
$true = false;
|
||||
} elseif (strlen($_GET['login']) < 4) {
|
||||
$true = false;
|
||||
} elseif (strripos($_GET['login'], ' ')) {
|
||||
$true = false;
|
||||
} elseif (substr($_GET['login'], 1) == ' ' || substr($_GET['login'], -1) == ' ') {
|
||||
$true = false;
|
||||
} elseif (substr($_GET['login'], 1) == '-' || substr($_GET['login'], -1) == '-') {
|
||||
$true = false;
|
||||
} elseif (substr($_GET['login'], 1) == '_' || substr($_GET['login'], -1) == '_') {
|
||||
$true = false;
|
||||
} elseif (testBad($_GET['login'])) {
|
||||
$true = false;
|
||||
} elseif (en_ru(str_replace('ё', 'е', str_replace('Ё', 'Е', $_GET['login'])))) {
|
||||
$true = false;
|
||||
}
|
||||
//
|
||||
if (!$true) {
|
||||
echo '<b style="color:red">Неверный логин.</b>';
|
||||
} else {
|
||||
echo '<b style="color:green">Логин свободен!</b>';
|
||||
}
|
||||
}
|
||||
//todo Написать класс, который будет использоваться тут, в ekr.php, в _newanimal.php и в проверках при регистрации.
|
||||
//todo При этом сюда стоит подтягивать наследование класса, в который просто добавляется проверка на exist() которая не нужна в других местах.
|
||||
//todo function testBad($txt), function is_login($login), function en_ru($txt)
|
||||
|
156
ekr.php
156
ekr.php
@ -4,6 +4,7 @@ use Core\Config;
|
||||
use Core\Database;
|
||||
use Core\Db;
|
||||
use Model\EkrExchangeRates;
|
||||
use Validator\Login;
|
||||
|
||||
if (!defined('GAME_VERSION')) {
|
||||
require_once '_incl_data/autoload.php';
|
||||
@ -431,142 +432,39 @@ if (isset($_POST['do']) && $_POST['do'] == 'newShadow') {
|
||||
$day1 = round($day1def + $dc1, 2);
|
||||
$day2 = round($day2def + $dc2, 2);
|
||||
} elseif (isset($_POST['login'])) {
|
||||
//
|
||||
function en_ru($txt)
|
||||
{
|
||||
$g = false;
|
||||
$en = preg_match("/^(([0-9a-zA-Z _-])+)$/i", $txt);
|
||||
$ru = preg_match("/^(([0-9а-яА-Я _-])+)$/i", $txt);
|
||||
if (($ru && $en) || (!$ru && !$en)) {
|
||||
$g = true;
|
||||
}
|
||||
return $g;
|
||||
}
|
||||
$newlogin = (new Login())->setLogin($_POST['login'])->get();
|
||||
|
||||
//
|
||||
function testBad($txt)
|
||||
{
|
||||
$white = '-_ 0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMїЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮїйцукенгшщзхъфывапролджэячсмитьбю';
|
||||
$r = false;
|
||||
$i = 0;
|
||||
while ($i != -1) {
|
||||
if (isset($txt[$i])) {
|
||||
$g = false;
|
||||
$j = 0;
|
||||
while ($j != -1) {
|
||||
if (isset($white[$j])) {
|
||||
if ($white[$j] == $txt[$i]) {
|
||||
$g = true;
|
||||
}
|
||||
} else {
|
||||
$j = -2;
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
if (!$g) {
|
||||
$r = true;
|
||||
}
|
||||
} else {
|
||||
$i = -2;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
function is_login($login)
|
||||
{
|
||||
$r = true;
|
||||
//
|
||||
$login = htmlspecialchars($login, null);
|
||||
//
|
||||
$bad = [
|
||||
'Мусорщик' => 1,
|
||||
'Мироздатель' => 1,
|
||||
];
|
||||
|
||||
//
|
||||
$login_db = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id` FROM `users` WHERE `login` = "' . mysql_real_escape_string($login) . '" LIMIT 1'
|
||||
)
|
||||
);
|
||||
if (isset($login_db['id']) || isset($bad[$login])) {
|
||||
$r = false;
|
||||
} else {
|
||||
$true = true;
|
||||
//
|
||||
/*
|
||||
Логин может содержать от 4 до 16 символов, и состоять только из букв русского ИЛИ английского алфавита, цифр, символов '_', '-' и пробела.
|
||||
Логин не может начинаться или заканчиваться символами '_', '-' или пробелом.
|
||||
*/
|
||||
//
|
||||
$login = str_replace(' ', ' ', $login);
|
||||
$login = str_replace('%', ' ', $login);
|
||||
$login = str_replace(' ', ' ', $login);
|
||||
//
|
||||
if (strlen($login) > 16) {
|
||||
$true = false;
|
||||
} elseif (strlen($login) < 4) {
|
||||
$true = false;
|
||||
} elseif (strripos($login, ' ') == true) {
|
||||
$true = false;
|
||||
} elseif (substr($login, 1) == ' ' || substr($login, -1) == ' ') {
|
||||
$true = false;
|
||||
} elseif (substr($login, 1) == '-' || substr($login, -1) == '-') {
|
||||
$true = false;
|
||||
} elseif (substr($login, 1) == '_' || substr($login, -1) == '_') {
|
||||
$true = false;
|
||||
} elseif (testBad($login) == true) {
|
||||
$true = false;
|
||||
} elseif (en_ru(str_replace('ї', 'е', str_replace('ї', 'Е', $login))) == true) {
|
||||
$true = false;
|
||||
}
|
||||
//
|
||||
if ($true == false) {
|
||||
$r = false;
|
||||
} else {
|
||||
$r = true;
|
||||
}
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
if ($u->info['login'] == $_POST['login']) {
|
||||
if (!empty($newlogin) && $u->info['login'] === $newlogin) {
|
||||
$u->error = 'Выберите другой логин...';
|
||||
} elseif ($u->info['money2'] < 25) {
|
||||
$u->error = 'Недостаточно средств.';
|
||||
} else {
|
||||
$login = htmlspecialchars($_POST['login'], null);
|
||||
if (is_login($login) == true) {
|
||||
mysql_query(
|
||||
'INSERT INTO `lastnames` ( `uid`,`login`,`newlogin`,`time` ) VALUES (
|
||||
mysql_query(
|
||||
'INSERT INTO `lastnames` ( `uid`,`login`,`newlogin`,`time` ) VALUES (
|
||||
"' . $u->info['id'] . '","' . $u->info['login'] . '","' . mysql_real_escape_string(
|
||||
$login
|
||||
) . '","' . time() . '"
|
||||
$newlogin
|
||||
) . '","' . time() . '"
|
||||
)'
|
||||
);
|
||||
$u->info['login_last'] = $u->info['login'];
|
||||
$u->info['login'] = $login;
|
||||
$u->info['money2'] -= 25;
|
||||
//
|
||||
mysql_query(
|
||||
"UPDATE `items_users` SET `data` = replace( `data` , 'sudba=" . $u->info['login_last'] . "', 'sudba=" . mysql_real_escape_string(
|
||||
$u->info['login']
|
||||
) . "') WHERE `data` LIKE '%sudba=" . mysql_real_escape_string(
|
||||
$u->info['login_last']
|
||||
) . "%' AND `uid` = '" . $u->info['id'] . "'"
|
||||
);
|
||||
//
|
||||
mysql_query(
|
||||
'UPDATE `users` SET `login` = "' . mysql_real_escape_string(
|
||||
$u->info['login']
|
||||
) . '", `money2` = "' . $u->info['money2'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
|
||||
);
|
||||
$u->error = 'Вы успешно сменили логин на "' . $u->info['login'] . '" перезайдите в игру с главной страницы.';
|
||||
} else {
|
||||
$u->error = 'Выберите другой логин...';
|
||||
}
|
||||
);
|
||||
$u->info['login_last'] = $u->info['login'];
|
||||
$u->info['login'] = $newlogin;
|
||||
$u->addEkr(-25);
|
||||
|
||||
mysql_query(
|
||||
"UPDATE `items_users` SET `data` = replace( `data` , 'sudba=" . $u->info['login_last'] . "', 'sudba=" . mysql_real_escape_string(
|
||||
$u->info['login']
|
||||
) . "') WHERE `data` LIKE '%sudba=" . mysql_real_escape_string(
|
||||
$u->info['login_last']
|
||||
) . "%' AND `uid` = '" . $u->info['id'] . "'"
|
||||
);
|
||||
|
||||
mysql_query(
|
||||
'UPDATE `users` SET `login` = "' . mysql_real_escape_string(
|
||||
$u->info['login']
|
||||
) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
|
||||
);
|
||||
$u->error = 'Вы успешно сменили логин на "' . $u->info['login'] . '" перезайдите в игру с главной страницы.';
|
||||
|
||||
}
|
||||
} elseif (isset($_GET['buy_ekr'])) {
|
||||
//
|
||||
|
@ -1,4 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Model\Constant\Stat;
|
||||
use Validator\Login;
|
||||
|
||||
echo "
|
||||
<script language='JavaScript'>
|
||||
var elem = document.getElementById('se-pre-con');
|
||||
@ -19,39 +23,19 @@ if (!isset($an['id'])) {
|
||||
mysql_query('UPDATE `users` SET `animal` = "0" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
|
||||
mysql_query('UPDATE `users_animal` SET `delete` = "' . time() . '" WHERE `uid` = "' . $u->info['id'] . '" AND `id` = "' . $an['id'] . '" AND `delete` = "0" LIMIT 1');
|
||||
} elseif (isset($_GET['anml_login']) && $an['renameArrayKeys'] == 0) {
|
||||
$n = 1;
|
||||
function en_ru($txt)
|
||||
{
|
||||
$g = false;
|
||||
$en = preg_match("/^(([a-zA-Z _-])+)$/i", $txt);
|
||||
$ru = preg_match("/^(([а-яА-Я _-])+)$/i", $txt);
|
||||
if (($ru && $en) || (!$ru && !$en)) {
|
||||
$g = true;
|
||||
}
|
||||
return $g;
|
||||
}
|
||||
|
||||
$nl = htmlspecialchars($_GET['anml_login'], null);
|
||||
$nl = str_replace(' ', '', $nl);
|
||||
$nl = str_replace(' ', '', $nl);
|
||||
$sr = "!@#$%^&*()\+Ёё|/'`\"-_";
|
||||
if ($nl == '' || strlen($nl) > 10 || strlen($nl) < 2 || en_ru($nl) == true || strpos($sr, $nl)) {
|
||||
$n = 0;
|
||||
} else {
|
||||
$nl = (new Login())->setLogin($_GET['anml_login'])->get();
|
||||
|
||||
}
|
||||
|
||||
|
||||
if ($n == 1) {
|
||||
if (!empty($nl)) {
|
||||
mysql_query(
|
||||
'UPDATE `users_animal` SET `name` = "' . mysql_real_escape_string(
|
||||
$nl
|
||||
) . '",`renameArrayKeys` = "1" WHERE `uid` = "' . $u->info['id'] . '" AND `id` = "' . $an['id'] . '" AND `delete` = "0" LIMIT 1'
|
||||
);
|
||||
$an['renameArrayKeys'] = 1;
|
||||
echo '<font color="red">Вы успешно переименовали питомца в "' . $nl . '"</font>';
|
||||
echo '<span style="color: red; ">Вы успешно переименовали питомца в "' . $nl . '"</span>';
|
||||
} else {
|
||||
echo '<font color="red">Эта кличка не подходит</font>';
|
||||
echo '<span style="color: red; ">Эта кличка не подходит</span>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -195,7 +179,7 @@ if (!isset($an['id'])) {
|
||||
<?php
|
||||
$ba = '';
|
||||
$i = 0;
|
||||
$statnames = new \Model\Constant\Stat();
|
||||
$statnames = new Stat();
|
||||
$statnames->getBonus();
|
||||
|
||||
while ($i < count($statnames->sysBonusNames)) {
|
||||
|
@ -43,98 +43,6 @@ $an_eda = [
|
||||
7.00,
|
||||
];
|
||||
|
||||
function en_ru($txt)
|
||||
{
|
||||
$g = false;
|
||||
$en = preg_match("/^(([0-9a-zA-Z _-])+)$/i", $txt);
|
||||
$ru = preg_match("/^(([0-9а-яА-Я _-])+)$/i", $txt);
|
||||
if (($ru && $en) || (!$ru && !$en)) {
|
||||
$g = true;
|
||||
}
|
||||
return $g;
|
||||
}
|
||||
|
||||
//
|
||||
function testBad($txt)
|
||||
{
|
||||
$white = '-_ 0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю';
|
||||
$r = false;
|
||||
$i = 0;
|
||||
while ($i != -1) {
|
||||
if (isset($txt[$i])) {
|
||||
$g = false;
|
||||
$j = 0;
|
||||
while ($j != -1) {
|
||||
if (isset($white[$j])) {
|
||||
if ($white[$j] == $txt[$i]) {
|
||||
$g = true;
|
||||
}
|
||||
} else {
|
||||
$j = -2;
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
if (!$g) {
|
||||
$r = true;
|
||||
}
|
||||
} else {
|
||||
$i = -2;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
function is_login_an($login)
|
||||
{
|
||||
$r = true;
|
||||
//
|
||||
$login = htmlspecialchars($login, null);
|
||||
//
|
||||
$bad = [
|
||||
'Мусорщик' => 1,
|
||||
'Мироздатель' => 1,
|
||||
];
|
||||
//
|
||||
if (isset($login_db['id']) || isset($login_an_db['id']) || isset($bad[$login])) {
|
||||
$r = false;
|
||||
} else {
|
||||
$true = true;
|
||||
//
|
||||
/*
|
||||
Логин может содержать от 2 до 16 символов, и состоять только из букв русского ИЛИ английского алфавита, цифр, символов '_', '-' и пробела.
|
||||
Логин не может начинаться или заканчиваться символами '_', '-' или пробелом.
|
||||
*/
|
||||
//
|
||||
$login = str_replace(' ', ' ', $login);
|
||||
$login = str_replace('%', ' ', $login);
|
||||
$login = str_replace(' ', ' ', $login);
|
||||
//
|
||||
if (strlen($login) > 16) {
|
||||
$true = false;
|
||||
} elseif (strlen($login) < 2) {
|
||||
$true = false;
|
||||
} elseif (strripos($login, ' ') == true) {
|
||||
$true = false;
|
||||
} elseif (substr($login, 1) == ' ' || substr($login, -1) == ' ') {
|
||||
$true = false;
|
||||
} elseif (substr($login, 1) == '-' || substr($login, -1) == '-') {
|
||||
$true = false;
|
||||
} elseif (substr($login, 1) == '_' || substr($login, -1) == '_') {
|
||||
$true = false;
|
||||
} elseif (testBad($login) == true) {
|
||||
$true = false;
|
||||
} elseif (en_ru(str_replace('ё', 'е', str_replace('Ё', 'Е', $login))) == true) {
|
||||
$true = false;
|
||||
}
|
||||
//
|
||||
if (!$true) {
|
||||
$r = false;
|
||||
}
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
if (isset($_GET['buy_slot'])) {
|
||||
if ($u->info['money2'] < $slot['price_nex']) {
|
||||
$u->error = 'Недостаточно денег';
|
||||
@ -150,8 +58,9 @@ if (isset($_GET['buy_slot'])) {
|
||||
$u->error = 'Нельзя купить больше слотов';
|
||||
}
|
||||
} elseif (isset($_GET['pet'])) {
|
||||
$newpetname = (new \Validator\Login())->setLogin($_GET['petname'])->get();
|
||||
|
||||
$_GET['pet'] = round((int)$_GET['pet']);
|
||||
$_GET['petname'] = htmlspecialchars($_GET['petname'], null);
|
||||
$ax = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `users_animal` WHERE `uid` = "' . $u->info['id'] . '" AND `delete` = 0 LIMIT 1'));
|
||||
$ax = $ax[0];
|
||||
if ($_GET['pet'] < 1 || $_GET['pet'] > 7) {
|
||||
@ -160,12 +69,12 @@ if (isset($_GET['buy_slot'])) {
|
||||
$u->error = 'Нет свободных слотов для зверя';
|
||||
} elseif ($u->info['money'] < 50) {
|
||||
$u->error = 'Недостаточно денег';
|
||||
} elseif (!is_login_an($_GET['petname'])) {
|
||||
} elseif (!empty($_GET['petname']) && !$newpetname) {
|
||||
$u->error = 'Неверная кличка зверя, выберите другую';
|
||||
} else {
|
||||
$u->error = 'Зверь пришел к Вам!';
|
||||
$u->info['money'] -= 50;
|
||||
mysql_query('UPDATE `users` SET `money` = "' . $u->info['money'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
|
||||
$u->addKr(-50);
|
||||
|
||||
//
|
||||
$anm['type'] = $_GET['pet'];
|
||||
//
|
||||
@ -206,8 +115,9 @@ if (isset($_GET['buy_slot'])) {
|
||||
$anm['stats'] = 's1=5|s2=3|s3=3|s4=5|rinv=40|m9=5|m6=10';
|
||||
}
|
||||
//
|
||||
$anm['name'] = htmlspecialchars($_GET['petname'], null);
|
||||
$anm['name'] = preg_replace("/&#?[a-z0-9]+;/i", "", $anm['name']);
|
||||
if (!empty($_GET['petname'])) {
|
||||
$anm['name'] = htmlspecialchars($newpetname, null);
|
||||
}
|
||||
//
|
||||
$anm['obraz'] = $anm['obraz'][rand(1, count($anm['obraz']))];
|
||||
$anm['obraz'] = str_replace('.gif', '', $anm['obraz']);
|
||||
@ -221,7 +131,7 @@ if (isset($_GET['buy_slot'])) {
|
||||
1,
|
||||
'System.inventory',
|
||||
$u->info['id'],
|
||||
'"<span style="color: maroon; ">System.inventory</span>": Персонаж призвал зверя "' . $_GET['petname'] . '" (' . $_GET['pet'] . ') - 50 кр.',
|
||||
'"<span style="color: maroon; ">System.inventory</span>": Персонаж призвал зверя "' . $newpetname . '" (' . $_GET['pet'] . ') - 50 кр.',
|
||||
);
|
||||
} else {
|
||||
$u->error = 'Не удалось призвать зверя, что-то здесь не так ...';
|
||||
@ -404,7 +314,7 @@ if ($u->error != '') {
|
||||
//
|
||||
echo '<td width="16%" align="center" valign="top">';
|
||||
//
|
||||
echo '<div class="an_line"><b><img onclick="top.anrename(' . $pl['id'] . ',\'' . $pl['name'] . '\');" class="cp" src="//img.new-combats.tech/pencil.png" width="16" height="16" title="Изменить кличку"> <small>' . $pl['name'] . '</small> <img onclick="if(confirm(\'Вы действительно хотите ВЫГНАТЬ зверя "' . $pl['name'] . '"?\')) location.href=\'main.php?newanimal&pet_del=' . $pl['id'] . '\';" class="cp" src="//img.new-combats.tech/i/clear.gif" title="Выгнать" width="13" height="13"></b></div>';
|
||||
echo '<div class="an_line"><b><img onclick="top.anrename(' . $pl['id'] . ',\'' . $pl['name'] . " src=" . $pl['name'] . '</small> <img onclick="if(confirm(\'Вы действительно хотите ВЫГНАТЬ зверя "' . $pl['name'] . '"?\')) location.href=\'main.php?newanimal&pet_del=' . $pl['id'] . '\';" class="cp" src="//img.new-combats.tech/i/clear.gif" title="Выгнать" width="13" height="13"></b></div>';
|
||||
//
|
||||
echo '<div title="' . $pl['name'] . '" class="an_border"><img src="//img.new-combats.tech/i/obraz/' . $pl['sex'] . '/' . $pl['obraz'] . '.gif" width="120" height="220"></div>';
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user