Перейти к содержанию
Авторизация  
doloto

топ игроков на сайт

Рекомендуемые сообщения

Доброе утро. Может кто нить написать код вывода на сайт топ 10 игроков?

я не шарю.(гуглил... готовых решений не нашел.... могу пару сотен заплатить. Больше не могу сам х без соли доедаю..)

 

сервер pwsoft interlude

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
<?php

class TopPvp {
	
	const PREFIX = 'top_pvp_';
	
	function getPrefix() {
        return self::PREFIX;
    }
    
    function getPath() {
        return "./cache";
    }
    
	private function getOrSave() {
		$path = $this->getPath();
		$files = glob($path.'/'. $this->getPrefix() . '*');
		if(count($files) > 0 && file_exists($files[0])) {
			$a = explode("_", $files[0]);
			$time = intval($a[count($a) - 1]);
			//echo "diff: " . (time() - $time);
			if(time() - $time >= 180) {
				unlink( $files[0] );
				return $this->loadDb();
			} else {
				return file_get_contents($files[0]);
			}
		} else {
			return $this->loadDb();
		}
	}
	
	private function loadDb() {
		require "db.php";
		$sql = 'SELECT characters.char_name, characters.pvpkills, characters.pkkills, characters.onlinetime, clan_subpledges.name, char_templates.ClassName, character_subclasses.class_id, clan_data.crest, ally_data.crest as ally_crest, clan_data.ally_id, clan_data.clan_id '.
		'FROM characters '.
		'LEFT JOIN `clan_subpledges` ON characters.clanid = clan_subpledges.clan_id  AND clan_subpledges.type = 0 '.
		'LEFT JOIN character_subclasses ON character_subclasses.char_obj_id = characters.obj_Id AND character_subclasses.active = 1 '.
		'LEFT JOIN `char_templates` ON char_templates.ClassId = character_subclasses.class_id '.
		'LEFT JOIN `clan_data` ON clan_data.clan_id = characters.clanid '.
		'LEFT JOIN `ally_data` ON ally_data.ally_id = clan_data.ally_id '.
		'ORDER BY pvpkills DESC LIMIT 10;';
		$result = mysqli_query($db, $sql);
		$content = "";
		if(mysqli_num_rows($result) > 0) {
			
			foreach($result as $row) {
				//var_dump($row);
				$content .= "<tr>";
				$content .= '<td>' . $row['char_name'] . '</td>';
				$content .= '<td style="font-weight: bold;">' . $row['pvpkills'] . '</td>';
				$content .= '<td>' . $row['pkkills'] . '</td>';
				if(empty($row['name'])) {
					$content .= '<td>-</td>';
				} else {
					$crest1 = base64_encode($row['crest']);
					$crest2 = base64_encode($row['ally_crest']);
					$content .= '<td><img src="/php/dds.php?data=' . $crest2 . '&id=' . $row['ally_id'] . '"><img src="/php/dds.php?data=' . $crest1 . '&id=' . $row['clan_id'] . '"> ' . $row['name'] . '</td>';
				}
				$content .= '<td>' . $row['ClassName'] . '</td>';
				$online = intval($row['onlinetime']);
				$content .= '<td>';
				$hours = floor($online / 3600);
				$minutes = floor(($online / 60) % 60);
				$seconds = $online % 60;
				$content .= "$hours ч. $minutes мин. $seconds сек.";
				$content .= '</td>';
				$content .= "</tr>";
				//$content .= '<div class="quote">' . $row['char_name'] . ' - ' . $row['pvpkills'] . ' PVP</div>' . "\n";
			}
			
		} else {
			$content .= "<tr><td>-</td><td>-</td><td>-</td><td>-</td></tr>";
		}
		$result->close();
		file_put_contents($this->getPath() . "/" . $this->getPrefix() . "" . time(), $content);
		return $content;
	}
	
	function get() {
		$data = $this->getOrSave();
		//foreach (explode("\n", $data) as $s) {
		//	echo $s;
		//}
		return $data;
	}
}
?>

 

  • Haha 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
29 минут назад, doloto сказал:

Доброе утро. Может кто нить написать код вывода на сайт топ 10 игроков?

я не шарю.(гуглил... готовых решений не нашел.... могу пару сотен заплатить. Больше не могу сам х без соли доедаю..)

 

сервер pwsoft interlude

Возьми stressweb самый простой вариант для начинающих, и регистрация и полноценная статистика со всеми выводами.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, SteveDogs сказал:

Возьми stressweb самый простой вариант для начинающих, и регистрация и полноценная статистика со всеми выводами.

не получается ее активировать как только не пробовал... скорее всего у меня старые апач пшп и тд..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

короче я в шоке))) 

GPTchat мне бесплатно сделал то что я хотел.... Ваше мнение по этому поводу? =))) Это полностью его код))))

Спойлер

<?php
// Подключение к базе данных MySQL
$servername = "localhost";  // Имя сервера базы данных
$username = "username";         // Имя пользователя базы данных
$password = "password";    // Пароль пользователя базы данных
$dbname = "dbname";          // Имя базы данных

// Создание подключения с указанием кодировки UTF-8
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");  // Установка кодировки соединения

// Проверка подключения
if ($conn->connect_error) {
    die("Ошибка подключения: " . $conn->connect_error);
}

// Определяем номер страницы
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$page = max(1, $page); // Номер страницы должен быть не меньше 1

// Определяем количество строк на странице
$rows_per_page = 50;

// Вычисляем смещение для текущей страницы
$offset = ($page - 1) * $rows_per_page;

// Запрос к базе данных с сортировкой по убыванию chat_filter_count
$sql = "SELECT char_name AS Игрок, chat_filter_count AS Рейтинг FROM characters WHERE chat_filter_count BETWEEN 0 AND 999999 ORDER BY CAST(chat_filter_count AS UNSIGNED) DESC LIMIT $offset, $rows_per_page";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // Создаем таблицу для вывода данных
    echo "<table>";
    echo "<tr><th align='left' style='padding-right: 100px;'>Игрок:</th><th align='left'>Рейтинг:</th></tr>";

    // Вывод данных каждой строки
    while ($row = $result->fetch_assoc()) {
        echo "<tr><td align='left'>" . $row["Игрок"] . "</td><td align='left'>" . $row["Рейтинг"] . "</td></tr>";
    }
    
    echo "</table>";

    // Создаем ссылки на страницы
    $sql_count = "SELECT COUNT(*) as count FROM characters WHERE chat_filter_count BETWEEN 0 AND 999999";
    $result_count = $conn->query($sql_count);
    $row_count = $result_count->fetch_assoc();
    $total_rows = $row_count['count'];
    $total_pages = ceil($total_rows / $rows_per_page);

    // Выводим ссылки на страницы
	
    echo "<div class='pagination'>";
    for ($i = 1; $i <= $total_pages; $i++) {
        if ($i == $page) {
            echo "<span class='current-page'>$i</span>";
        } else {
            echo "<a href='?page=$i'>$i</a>";
        }
    }
    echo "</div>";
} else {
    echo "Нет данных";
}

// Закрытие подключения
$conn->close();
?>

 

 

Изменено пользователем doloto

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, doloto сказал:

Ваше мнение по этому поводу?

Лютый, Поповский говнокод. за такое отрывают руки по плечи.

2 часа назад, doloto сказал:

BETWEEN 0 AND 999999

Вощпе убило.:lol:

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
43 минуты назад, Saltfire сказал:

Лютый, Поповский говнокод. за такое отрывают руки по плечи.

Вощпе убило.:lol:

это я его попросил об этом)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
16 часов назад, Saltfire сказал:

Лютый, Поповский говнокод. за такое отрывают руки по плечи.

Вощпе убило.:lol:

А как правильно сделать запрос? Если можно полную строчку.. а я сам ни бум бум)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 часов назад, doloto сказал:

А как правильно сделать запрос? Если можно полную строчку.. а я сам ни бум бум)

$sqlsTops = [
  'topPvp' => 'SELECT `char_name`,`pvpkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pvpkills` > 0 ORDER BY `pvpkills` DESC LIMIT 10',
  'topPk' => 'SELECT `char_name`,`pkkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pkkills` > 0 ORDER BY `pkkills` DESC LIMIT 10',
  'topClans' => 'SELECT `clan_name` AS `char_name`,`reputation_score` AS `kills` FROM `clan_data` WHERE `accesslevel` = 0 AND `reputation_score` > 0 ORDER BY `reputation_score` DESC LIMIT 10'
];

Ну и дальше банальный while цикл на какой хочешь запрос, я просто сразу 3 сделал по обычному post запросу какой нужно меняем топ и все, а цикл всегда один будет.

Изменено пользователем Saltfire
  • Haha 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, Saltfire сказал:

$sqlsTops = [
  'topPvp' => 'SELECT `char_name`,`pvpkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pvpkills` > 0 ORDER BY `pvpkills` DESC LIMIT 10',
  'topPk' => 'SELECT `char_name`,`pkkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pkkills` > 0 ORDER BY `pkkills` DESC LIMIT 10',
  'topClans' => 'SELECT `clan_name` AS `char_name`,`reputation_score` AS `kills` FROM `clan_data` WHERE `accesslevel` = 0 AND `reputation_score` > 0 ORDER BY `reputation_score` DESC LIMIT 10'
];

Ну и дальше банальный while цикл на какой хочешь запрос, я просто сразу 3 сделал по обычному post запросу какой нужно меняем топ и все, а цикл всегда один будет.

Сори я сказал полную... имел ввиду готовую)) Ты мне дал запрос в котором я вижу кучю не понятных символос... незнаю как применить это к моему коду (GPT) мне всего лишь нужны столбцы  "char_name" и " chat_filter_count"....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В вашем случае - это примерно так:

$pageTop = filter_input(INPUT_GET, 'top') ?: 'pvp'; // ?top=pvp
$sqlsTops = [
  'pvp' => 'SELECT `char_name`,`pvpkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pvpkills` > 0 ORDER BY `pvpkills` DESC LIMIT 10',
  'pk' => 'SELECT `char_name`,`pkkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pkkills` > 0 ORDER BY `pkkills` DESC LIMIT 10',
  'clans' => 'SELECT `clan_name` AS `char_name`,`reputation_score` AS `kills` FROM `clan_data` WHERE `accesslevel` = 0 AND `reputation_score` > 0 ORDER BY `reputation_score` DESC LIMIT 10'
];
if(isset($sqlsTops[$pageTop])) {
  $result = $conn->query($sqlsTops[$pageTop]);
  if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
      var_dump($row['char_name'], $row['kills']);
    }
  }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Saltfire сказал:

В вашем случае - это примерно так:


$pageTop = filter_input(INPUT_GET, 'top') ?: 'pvp'; // ?top=pvp
$sqlsTops = [
  'pvp' => 'SELECT `char_name`,`pvpkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pvpkills` > 0 ORDER BY `pvpkills` DESC LIMIT 10',
  'pk' => 'SELECT `char_name`,`pkkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pkkills` > 0 ORDER BY `pkkills` DESC LIMIT 10',
  'clans' => 'SELECT `clan_name` AS `char_name`,`reputation_score` AS `kills` FROM `clan_data` WHERE `accesslevel` = 0 AND `reputation_score` > 0 ORDER BY `reputation_score` DESC LIMIT 10'
];
if(isset($sqlsTops[$pageTop])) {
  $result = $conn->query($sqlsTops[$pageTop]);
  if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
      var_dump($row['char_name'], $row['kills']);
    }
  }
}

 

если б вы мне дали готовый код всей страницы. Я вообще ноль в этом всем) Потому рад был неслыхано когда мне GPT выдал результат который я ему на пальцах обьяснил) Сам я не понимаю что делать с вашим кусочком кода) Если вм сложно. То не утруждайтесь с помощью. Решение GPT меня устраивает на 101 процент)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 часов назад, doloto сказал:

если б вы мне дали готовый код всей страницы. Я вообще ноль в этом всем) Потому рад был неслыхано когда мне GPT выдал результат который я ему на пальцах обьяснил) Сам я не понимаю что делать с вашим кусочком кода) Если вм сложно. То не утруждайтесь с помощью. Решение GPT меня устраивает на 101 процент)

:D Ну да ладно, как говорится, хозяин Барин!
Если нужно было не ТОП 10, а постраничная навигация (некий Пагинатор), то так и нужно было писать!
Мне нужно вывод по страничный, а не ТОП 10 писать.
Ко всему я бы использовал LIMIT :limit OFFSET :start, но опять-же, о чем тут можно писать, если вы все равно не понимаете ничего.
И да, как вы думаете, BETWEEN 0 AND 999999, что если станет больше 999999 ? И Будет уже 2040503 например? Думаю догадаетесь.
BETWEEN - на сколько помнится ищит между значениями столбика, не понимаю логику использования его в данном контексте, когда уже есть лимит.

 

Изменено пользователем Saltfire
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...